diff options
author | Jeff DeCew <jeffdq@google.com> | 2022-07-20 03:05:39 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-07-20 03:05:39 +0000 |
commit | c32877eceaaeeb64beb0fea5927dce1634ad81b6 (patch) | |
tree | 11c196e011ac67f79255de2c9595c5e2dba02b89 | |
parent | e6d842d33232b730612899b32b43152e3bb9fd6e (diff) | |
parent | c29777f4059da03ac663c3cc5b61d0f011aac8bb (diff) | |
download | base-c32877eceaaeeb64beb0fea5927dce1634ad81b6.tar.gz |
Fix squished notifications on the lockscreen. am: c29777f405
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19065229
Change-Id: Ib957a0c61c985d428e6ae3355dcdfb5c19cec55f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
4 files changed, 106 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index c9d70d1ad44c..e2ed1d83530b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -1323,10 +1323,24 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable if (mOnStackYChanged != null) { mOnStackYChanged.accept(listenerNeedsAnimation); } + updateStackEndHeightAndStackHeight(fraction); + } + + @VisibleForTesting + public void updateStackEndHeightAndStackHeight(float fraction) { + final float oldStackHeight = mAmbientState.getStackHeight(); if (mQsExpansionFraction <= 0 && !shouldSkipHeightUpdate()) { final float endHeight = updateStackEndHeight( getHeight(), getEmptyBottomMargin(), mTopPadding); updateStackHeight(endHeight, fraction); + } else { + // Always updateStackHeight to prevent jumps in the stack height when this fraction + // suddenly reapplies after a freeze. + final float endHeight = mAmbientState.getStackEndHeight(); + updateStackHeight(endHeight, fraction); + } + if (oldStackHeight != mAmbientState.getStackHeight()) { + requestChildrenUpdate(); } } @@ -1343,6 +1357,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable return stackEndHeight; } + @VisibleForTesting public void updateStackHeight(float endHeight, float fraction) { // During the (AOD<=>LS) transition where dozeAmount is changing, // apply dozeAmount to stack height instead of expansionFraction @@ -5041,6 +5056,19 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) public void setUnlockHintRunning(boolean running) { mAmbientState.setUnlockHintRunning(running); + if (!running) { + // re-calculate the stack height which was frozen while running this animation + updateStackPosition(); + } + } + + @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) + public void setPanelFlinging(boolean flinging) { + mAmbientState.setIsFlinging(flinging); + if (!flinging) { + // re-calculate the stack height which was frozen while flinging + updateStackPosition(); + } } @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index 2493ccbe5a48..010e6cf90817 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -1190,6 +1190,10 @@ public class NotificationStackScrollLayoutController { mView.setUnlockHintRunning(running); } + public void setPanelFlinging(boolean flinging) { + mView.setPanelFlinging(flinging); + } + public boolean isFooterViewNotGone() { return mView.isFooterViewNotGone(); } 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 2cac0017db9c..3580fe6cdbc5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -1782,14 +1782,14 @@ public class NotificationPanelViewController extends PanelViewController { mHeadsUpTouchHelper.notifyFling(!expand); mKeyguardStateController.notifyPanelFlingStart(!expand /* flingingToDismiss */); setClosingWithAlphaFadeout(!expand && !isOnKeyguard() && getFadeoutAlpha() == 1.0f); - mAmbientState.setIsFlinging(true); + mNotificationStackScrollLayoutController.setPanelFlinging(true); super.flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing); } @Override protected void onFlingEnd(boolean cancelled) { super.onFlingEnd(cancelled); - mAmbientState.setIsFlinging(false); + mNotificationStackScrollLayoutController.setPanelFlinging(false); } private boolean onQsIntercept(MotionEvent event) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index f5fe6f3a1a5f..b83743c90623 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -39,6 +39,7 @@ import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -122,12 +123,12 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { allowTestableLooperAsMainThread(); // Interact with real instance of AmbientState. - mAmbientState = new AmbientState( + mAmbientState = spy(new AmbientState( mContext, mDumpManager, mNotificationSectionsManager, mBypassController, - mStatusBarKeyguardViewManager); + mStatusBarKeyguardViewManager)); // Inject dependencies before initializing the layout mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState); @@ -190,7 +191,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { endHeight, dozeAmount); mStackScroller.updateStackHeight(endHeight, expansionFraction); - assertTrue(mAmbientState.getStackHeight() == expected); + assertThat(mAmbientState.getStackHeight()).isEqualTo(expected); } @Test @@ -205,7 +206,74 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { endHeight, expansionFraction); mStackScroller.updateStackHeight(endHeight, expansionFraction); - assertTrue(mAmbientState.getStackHeight() == expected); + assertThat(mAmbientState.getStackHeight()).isEqualTo(expected); + } + + @Test + public void updateStackEndHeightAndStackHeight_normallyUpdatesBoth() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + + // Validate that by default we update everything + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + } + + @Test + public void updateStackEndHeightAndStackHeight_onlyUpdatesStackHeightDuringSwipeUp() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + mAmbientState.setSwipingUp(true); + + // Validate that when the gesture is in progress, we update only the stackHeight + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState, never()).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + } + + @Test + public void setPanelFlinging_updatesStackEndHeightOnlyOnFinish() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + mAmbientState.setSwipingUp(true); + mStackScroller.setPanelFlinging(true); + mAmbientState.setSwipingUp(false); + + // Validate that when the animation is running, we update only the stackHeight + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState, never()).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + + // Validate that when the animation ends the stackEndHeight is recalculated immediately + clearInvocations(mAmbientState); + mStackScroller.setPanelFlinging(false); + verify(mAmbientState).setIsFlinging(eq(false)); + verify(mAmbientState).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + } + + @Test + public void setUnlockHintRunning_updatesStackEndHeightOnlyOnFinish() { + final float expansionFraction = 0.5f; + mAmbientState.setStatusBarState(StatusBarState.KEYGUARD); + mStackScroller.setUnlockHintRunning(true); + + // Validate that when the animation is running, we update only the stackHeight + clearInvocations(mAmbientState); + mStackScroller.updateStackEndHeightAndStackHeight(expansionFraction); + verify(mAmbientState, never()).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); + + // Validate that when the animation ends the stackEndHeight is recalculated immediately + clearInvocations(mAmbientState); + mStackScroller.setUnlockHintRunning(false); + verify(mAmbientState).setUnlockHintRunning(eq(false)); + verify(mAmbientState).setStackEndHeight(anyFloat()); + verify(mAmbientState).setStackHeight(anyFloat()); } @Test |