Merge "Make OnBackInvoked callback a WeakReference." into tm-dev am: 174e0d06b8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17075003

Change-Id: Ic283e715bdd61388c640b9a00c49b464e3f05082
This commit is contained in:
Bryce Lee
2022-03-08 21:47:59 +00:00
committed by Automerger Merge Worker

View File

@@ -28,6 +28,7 @@ import android.util.Log;
import android.view.IWindow;
import android.view.IWindowSession;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.TreeMap;
@@ -185,35 +186,58 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher {
}
private static class OnBackInvokedCallbackWrapper extends IOnBackInvokedCallback.Stub {
private final OnBackInvokedCallback mCallback;
private final WeakReference<OnBackInvokedCallback> mCallback;
OnBackInvokedCallbackWrapper(@NonNull OnBackInvokedCallback callback) {
mCallback = callback;
}
@NonNull
public OnBackInvokedCallback getCallback() {
return mCallback;
mCallback = new WeakReference<>(callback);
}
@Override
public void onBackStarted() {
Handler.getMain().post(() -> mCallback.onBackStarted());
Handler.getMain().post(() -> {
final OnBackInvokedCallback callback = mCallback.get();
if (callback == null) {
return;
}
callback.onBackStarted();
});
}
@Override
public void onBackProgressed(BackEvent backEvent) {
Handler.getMain().post(() -> mCallback.onBackProgressed(backEvent));
Handler.getMain().post(() -> {
final OnBackInvokedCallback callback = mCallback.get();
if (callback == null) {
return;
}
callback.onBackProgressed(backEvent);
});
}
@Override
public void onBackCancelled() {
Handler.getMain().post(() -> mCallback.onBackCancelled());
Handler.getMain().post(() -> {
final OnBackInvokedCallback callback = mCallback.get();
if (callback == null) {
return;
}
callback.onBackCancelled();
});
}
@Override
public void onBackInvoked() throws RemoteException {
Handler.getMain().post(() -> mCallback.onBackInvoked());
Handler.getMain().post(() -> {
final OnBackInvokedCallback callback = mCallback.get();
if (callback == null) {
return;
}
callback.onBackInvoked();
});
}
}