Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbf87929 authored by Bryce Lee's avatar Bryce Lee Committed by Automerger Merge Worker
Browse files

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

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

Change-Id: Ic283e715bdd61388c640b9a00c49b464e3f05082
parents d6385cd3 174e0d06
Loading
Loading
Loading
Loading
+35 −11
Original line number Diff line number Diff line
@@ -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();
            });
        }
    }