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

Commit 413e9313 authored by Tony Huang's avatar Tony Huang
Browse files

Set allowTouches after the fling animation end

Due to mIsUserInteracting in PipTouchState will be false after the
user drag window, the PiP window will not aute move when bounds
changed. Fix it by add a setAllowTouches call when fling animation
end.

Bug: 156431985
Test: Drag PiP window to bottom then show keyboard and check
Change-Id: Ib1dca59ee9511ced804876655e6bcb4938145343
parent a24033d8
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -815,6 +815,7 @@ public class PipTouchHandler {
    private class DefaultPipTouchGesture extends PipTouchGesture {
        private final Point mStartPosition = new Point();
        private final PointF mDelta = new PointF();
        private boolean mShouldHideMenuAfterFling;

        @Override
        public void onDown(PipTouchState touchState) {
@@ -892,21 +893,17 @@ public class PipTouchHandler {
            final float velocity = PointF.length(vel.x, vel.y);

            if (touchState.isDragging()) {
                Runnable endAction = null;
                if (mMenuState != MENU_STATE_NONE) {
                    // If the menu is still visible, then just poke the menu so that
                    // it will timeout after the user stops touching it
                    mMenuController.showMenu(mMenuState, mMotionHelper.getBounds(),
                            true /* allowMenuTimeout */, willResizeMenu());
                } else {
                    // If the menu is not visible, then we can still be showing the activity for the
                    // dismiss overlay, so just finish it after the animation completes
                    endAction = mMenuController::hideMenu;
                }
                mShouldHideMenuAfterFling = mMenuState == MENU_STATE_NONE;

                mMotionHelper.flingToSnapTarget(vel.x, vel.y,
                        PipTouchHandler.this::updateDismissFraction /* updateAction */,
                        endAction /* endAction */);
                        this::flingEndAction /* endAction */);
            } else if (mTouchState.isDoubleTap()) {
                // Expand to fullscreen if this is a double tap
                // the PiP should be frozen until the transition ends
@@ -927,6 +924,15 @@ public class PipTouchHandler {
            }
            return true;
        }

        private void flingEndAction() {
            mTouchState.setAllowTouches(true);
            if (mShouldHideMenuAfterFling) {
                // If the menu is not visible, then we can still be showing the activity for the
                // dismiss overlay, so just finish it after the animation completes
                mMenuController.hideMenu();
            }
        }
    };

    /**