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

Commit 1dd9d0b9 authored by Lyn's avatar Lyn
Browse files

Fix overlap between notifications and lock icon in portrait shade

Fixes: 282166388
Test: KeyguardClockPositionAlgorithmTest
Test: have many notifications on portrait shade
      => no overlap with lock icon
Test: split shade: no regressions

Change-Id: I8ef965cdb38879259a52060406f92fbe61dd41eb
parent 1fe8b30f
Loading
Loading
Loading
Loading
+5 −6
Original line number Original line Diff line number Diff line
@@ -1651,10 +1651,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
                Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding));
                Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding));
        mKeyguardNotificationBottomPadding = bottomPadding;
        mKeyguardNotificationBottomPadding = bottomPadding;


        float staticTopPadding = mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding()
        float staticTopPadding = mClockPositionAlgorithm.getLockscreenNotifPadding(
                // getMinStackScrollerPadding is from the top of the screen,
                mNotificationStackScrollLayoutController.getTop());
                // but we need it from the top of the NSSL.

                - mNotificationStackScrollLayoutController.getTop();
        mKeyguardNotificationTopPadding = staticTopPadding;
        mKeyguardNotificationTopPadding = staticTopPadding;


        // To debug the available space, enable debug lines in this class. If you change how the
        // 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, "\n");
            Log.i(TAG, "staticTopPadding[" + staticTopPadding
            Log.i(TAG, "staticTopPadding[" + staticTopPadding
                    + "] = Clock.padding["
                    + "] = Clock.padding["
                    + mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding()
                    + mClockPositionAlgorithm.getLockscreenNotifPadding(
                    + "] - NSSLC.top[" + mNotificationStackScrollLayoutController.getTop()
                            mNotificationStackScrollLayoutController.getTop())
                    + "]"
                    + "]"
            );
            );
            Log.i(TAG, "bottomPadding[" + bottomPadding
            Log.i(TAG, "bottomPadding[" + bottomPadding
+9 −3
Original line number Original line Diff line number Diff line
@@ -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) {
        if (mBypassEnabled) {
            return mUnlockedStackScrollerPadding;
            return mUnlockedStackScrollerPadding - nsslTop;
        } else if (mIsSplitShade) {
        } else if (mIsSplitShade) {
            return mSplitShadeTargetTopMargin + mUserSwitchHeight;
            return mSplitShadeTargetTopMargin + mUserSwitchHeight - nsslTop;
        } else {
        } else {
            // Non-bypass portrait shade already uses values from nsslTop
            // so we don't need to subtract it here.
            return mMinTopMargin + mKeyguardStatusHeight;
            return mMinTopMargin + mKeyguardStatusHeight;
        }
        }
    }
    }
+44 −5
Original line number Original line Diff line number Diff line
@@ -67,6 +67,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
    private float mQsExpansion;
    private float mQsExpansion;
    private int mCutoutTopInset = 0;
    private int mCutoutTopInset = 0;
    private boolean mIsSplitShade = false;
    private boolean mIsSplitShade = false;
    private boolean mBypassEnabled = false;
    private int mUnlockedStackScrollerPadding = 0;
    private float mUdfpsTop = -1;
    private float mUdfpsTop = -1;
    private float mClockBottom = SCREEN_HEIGHT / 2;
    private float mClockBottom = SCREEN_HEIGHT / 2;
    private boolean mClockTopAligned;
    private boolean mClockTopAligned;
@@ -339,15 +341,52 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
    }
    }


    @Test
    @Test
    public void notifMinPaddingAlignedWithClockInSplitShadeMode() {
    public void notifPadding_splitShade() {
        givenLockScreen();
        givenLockScreen();
        mIsSplitShade = true;
        mIsSplitShade = true;
        mKeyguardStatusHeight = 200;
        mKeyguardStatusHeight = 200;
        // WHEN the position algorithm is run
        // WHEN the position algorithm is run
        positionClock();
        positionClock();
        // THEN the padding DOESN'T adjust for keyguard status height.
        // THEN the padding DOESN'T adjust for keyguard status height.
        assertThat(mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding())
        assertThat(mClockPositionAlgorithm.getLockscreenNotifPadding(/* nsslTop= */ 10))
                .isEqualTo(mKeyguardStatusBarHeaderHeight);
                .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
    @Test
@@ -589,8 +628,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase {
                0 /* userSwitchPreferredY */,
                0 /* userSwitchPreferredY */,
                mDark,
                mDark,
                ZERO_DRAG,
                ZERO_DRAG,
                false /* bypassEnabled */,
                mBypassEnabled,
                0 /* unlockedStackScrollerPadding */,
                mUnlockedStackScrollerPadding,
                mQsExpansion,
                mQsExpansion,
                mCutoutTopInset,
                mCutoutTopInset,
                mIsSplitShade,
                mIsSplitShade,