diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt index 9765ace7179fb..b34bfad499f87 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt @@ -179,7 +179,10 @@ constructor( } override fun onTouchEvent(event: MotionEvent): Boolean { - if (!canHandleMotionEvent()) { + val finishExpanding = (event.action == MotionEvent.ACTION_CANCEL || + event.action == MotionEvent.ACTION_UP) && isExpanding + if (!canHandleMotionEvent() && !finishExpanding) { + // We allow cancellations/finishing to still go through here to clean up the state return false } 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 09229ade22751..1a2b9898398b6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -3840,8 +3840,13 @@ public class NotificationPanelViewController extends PanelViewController { expand(true /* animate */); } initDownStates(event); - if (!mIsExpanding && !shouldQuickSettingsIntercept(mDownX, mDownY, 0) - && mPulseExpansionHandler.onTouchEvent(event)) { + + // If pulse is expanding already, let's give it the touch. There are situations + // where the panel starts expanding even though we're also pulsing + boolean pulseShouldGetTouch = (!mIsExpanding + && !shouldQuickSettingsIntercept(mDownX, mDownY, 0)) + || mPulseExpansionHandler.isExpanding(); + if (pulseShouldGetTouch && mPulseExpansionHandler.onTouchEvent(event)) { // We're expanding all the other ones shouldn't get this anymore return true; }