Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38f8e0e5 authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Moving notifications and keyguard status higher in split shade lockscreen

Decreasing Y position of keyguard status view and decreasing padding of notifications.
Padding of notifications is calculated instead of provided with resources because notifications already have margin that is flexible and would be likely overriden in overlays.

Fixes: 204568802
Test: KeyguardClockPositionAlgorithmTest
Change-Id: I3f9c60ec03bfdc3efc347d3dd1cb1b66c6dcd865
parent 109831c3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -21,4 +21,8 @@
    <dimen name="keyguard_indication_margin_bottom">25dp</dimen>
    <dimen name="ambient_indication_margin_bottom">115dp</dimen>
    <dimen name="lock_icon_margin_bottom">60dp</dimen>

    <!-- margin from keyguard status bar to clock. For split shade it should be
         keyguard_split_shade_top_margin - status_bar_header_height_keyguard = 8dp -->
    <dimen name="keyguard_clock_top_margin">8dp</dimen>
</resources>
+3 −0
Original line number Diff line number Diff line
@@ -747,6 +747,9 @@
    <!-- Minimum distance the user has to drag down to go to the full shade. -->
    <dimen name="keyguard_drag_down_min_distance">100dp</dimen>

    <!-- The margin from the top of the screen to notifications and keyguard status view in
         split shade on keyguard-->
    <dimen name="keyguard_split_shade_top_margin">68dp</dimen>
    <!-- The margin between the status view and the notifications on Keyguard.-->
    <dimen name="keyguard_status_view_bottom_margin">20dp</dimen>
    <!-- Minimum margin between clock and status bar -->
+21 −18
Original line number Diff line number Diff line
@@ -56,21 +56,6 @@ public class KeyguardClockPositionAlgorithm {
     */
    private int mUserSwitchPreferredY;

    /**
     * Whether or not there is a custom clock face on keyguard.
     */
    private boolean mHasCustomClock;

    /**
     * Whether or not the NSSL contains any visible notifications.
     */
    private boolean mHasVisibleNotifs;

    /**
     * Height of notification stack: Sum of height of each notification.
     */
    private int mNotificationStackHeight;

    /**
     * Minimum top margin to avoid overlap with status bar, lock icon, or multi-user switcher
     * avatar.
@@ -87,6 +72,16 @@ public class KeyguardClockPositionAlgorithm {
     */
    private int mContainerTopPadding;

    /**
     * Top margin of notifications introduced by presence of split shade header / status bar
     */
    private int mSplitShadeTopNotificationsMargin;

    /**
     * Target margin for notifications and clock from the top of the screen in split shade
     */
    private int mSplitShadeTargetTopMargin;

    /**
     * @see NotificationPanelViewController#getExpandedFraction()
     */
@@ -152,6 +147,10 @@ public class KeyguardClockPositionAlgorithm {
    public void loadDimens(Resources res) {
        mStatusViewBottomMargin = res.getDimensionPixelSize(
                R.dimen.keyguard_status_view_bottom_margin);
        mSplitShadeTopNotificationsMargin =
                res.getDimensionPixelSize(R.dimen.split_shade_header_height);
        mSplitShadeTargetTopMargin =
                res.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin);

        mContainerTopPadding =
                res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin);
@@ -214,7 +213,7 @@ public class KeyguardClockPositionAlgorithm {
        if (mBypassEnabled) {
            return (int) (mUnlockedStackScrollerPadding + mOverStretchAmount);
        } else if (mIsSplitShade) {
            return clockYPosition;
            return Math.max(0, clockYPosition - mSplitShadeTopNotificationsMargin);
        } else {
            return clockYPosition + mKeyguardStatusHeight;
        }
@@ -224,14 +223,18 @@ public class KeyguardClockPositionAlgorithm {
        if (mBypassEnabled) {
            return mUnlockedStackScrollerPadding;
        } else if (mIsSplitShade) {
            return mMinTopMargin;
            return Math.max(mSplitShadeTargetTopMargin, mMinTopMargin);
        } else {
            return mMinTopMargin + mKeyguardStatusHeight;
        }
    }

    private int getExpandedPreferredClockY() {
        return mMinTopMargin + mUserSwitchHeight;
        if (mIsSplitShade) {
            return Math.max(mSplitShadeTargetTopMargin, mMinTopMargin);
        } else {
            return mMinTopMargin;
        }
    }

    public int getLockscreenStatusViewHeight() {
+29 −1
Original line number Diff line number Diff line
@@ -262,6 +262,34 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
        assertThat(mClockPosition.stackScrollerPadding).isEqualTo(0);
    }

    @Test
    public void clockPositionedDependingOnMarginInSplitShade() {
        when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin))
                .thenReturn(400);
        mClockPositionAlgorithm.loadDimens(mResources);
        givenLockScreen();
        mIsSplitShade = true;
        // WHEN the position algorithm is run
        positionClock();

        assertThat(mClockPosition.clockY).isEqualTo(400);
    }

    @Test
    public void notifPaddingMakesUpToFullMarginInSplitShade() {
        when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin))
                .thenReturn(100);
        when(mResources.getDimensionPixelSize(R.dimen.split_shade_header_height))
                .thenReturn(70);
        mClockPositionAlgorithm.loadDimens(mResources);
        givenLockScreen();
        mIsSplitShade = true;
        // WHEN the position algorithm is run
        positionClock();
        // THEN the notif padding makes up lacking margin (margin - header height = 30).
        assertThat(mClockPosition.stackScrollerPadding).isEqualTo(30);
    }

    @Test
    public void notifPaddingExpandedAlignedWithClockInSplitShadeMode() {
        givenLockScreen();
@@ -271,7 +299,7 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
        positionClock();
        // THEN the padding DOESN'T adjust for keyguard status height.
        assertThat(mClockPosition.stackScrollerPaddingExpanded)
                .isEqualTo(mClockPosition.clockYFullyDozing);
                .isEqualTo(mClockPosition.clockY);
    }

    @Test