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

Commit 604ed5b7 authored by Alan Viverette's avatar Alan Viverette Committed by The Android Automerger
Browse files

Improve handling of activity destroy during popup exit animation

Ensures the decor view isn't double-removed and that we don't try to
dereference a null anchor view.

Bug: 19553353
Bug: 19551371
Change-Id: I191a41f9065b68e49d66f96794cb7456f79d2d34
parent d7bc4e43
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -160,14 +160,14 @@ public class PopupWindow {
    private final EpicenterCallback mEpicenterCallback = new EpicenterCallback() {
        @Override
        public Rect onGetEpicenter(Transition transition) {
            final View anchor = mAnchor.get();
            final View anchor = mAnchor != null ? mAnchor.get() : null;
            final View decor = mDecorView;
            if (anchor == null || decor == null) {
                return null;
            }

            final Rect anchorBounds = mAnchorBounds;
            final int[] anchorLocation = mAnchor.get().getLocationOnScreen();
            final int[] anchorLocation = anchor.getLocationOnScreen();
            final int[] popupLocation = mDecorView.getLocationOnScreen();

            // Compute the position of the anchor relative to the popup.
@@ -1632,8 +1632,14 @@ public class PopupWindow {
     * view hierarchy, if necessary.
     */
    private void dismissImmediate(View contentView) {
        if (mDecorView == null || mBackgroundView == null) {
            throw new RuntimeException("Popup window already dismissed");
        }

        try {
            if (mDecorView.isAttachedToWindow()) {
                mWindowManager.removeViewImmediate(mDecorView);
            }
        } finally {
            mDecorView.removeView(mBackgroundView);
            mDecorView = null;