Fix stale NSSL "fling" state caused by no-op fling

If a fling gesture ends with the current Y position in the exact end
position for the fling, then the code to run the fling animation is
bypassed, but the flag in AmbientState tracking whether a fling is
active is never reset. This CL replaces the short circuit logic with the
standard fling-end logic, ensuring that all expected code paths are
executed.

Fixes: 234824085
Fixes: 237272856
Test: manual
  1. Enter lockscreen
  2. Swipe up and then down to the exact same position, in one
     continuous gesture
  3. Wait for a notification update
  Observe: Shade resizes correctly to match the new contents
Change-Id: Ie8ddf1dbaaf1ba607657646db05d3eb622fc9415
Merged-In: Ie8ddf1dbaaf1ba607657646db05d3eb622fc9415
(cherry picked from commit 7f387f9ae9)
This commit is contained in:
Steve Elliott
2022-06-24 11:01:49 -04:00
parent c29777f405
commit 28dc43e6a7
2 changed files with 16 additions and 3 deletions

View File

@@ -599,9 +599,7 @@ public abstract class PanelViewController {
float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) {
if (target == mExpandedHeight && mOverExpansion == 0.0f) {
// We're at the target and didn't fling and there's no overshoot
endJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
mKeyguardStateController.notifyPanelFlingEnd();
notifyExpandingFinished();
onFlingEnd(false /* cancelled */);
return;
}
mIsFlinging = true;

View File

@@ -985,6 +985,21 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
verify(mKeyguardStateController).notifyPanelFlingEnd();
}
@Test
public void testSwipe_exactlyToTarget_notifiesNssl() {
// No over-expansion
mNotificationPanelViewController.setOverExpansion(0f);
// Fling to a target that is equal to the current position (i.e. a no-op fling).
mNotificationPanelViewController.flingToHeight(
0f,
true,
mNotificationPanelViewController.mExpandedHeight,
1f,
false);
// Verify that the NSSL is notified that the panel is *not* flinging.
verify(mNotificationStackScrollLayoutController).setPanelFlinging(false);
}
@Test
public void testDoubleTapRequired_Keyguard() {
FalsingManager.FalsingTapListener listener = getFalsingTapListener();