Merge "Fix the Translator references are gone when receiving response." into sc-dev am: 9d17b85ce7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15444547 Change-Id: I5a8c618791459450cdb15d53baf6dc5770d449fc
This commit is contained in:
@@ -18,6 +18,7 @@ package android.view.translation;
|
|||||||
|
|
||||||
import static android.view.translation.TranslationManager.STATUS_SYNC_CALL_FAIL;
|
import static android.view.translation.TranslationManager.STATUS_SYNC_CALL_FAIL;
|
||||||
import static android.view.translation.TranslationManager.SYNC_CALLS_TIMEOUT_MS;
|
import static android.view.translation.TranslationManager.SYNC_CALLS_TIMEOUT_MS;
|
||||||
|
import static android.view.translation.UiTranslationController.DEBUG;
|
||||||
|
|
||||||
import android.annotation.CallbackExecutor;
|
import android.annotation.CallbackExecutor;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
@@ -38,7 +39,6 @@ import com.android.internal.annotations.GuardedBy;
|
|||||||
import com.android.internal.os.IResultReceiver;
|
import com.android.internal.os.IResultReceiver;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
@@ -395,28 +395,27 @@ public class Translator {
|
|||||||
|
|
||||||
private static class TranslationResponseCallbackImpl extends ITranslationCallback.Stub {
|
private static class TranslationResponseCallbackImpl extends ITranslationCallback.Stub {
|
||||||
|
|
||||||
private final WeakReference<Consumer<TranslationResponse>> mCallback;
|
private final Consumer<TranslationResponse> mCallback;
|
||||||
private final WeakReference<Executor> mExecutor;
|
private final Executor mExecutor;
|
||||||
|
|
||||||
TranslationResponseCallbackImpl(Consumer<TranslationResponse> callback, Executor executor) {
|
TranslationResponseCallbackImpl(Consumer<TranslationResponse> callback, Executor executor) {
|
||||||
mCallback = new WeakReference<>(callback);
|
mCallback = callback;
|
||||||
mExecutor = new WeakReference<>(executor);
|
mExecutor = executor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTranslationResponse(TranslationResponse response) throws RemoteException {
|
public void onTranslationResponse(TranslationResponse response) throws RemoteException {
|
||||||
final Consumer<TranslationResponse> callback = mCallback.get();
|
if (DEBUG) {
|
||||||
|
Log.i(TAG, "onTranslationResponse called.");
|
||||||
|
}
|
||||||
final Runnable runnable =
|
final Runnable runnable =
|
||||||
() -> callback.accept(response);
|
() -> mCallback.accept(response);
|
||||||
if (callback != null) {
|
|
||||||
final Executor executor = mExecutor.get();
|
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
executor.execute(runnable);
|
mExecutor.execute(runnable);
|
||||||
} finally {
|
} finally {
|
||||||
restoreCallingIdentity(token);
|
restoreCallingIdentity(token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user