1 /*
2  * Copyright (C) 2016 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 
17 package com.googlecode.android_scripting.facade;
18 
19 import android.os.SystemClock;
20 import android.speech.tts.TextToSpeech;
21 import android.speech.tts.TextToSpeech.OnInitListener;
22 
23 import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
24 import com.googlecode.android_scripting.rpc.Rpc;
25 import com.googlecode.android_scripting.rpc.RpcParameter;
26 
27 import java.util.concurrent.CountDownLatch;
28 
29 /**
30  * Provides Text To Speech services
31  */
32 
33 public class TextToSpeechFacade extends RpcReceiver {
34 
35   private final TextToSpeech mTts;
36   private final CountDownLatch mOnInitLock;
37 
TextToSpeechFacade(FacadeManager manager)38   public TextToSpeechFacade(FacadeManager manager) {
39     super(manager);
40     mOnInitLock = new CountDownLatch(1);
41     mTts = new TextToSpeech(manager.getService(), new OnInitListener() {
42       @Override
43       public void onInit(int arg0) {
44         mOnInitLock.countDown();
45       }
46     });
47   }
48 
49   @Override
shutdown()50   public void shutdown() {
51     while (mTts.isSpeaking()) {
52       SystemClock.sleep(100);
53     }
54     mTts.shutdown();
55   }
56 
57   @Rpc(description = "Speaks the provided message via TTS.")
ttsSpeak(@pcParametername = "message") String message)58   public void ttsSpeak(@RpcParameter(name = "message") String message) throws InterruptedException {
59     mOnInitLock.await();
60     if (message != null) {
61       mTts.speak(message, TextToSpeech.QUEUE_ADD, null);
62     }
63   }
64 
65   @Rpc(description = "Returns True if speech is currently in progress.")
ttsIsSpeaking()66   public Boolean ttsIsSpeaking() throws InterruptedException {
67     mOnInitLock.await();
68     return mTts.isSpeaking();
69   }
70 
71 }
72