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
This commit is contained in:
Michal Brzezinski
2021-11-09 18:30:27 +00:00
parent 109831c3c0
commit 38f8e0e53e
4 changed files with 57 additions and 19 deletions

View File

@@ -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>

View File

@@ -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 -->

View File

@@ -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() {

View File

@@ -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