From 413e9313133daa482d0fa3188573d5e311ff6fb9 Mon Sep 17 00:00:00 2001 From: Tony Huang Date: Tue, 12 May 2020 16:09:14 +0800 Subject: [PATCH] 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 --- .../systemui/pip/phone/PipTouchHandler.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java index 046837346d3a2..e302fd73d7850 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -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(); + } + } }; /**