Animate top padding of notifications on status view height change.

Note that `requestScrollerTopPaddingUpdate(true);` doesn't work because
the topPadding doesn't update until later, through the
`ShadeLayoutChangeListener.onLayoutChange`.

Fix: 293564374
Test: on Keyguard turn on/off flashlight via shortcut
Test: onKeyguardStatusViewHeightChange_animatesNextTopPaddingChangeForNSSL()
Change-Id: Id3cee8616df497f0957c25cd1ba56a4dbfbfbc0e
This commit is contained in:
Xiaowen Lei
2023-08-14 09:14:30 -07:00
parent 5fbbe4489d
commit ea9f269282
2 changed files with 24 additions and 0 deletions

View File

@@ -1241,6 +1241,13 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
mKeyguardStatusViewController.init();
}
mKeyguardStatusViewController.setSplitShadeEnabled(mSplitShadeEnabled);
mKeyguardStatusViewController.getView().addOnLayoutChangeListener(
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
int oldHeight = oldBottom - oldTop;
if (v.getHeight() != oldHeight) {
mNotificationStackScrollLayoutController.animateNextTopPaddingChange();
}
});
updateClockAppearance();

View File

@@ -538,6 +538,23 @@ public class NotificationPanelViewControllerTest extends NotificationPanelViewCo
assertKeyguardStatusViewCentered();
}
@Test
public void onKeyguardStatusViewHeightChange_animatesNextTopPaddingChangeForNSSL() {
ArgumentCaptor<View.OnLayoutChangeListener> captor =
ArgumentCaptor.forClass(View.OnLayoutChangeListener.class);
verify(mKeyguardStatusView).addOnLayoutChangeListener(captor.capture());
View.OnLayoutChangeListener listener = captor.getValue();
clearInvocations(mNotificationStackScrollLayoutController);
when(mKeyguardStatusView.getHeight()).thenReturn(0);
listener.onLayoutChange(mKeyguardStatusView, /* left= */ 0, /* top= */ 0, /* right= */
0, /* bottom= */ 0, /* oldLeft= */ 0, /* oldTop= */ 0, /* oldRight= */
0, /* oldBottom = */ 200);
verify(mNotificationStackScrollLayoutController).animateNextTopPaddingChange();
}
@Test
public void testCanCollapsePanelOnTouch_trueForKeyGuard() {
mStatusBarStateController.setState(KEYGUARD);