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
This commit is contained in:
@@ -599,9 +599,7 @@ public abstract class PanelViewController {
|
|||||||
float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) {
|
float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) {
|
||||||
if (target == mExpandedHeight && mOverExpansion == 0.0f) {
|
if (target == mExpandedHeight && mOverExpansion == 0.0f) {
|
||||||
// We're at the target and didn't fling and there's no overshoot
|
// We're at the target and didn't fling and there's no overshoot
|
||||||
endJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
|
onFlingEnd(false /* cancelled */);
|
||||||
mKeyguardStateController.notifyPanelFlingEnd();
|
|
||||||
notifyExpandingFinished();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mIsFlinging = true;
|
mIsFlinging = true;
|
||||||
|
|||||||
@@ -985,6 +985,21 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
|||||||
verify(mKeyguardStateController).notifyPanelFlingEnd();
|
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
|
@Test
|
||||||
public void testDoubleTapRequired_Keyguard() {
|
public void testDoubleTapRequired_Keyguard() {
|
||||||
FalsingManager.FalsingTapListener listener = getFalsingTapListener();
|
FalsingManager.FalsingTapListener listener = getFalsingTapListener();
|
||||||
|
|||||||
Reference in New Issue
Block a user