Merge "Fix translation reference gone problem." into sc-dev
This commit is contained in:
@@ -168,8 +168,10 @@ public final class TranslationManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
synchronized (mLock) {
|
||||||
mTranslators.put(tId, translator);
|
mTranslators.put(tId, translator);
|
||||||
mTranslatorIds.put(translationContext, tId);
|
mTranslatorIds.put(translationContext, tId);
|
||||||
|
}
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
executor.execute(() -> callback.accept(translator));
|
executor.execute(() -> callback.accept(translator));
|
||||||
|
|||||||
@@ -102,19 +102,19 @@ public class Translator {
|
|||||||
|
|
||||||
static class ServiceBinderReceiver extends IResultReceiver.Stub {
|
static class ServiceBinderReceiver extends IResultReceiver.Stub {
|
||||||
// TODO: refactor how translator is instantiated after removing deprecated createTranslator.
|
// TODO: refactor how translator is instantiated after removing deprecated createTranslator.
|
||||||
private final WeakReference<Translator> mTranslator;
|
private final Translator mTranslator;
|
||||||
private final CountDownLatch mLatch = new CountDownLatch(1);
|
private final CountDownLatch mLatch = new CountDownLatch(1);
|
||||||
private int mSessionId;
|
private int mSessionId;
|
||||||
|
|
||||||
private Consumer<Translator> mCallback;
|
private Consumer<Translator> mCallback;
|
||||||
|
|
||||||
ServiceBinderReceiver(Translator translator, Consumer<Translator> callback) {
|
ServiceBinderReceiver(Translator translator, Consumer<Translator> callback) {
|
||||||
mTranslator = new WeakReference<>(translator);
|
mTranslator = translator;
|
||||||
mCallback = callback;
|
mCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
ServiceBinderReceiver(Translator translator) {
|
ServiceBinderReceiver(Translator translator) {
|
||||||
mTranslator = new WeakReference<>(translator);
|
mTranslator = translator;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getSessionStateResult() throws TimeoutException {
|
int getSessionStateResult() throws TimeoutException {
|
||||||
@@ -139,14 +139,9 @@ public class Translator {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mSessionId = resultData.getInt(EXTRA_SESSION_ID);
|
|
||||||
final Translator translator = mTranslator.get();
|
|
||||||
if (translator == null) {
|
|
||||||
Log.w(TAG, "received result after session is finished");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final IBinder binder;
|
final IBinder binder;
|
||||||
if (resultData != null) {
|
if (resultData != null) {
|
||||||
|
mSessionId = resultData.getInt(EXTRA_SESSION_ID);
|
||||||
binder = resultData.getBinder(EXTRA_SERVICE_BINDER);
|
binder = resultData.getBinder(EXTRA_SERVICE_BINDER);
|
||||||
if (binder == null) {
|
if (binder == null) {
|
||||||
Log.wtf(TAG, "No " + EXTRA_SERVICE_BINDER + " extra result");
|
Log.wtf(TAG, "No " + EXTRA_SERVICE_BINDER + " extra result");
|
||||||
@@ -155,10 +150,10 @@ public class Translator {
|
|||||||
} else {
|
} else {
|
||||||
binder = null;
|
binder = null;
|
||||||
}
|
}
|
||||||
translator.setServiceBinder(binder);
|
mTranslator.setServiceBinder(binder);
|
||||||
mLatch.countDown();
|
mLatch.countDown();
|
||||||
if (mCallback != null) {
|
if (mCallback != null) {
|
||||||
mCallback.accept(translator);
|
mCallback.accept(mTranslator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user