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:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user