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

Commit 717220d6 authored by Mark Renouf's avatar Mark Renouf Committed by android-build-merger
Browse files

Merge "Removes strong ref to Activity from RequestFinishCallback" into qt-qpr1-dev

am: 0b1782d6

Change-Id: I56cbccdc32729b7382893ab448a27d323a1763e7
parents 7c924718 0b1782d6
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -3656,6 +3657,22 @@ public class Activity extends ContextThemeWrapper
        return false;
    }

    private static final class RequestFinishCallback extends IRequestFinishCallback.Stub {
        private final WeakReference<Activity> mActivityRef;

        RequestFinishCallback(WeakReference<Activity> activityRef) {
            mActivityRef = activityRef;
        }

        @Override
        public void requestFinish() {
            Activity activity = mActivityRef.get();
            if (activity != null) {
                activity.mHandler.post(activity::finishAfterTransition);
            }
        }
    }

    /**
     * Called when the activity has detected the user's press of the back
     * key.  The default implementation simply finishes the current activity,
@@ -3681,11 +3698,7 @@ public class Activity extends ContextThemeWrapper
            // while at the root of the task. This call allows ActivityTaskManager
            // to intercept or defer finishing.
            ActivityTaskManager.getService().onBackPressedOnTaskRoot(mToken,
                    new IRequestFinishCallback.Stub() {
                        public void requestFinish() {
                            mHandler.post(() -> finishAfterTransition());
                        }
                    });
                    new RequestFinishCallback(new WeakReference<>(this)));
        } catch (RemoteException e) {
            finishAfterTransition();
        }