Fix squished notifications on the lockscreen. am: c29777f405
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19065229 Change-Id: I0c3ad0aff7cb63b7b8d4113a1493ff71add01ef0 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -1190,6 +1190,10 @@ public class NotificationStackScrollLayoutController {
|
||||
mView.setUnlockHintRunning(running);
|
||||
}
|
||||
|
||||
public void setPanelFlinging(boolean flinging) {
|
||||
mView.setPanelFlinging(flinging);
|
||||
}
|
||||
|
||||
public boolean isFooterViewNotGone() {
|
||||
return mView.isFooterViewNotGone();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user