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

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

Change-Id: I432c8d270ddb05c5c93ca67830739454fc3d8592
This commit is contained in:
Bryce Lee
2022-03-08 22:03:24 +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();
});
}
}