diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java index f6b212c6f19f7..c151715cd4ef6 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipResizeGestureHandler.java @@ -260,12 +260,14 @@ public class PipResizeGestureHandler { private void onMotionEvent(MotionEvent ev) { int action = ev.getActionMasked(); + float x = ev.getX(); + float y = ev.getY(); if (action == MotionEvent.ACTION_DOWN) { mLastResizeBounds.setEmpty(); - mAllowGesture = isWithinTouchRegion((int) ev.getX(), (int) ev.getY()); + mAllowGesture = isWithinTouchRegion((int) x, (int) y); if (mAllowGesture) { - setCtrlType((int) ev.getX(), (int) ev.getY()); - mDownPoint.set(ev.getX(), ev.getY()); + setCtrlType((int) x, (int) y); + mDownPoint.set(x, y); mLastDownBounds.set(mMotionHelper.getBounds()); } @@ -277,20 +279,23 @@ public class PipResizeGestureHandler { break; case MotionEvent.ACTION_MOVE: // Capture inputs - float dx = Math.abs(ev.getX() - mDownPoint.x); - float dy = Math.abs(ev.getY() - mDownPoint.y); - if (!mThresholdCrossed && dx > mTouchSlop && dy > mTouchSlop) { + if (!mThresholdCrossed + && Math.hypot(x - mDownPoint.x, y - mDownPoint.y) > mTouchSlop) { mThresholdCrossed = true; + // Reset the down to begin resizing from this point + mDownPoint.set(x, y); mInputMonitor.pilferPointers(); } - final Rect currentPipBounds = mMotionHelper.getBounds(); - mLastResizeBounds.set(TaskResizingAlgorithm.resizeDrag(ev.getX(), ev.getY(), - mDownPoint.x, mDownPoint.y, currentPipBounds, mCtrlType, mMinSize.x, - mMinSize.y, mMaxSize, true, - mLastDownBounds.width() > mLastDownBounds.height())); - mPipBoundsHandler.transformBoundsToAspectRatio(mLastResizeBounds); - mPipTaskOrganizer.scheduleUserResizePip(mLastDownBounds, mLastResizeBounds, - null); + if (mThresholdCrossed) { + final Rect currentPipBounds = mMotionHelper.getBounds(); + mLastResizeBounds.set(TaskResizingAlgorithm.resizeDrag(x, y, + mDownPoint.x, mDownPoint.y, currentPipBounds, mCtrlType, mMinSize.x, + mMinSize.y, mMaxSize, true, + mLastDownBounds.width() > mLastDownBounds.height())); + mPipBoundsHandler.transformBoundsToAspectRatio(mLastResizeBounds); + mPipTaskOrganizer.scheduleUserResizePip(mLastDownBounds, mLastResizeBounds, + null); + } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index d0347f9f34867..790b2585190d0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -200,11 +200,13 @@ public class OverviewProxyService extends CurrentUserTracker implements mInputFocusTransferStartY = event.getY(); mInputFocusTransferStartMillis = event.getEventTime(); statusBar.onInputFocusTransfer( - mInputFocusTransferStarted, 0 /* velocity */); + mInputFocusTransferStarted, false /* cancel */, + 0 /* velocity */); } if (action == ACTION_UP || action == ACTION_CANCEL) { mInputFocusTransferStarted = false; statusBar.onInputFocusTransfer(mInputFocusTransferStarted, + action == ACTION_CANCEL, (event.getY() - mInputFocusTransferStartY) / (event.getEventTime() - mInputFocusTransferStartMillis)); } @@ -692,7 +694,8 @@ public class OverviewProxyService extends CurrentUserTracker implements mHandler.post(()-> { mStatusBarOptionalLazy.ifPresent(statusBarLazy -> { mInputFocusTransferStarted = false; - statusBarLazy.get().onInputFocusTransfer(false, 0 /* velocity */); + statusBarLazy.get().onInputFocusTransfer(false, true /* cancel */, + 0 /* velocity */); }); }); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index 9e7bf62205467..e720d820fd76f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -1328,11 +1328,15 @@ public class NotificationPanelViewController extends PanelViewController { * * @param velocity unit is in px / millis */ - public void stopWaitingForOpenPanelGesture(final float velocity) { + public void stopWaitingForOpenPanelGesture(boolean cancel, final float velocity) { if (mExpectingSynthesizedDown) { mExpectingSynthesizedDown = false; - maybeVibrateOnOpening(); - fling(velocity > 1f ? 1000f * velocity : 0, true /* expand */); + if (cancel) { + collapse(false /* delayed */, 1.0f /* speedUpFactor */); + } else { + maybeVibrateOnOpening(); + fling(velocity > 1f ? 1000f * velocity : 0, true /* expand */); + } onTrackingStopped(false); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 0c053db038038..5a605df148920 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -2109,7 +2109,7 @@ public class StatusBar extends SystemUI implements DemoMode, /** * Called when another window is about to transfer it's input focus. */ - public void onInputFocusTransfer(boolean start, float velocity) { + public void onInputFocusTransfer(boolean start, boolean cancel, float velocity) { if (!mCommandQueue.panelsEnabled()) { return; } @@ -2117,7 +2117,7 @@ public class StatusBar extends SystemUI implements DemoMode, if (start) { mNotificationPanelViewController.startWaitingForOpenPanelGesture(); } else { - mNotificationPanelViewController.stopWaitingForOpenPanelGesture(velocity); + mNotificationPanelViewController.stopWaitingForOpenPanelGesture(cancel, velocity); } }