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

Commit f7de6802 authored by Joshua Tsuji's avatar Joshua Tsuji
Browse files

Don't recreate the dismiss target onConfigurationChanged.

Instead, update its layout params to move it to the correct position. Also, catch the exception just in case.

Test: manual
Bug: 153551432
Change-Id: I34cd92647f6cf2cddf6caea9b727794b2bd39bca
parent a8492ef4
Loading
Loading
Loading
Loading
+37 −21
Original line number Diff line number Diff line
@@ -321,7 +321,7 @@ public class PipTouchHandler {
    }

    public void onActivityPinned() {
        createDismissTargetMaybe();
        createOrUpdateDismissTarget();

        mShowPipMenuOnAnimationEnd = true;
        mPipResizeGestureHandler.onActivityPinned();
@@ -357,8 +357,7 @@ public class PipTouchHandler {
        mMotionHelper.synchronizePinnedStackBounds();

        // Recreate the dismiss target for the new orientation.
        cleanUpDismissTarget();
        createDismissTargetMaybe();
        createOrUpdateDismissTarget();
    }

    public void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {
@@ -454,14 +453,32 @@ public class PipTouchHandler {
    }

    /** Adds the magnetic target view to the WindowManager so it's ready to be animated in. */
    private void createDismissTargetMaybe() {
    private void createOrUpdateDismissTarget() {
        if (!mTargetViewContainer.isAttachedToWindow()) {
            mHandler.removeCallbacks(mShowTargetAction);
            mMagneticTargetAnimator.cancel();

            mTargetViewContainer.setVisibility(View.INVISIBLE);

            try {
                mWindowManager.addView(mTargetViewContainer, getDismissTargetLayoutParams());
            } catch (IllegalStateException e) {
                // This shouldn't happen, but if the target is already added, just update its layout
                // params.
                mWindowManager.updateViewLayout(
                        mTargetViewContainer, getDismissTargetLayoutParams());
            }
        } else {
            mWindowManager.updateViewLayout(mTargetViewContainer, getDismissTargetLayoutParams());
        }
    }

    /** Returns layout params for the dismiss target, using the latest display metrics. */
    private WindowManager.LayoutParams getDismissTargetLayoutParams() {
        final Point windowSize = new Point();
        mWindowManager.getDefaultDisplay().getRealSize(windowSize);
            WindowManager.LayoutParams lp = new WindowManager.LayoutParams(

        final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                mDismissAreaHeight,
                0, windowSize.y - mDismissAreaHeight,
@@ -470,18 +487,17 @@ public class PipTouchHandler {
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);

        lp.setTitle("pip-dismiss-overlay");
        lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
        lp.setFitInsetsTypes(0 /* types */);

            mTargetViewContainer.setVisibility(View.INVISIBLE);
            mWindowManager.addView(mTargetViewContainer, lp);
        }
        return lp;
    }

    /** Makes the dismiss target visible and animates it in, if it isn't already visible. */
    private void showDismissTargetMaybe() {
        createDismissTargetMaybe();
        createOrUpdateDismissTarget();

        if (mTargetViewContainer.getVisibility() != View.VISIBLE) {