summaryrefslogtreecommitdiffstats
path: root/core/java/android/speech/tts
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2011-10-04 17:20:09 +0100
committerNarayan Kamath <narayan@google.com>2011-10-04 17:20:09 +0100
commita57f23837ad172c1b046d5e9cc8eb3d2e41a69f4 (patch)
treedb5fb30e9e4e61fe8248001d54837fc6de310dc0 /core/java/android/speech/tts
parent3e21c99f10de1acdd373fbb166a7618bebfceba0 (diff)
downloadframeworks_base-a57f23837ad172c1b046d5e9cc8eb3d2e41a69f4.zip
frameworks_base-a57f23837ad172c1b046d5e9cc8eb3d2e41a69f4.tar.gz
frameworks_base-a57f23837ad172c1b046d5e9cc8eb3d2e41a69f4.tar.bz2
Allow listeners to be set before the service connects.
bug:5408876 Change-Id: Ib7b2ad56c74e24cc84b55ce748053b80eb0f66e8
Diffstat (limited to 'core/java/android/speech/tts')
-rwxr-xr-xcore/java/android/speech/tts/TextToSpeech.java36
1 files changed, 21 insertions, 15 deletions
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 5126e48..98ab310 100755
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -440,6 +440,9 @@ public class TextToSpeech {
private final Context mContext;
private Connection mServiceConnection;
private OnInitListener mInitListener;
+ // Written from an unspecified application thread, read from
+ // a binder thread.
+ private volatile OnUtteranceCompletedListener mUtteranceCompletedListener;
private final Object mStartLock = new Object();
private String mRequestedEngine;
@@ -1071,20 +1074,8 @@ public class TextToSpeech {
* @return {@link #ERROR} or {@link #SUCCESS}.
*/
public int setOnUtteranceCompletedListener(final OnUtteranceCompletedListener listener) {
- return runAction(new Action<Integer>() {
- @Override
- public Integer run(ITextToSpeechService service) throws RemoteException {
- ITextToSpeechCallback.Stub callback = new ITextToSpeechCallback.Stub() {
- public void utteranceCompleted(String utteranceId) {
- if (listener != null) {
- listener.onUtteranceCompleted(utteranceId);
- }
- }
- };
- service.setCallback(getPackageName(), callback);
- return SUCCESS;
- }
- }, ERROR, "setOnUtteranceCompletedListener");
+ mUtteranceCompletedListener = listener;
+ return TextToSpeech.SUCCESS;
}
/**
@@ -1137,6 +1128,15 @@ public class TextToSpeech {
private class Connection implements ServiceConnection {
private ITextToSpeechService mService;
+ private final ITextToSpeechCallback.Stub mCallback = new ITextToSpeechCallback.Stub() {
+ @Override
+ public void utteranceCompleted(String utteranceId) {
+ OnUtteranceCompletedListener listener = mUtteranceCompletedListener;
+ if (listener != null) {
+ listener.onUtteranceCompleted(utteranceId);
+ }
+ }
+ };
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG, "Connected to " + name);
@@ -1147,7 +1147,13 @@ public class TextToSpeech {
}
mServiceConnection = this;
mService = ITextToSpeechService.Stub.asInterface(service);
- dispatchOnInit(SUCCESS);
+ try {
+ mService.setCallback(getPackageName(), mCallback);
+ dispatchOnInit(SUCCESS);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Error connecting to service, setCallback() failed");
+ dispatchOnInit(ERROR);
+ }
}
}