Merge "Allow listeners to be set before the service connects."
This commit is contained in:
committed by
Android (Google) Code Review
commit
b4e7d4ca75
@@ -440,6 +440,9 @@ public class TextToSpeech {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private Connection mServiceConnection;
|
private Connection mServiceConnection;
|
||||||
private OnInitListener mInitListener;
|
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 final Object mStartLock = new Object();
|
||||||
|
|
||||||
private String mRequestedEngine;
|
private String mRequestedEngine;
|
||||||
@@ -1071,20 +1074,8 @@ public class TextToSpeech {
|
|||||||
* @return {@link #ERROR} or {@link #SUCCESS}.
|
* @return {@link #ERROR} or {@link #SUCCESS}.
|
||||||
*/
|
*/
|
||||||
public int setOnUtteranceCompletedListener(final OnUtteranceCompletedListener listener) {
|
public int setOnUtteranceCompletedListener(final OnUtteranceCompletedListener listener) {
|
||||||
return runAction(new Action<Integer>() {
|
mUtteranceCompletedListener = listener;
|
||||||
@Override
|
return TextToSpeech.SUCCESS;
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1137,6 +1128,15 @@ public class TextToSpeech {
|
|||||||
|
|
||||||
private class Connection implements ServiceConnection {
|
private class Connection implements ServiceConnection {
|
||||||
private ITextToSpeechService mService;
|
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) {
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||||
Log.i(TAG, "Connected to " + name);
|
Log.i(TAG, "Connected to " + name);
|
||||||
@@ -1147,7 +1147,13 @@ public class TextToSpeech {
|
|||||||
}
|
}
|
||||||
mServiceConnection = this;
|
mServiceConnection = this;
|
||||||
mService = ITextToSpeechService.Stub.asInterface(service);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user