diff options
| -rwxr-xr-x | core/java/android/speech/tts/TextToSpeech.java | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java index 7a174af1562a..5e367cb56aa1 100755 --- a/core/java/android/speech/tts/TextToSpeech.java +++ b/core/java/android/speech/tts/TextToSpeech.java @@ -1282,6 +1282,7 @@ public class TextToSpeech { } }; + @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i(TAG, "Connected to " + name); synchronized(mStartLock) { @@ -1305,6 +1306,7 @@ public class TextToSpeech { return mCallback; } + @Override public void onServiceDisconnected(ComponentName name) { synchronized(mStartLock) { mService = null; @@ -1317,24 +1319,33 @@ public class TextToSpeech { public void disconnect() { mContext.unbindService(this); + + synchronized (mStartLock) { + mService = null; + // If this is the active connection, clear it + if (mServiceConnection == this) { + mServiceConnection = null; + } + + } } public <R> R runAction(Action<R> action, R errorResult, String method, boolean reconnect) { - try { - synchronized (mStartLock) { + synchronized (mStartLock) { + try { if (mService == null) { Log.w(TAG, method + " failed: not connected to TTS engine"); return errorResult; } return action.run(mService); + } catch (RemoteException ex) { + Log.e(TAG, method + " failed", ex); + if (reconnect) { + disconnect(); + initTts(); + } + return errorResult; } - } catch (RemoteException ex) { - Log.e(TAG, method + " failed", ex); - if (reconnect) { - disconnect(); - initTts(); - } - return errorResult; } } } |