diff options
3 files changed, 58 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index 047fea123dc3..5572a8cf23e8 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -1651,10 +1651,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding)); mKeyguardNotificationBottomPadding = bottomPadding; - float staticTopPadding = mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding() - // getMinStackScrollerPadding is from the top of the screen, - // but we need it from the top of the NSSL. - - mNotificationStackScrollLayoutController.getTop(); + float staticTopPadding = mClockPositionAlgorithm.getLockscreenNotifPadding( + mNotificationStackScrollLayoutController.getTop()); + mKeyguardNotificationTopPadding = staticTopPadding; // To debug the available space, enable debug lines in this class. If you change how the @@ -1668,8 +1667,8 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump Log.i(TAG, "\n"); Log.i(TAG, "staticTopPadding[" + staticTopPadding + "] = Clock.padding[" - + mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding() - + "] - NSSLC.top[" + mNotificationStackScrollLayoutController.getTop() + + mClockPositionAlgorithm.getLockscreenNotifPadding( + mNotificationStackScrollLayoutController.getTop()) + "]" ); Log.i(TAG, "bottomPadding[" + bottomPadding diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java index 561bd91b964f..fc3c85a0807b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java @@ -229,12 +229,18 @@ public class KeyguardClockPositionAlgorithm { } } - public float getLockscreenMinStackScrollerPadding() { + /** + * @param nsslTop NotificationStackScrollLayout top, which is below top of the srceen. + * @return Distance from nsslTop to top of the first view in the lockscreen shade. + */ + public float getLockscreenNotifPadding(float nsslTop) { if (mBypassEnabled) { - return mUnlockedStackScrollerPadding; + return mUnlockedStackScrollerPadding - nsslTop; } else if (mIsSplitShade) { - return mSplitShadeTargetTopMargin + mUserSwitchHeight; + return mSplitShadeTargetTopMargin + mUserSwitchHeight - nsslTop; } else { + // Non-bypass portrait shade already uses values from nsslTop + // so we don't need to subtract it here. return mMinTopMargin + mKeyguardStatusHeight; } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java index 7e69efaaa640..5d2b59b6e00e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java @@ -67,6 +67,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { private float mQsExpansion; private int mCutoutTopInset = 0; private boolean mIsSplitShade = false; + private boolean mBypassEnabled = false; + private int mUnlockedStackScrollerPadding = 0; private float mUdfpsTop = -1; private float mClockBottom = SCREEN_HEIGHT / 2; private boolean mClockTopAligned; @@ -339,15 +341,52 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } @Test - public void notifMinPaddingAlignedWithClockInSplitShadeMode() { + public void notifPadding_splitShade() { givenLockScreen(); mIsSplitShade = true; mKeyguardStatusHeight = 200; // WHEN the position algorithm is run positionClock(); // THEN the padding DOESN'T adjust for keyguard status height. - assertThat(mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding()) - .isEqualTo(mKeyguardStatusBarHeaderHeight); + assertThat(mClockPositionAlgorithm.getLockscreenNotifPadding(/* nsslTop= */ 10)) + .isEqualTo(mKeyguardStatusBarHeaderHeight - 10); + } + + @Test + public void notifPadding_portraitShade_bypassOff() { + givenLockScreen(); + mIsSplitShade = false; + mBypassEnabled = false; + + // mMinTopMargin = 100 = 80 + max(20, 0) + mKeyguardStatusBarHeaderHeight = 80; + mUserSwitchHeight = 20; + when(mResources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin)) + .thenReturn(0); + + mKeyguardStatusHeight = 200; + + // WHEN the position algorithm is run + positionClock(); + + // THEN padding = 300 = mMinTopMargin(100) + mKeyguardStatusHeight(200) + assertThat(mClockPositionAlgorithm.getLockscreenNotifPadding(/* nsslTop= */ 50)) + .isEqualTo(300); + } + + @Test + public void notifPadding_portraitShade_bypassOn() { + givenLockScreen(); + mIsSplitShade = false; + mBypassEnabled = true; + mUnlockedStackScrollerPadding = 200; + + // WHEN the position algorithm is run + positionClock(); + + // THEN padding = 150 = mUnlockedStackScrollerPadding(200) - nsslTop(50) + assertThat(mClockPositionAlgorithm.getLockscreenNotifPadding(/* nsslTop= */ 50)) + .isEqualTo(150); } @Test @@ -589,8 +628,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { 0 /* userSwitchPreferredY */, mDark, ZERO_DRAG, - false /* bypassEnabled */, - 0 /* unlockedStackScrollerPadding */, + mBypassEnabled, + mUnlockedStackScrollerPadding, mQsExpansion, mCutoutTopInset, mIsSplitShade, |