diff options
| author | Narayan Kamath <narayan@google.com> | 2011-10-04 17:20:09 +0100 |
|---|---|---|
| committer | Narayan Kamath <narayan@google.com> | 2011-10-04 17:20:09 +0100 |
| commit | a57f23837ad172c1b046d5e9cc8eb3d2e41a69f4 (patch) | |
| tree | db5fb30e9e4e61fe8248001d54837fc6de310dc0 /core/java/android/speech/tts | |
| parent | 3e21c99f10de1acdd373fbb166a7618bebfceba0 (diff) | |
| download | frameworks_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-x | core/java/android/speech/tts/TextToSpeech.java | 36 |
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); + } } } |
