diff options
2 files changed, 38 insertions, 1 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 e37750194368..6821b141d140 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 @@ -1297,7 +1297,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable + mAmbientState.getOverExpansion() - getCurrentOverScrollAmount(false /* top */); float fraction = mAmbientState.getExpansionFraction(); - if (mAmbientState.isBouncerInTransit()) { + // If we are on quick settings, we need to quickly hide it to show the bouncer to avoid an + // overlap. Otherwise, we maintain the normal fraction for smoothness. + if (mAmbientState.isBouncerInTransit() && mQsExpansionFraction > 0f) { fraction = BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(fraction); } final float stackY = MathUtils.lerp(0, endTopPosition, fraction); 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 6ae021b48f66..43530365360b 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 @@ -55,6 +55,7 @@ import android.view.ViewGroup; import androidx.test.annotation.UiThreadTest; import androidx.test.filters.SmallTest; +import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.systemui.ExpandHelper; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; @@ -179,6 +180,40 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { } @Test + public void testUpdateStackHeight_qsExpansionGreaterThanZero() { + final float expansionFraction = 0.2f; + final float overExpansion = 50f; + + mStackScroller.setQsExpansionFraction(1f); + mAmbientState.setExpansionFraction(expansionFraction); + mAmbientState.setOverExpansion(overExpansion); + when(mAmbientState.isBouncerInTransit()).thenReturn(true); + + + mStackScroller.setExpandedHeight(100f); + + float expected = MathUtils.lerp(0, overExpansion, + BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(expansionFraction)); + assertThat(mAmbientState.getStackY()).isEqualTo(expected); + } + + @Test + public void testUpdateStackHeight_qsExpansionZero() { + final float expansionFraction = 0.2f; + final float overExpansion = 50f; + + mStackScroller.setQsExpansionFraction(0f); + mAmbientState.setExpansionFraction(expansionFraction); + mAmbientState.setOverExpansion(overExpansion); + when(mAmbientState.isBouncerInTransit()).thenReturn(true); + + mStackScroller.setExpandedHeight(100f); + + float expected = MathUtils.lerp(0, overExpansion, expansionFraction); + assertThat(mAmbientState.getStackY()).isEqualTo(expected); + } + + @Test public void testUpdateStackHeight_withDozeAmount_whenDozeChanging() { final float dozeAmount = 0.5f; mAmbientState.setDozeAmount(dozeAmount); |