summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Pietal <mpietal@google.com> 2024-02-07 17:08:26 +0000
committer Matt Pietal <mpietal@google.com> 2024-02-09 22:09:12 +0000
commit4d810b76a8aaa990c058f59e67a86812ba6882e0 (patch)
tree0c14019a42ee81267a03768649f1ff5df7af5293
parent2f5c581d2b944ec662a2776f9233d4cc3c861a67 (diff)
Use consistent NSSL margins across devices
There were some edge cases that were leading to inconsistencies with the size of the NSSL placeholder and the actual space available. This was due to differences in how the margins were calculated for the placeholder. Test: atest SharedNotificationContainerViewModelTest Test: manual - use notifications in all orientations and ensure it matches the legacy location. swipe up/down to make sure animations are stable Fixes: 322350556 Fixes: 322554526 Flag: ACONFIG com.android.systemui.keyguard_shade_migration_nssl DEVELOPMENT Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint DEVELOPMENT Change-Id: I99c73a8de19010505cde1a7b41383d304f3d28be
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt23
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt14
5 files changed, 51 insertions, 40 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt
index d75a72f91061..75132a59eb88 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/DefaultNotificationStackScrollLayoutSection.kt
@@ -24,11 +24,13 @@ import androidx.constraintlayout.widget.ConstraintSet.END
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.TOP
+import com.android.systemui.Flags.centralizedStatusBarDimensRefactor
import com.android.systemui.Flags.migrateClocksToBlueprint
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.shared.KeyguardShadeMigrationNssl
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlags
+import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.shade.NotificationPanelView
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
@@ -36,6 +38,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackSizeCa
import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationStackAppearanceViewModel
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.SharedNotificationContainerViewModel
+import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
@@ -52,6 +55,7 @@ constructor(
ambientState: AmbientState,
controller: NotificationStackScrollLayoutController,
notificationStackSizeCalculator: NotificationStackSizeCalculator,
+ private val largeScreenHeaderHelperLazy: Lazy<LargeScreenHeaderHelper>,
@Main mainDispatcher: CoroutineDispatcher,
) :
NotificationStackScrollLayoutSection(
@@ -74,12 +78,27 @@ constructor(
val bottomMargin =
context.resources.getDimensionPixelSize(R.dimen.keyguard_status_view_bottom_margin)
if (migrateClocksToBlueprint()) {
+ val useLargeScreenHeader =
+ context.resources.getBoolean(R.bool.config_use_large_screen_shade_header)
+ val marginTopLargeScreen =
+ if (centralizedStatusBarDimensRefactor()) {
+ largeScreenHeaderHelperLazy.get().getLargeScreenHeaderHeight()
+ } else {
+ context.resources.getDimensionPixelSize(
+ R.dimen.large_screen_shade_header_height
+ )
+ }
connect(
R.id.nssl_placeholder,
TOP,
R.id.smart_space_barrier_bottom,
BOTTOM,
- bottomMargin
+ bottomMargin +
+ if (useLargeScreenHeader) {
+ marginTopLargeScreen
+ } else {
+ 0
+ }
)
} else {
connect(R.id.nssl_placeholder, TOP, R.id.keyguard_status_view, BOTTOM, bottomMargin)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt
index 756a4cca69d0..3e35ae4b2dc3 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt
@@ -23,13 +23,11 @@ import androidx.constraintlayout.widget.ConstraintSet.END
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.TOP
-import com.android.systemui.Flags.centralizedStatusBarDimensRefactor
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.shared.KeyguardShadeMigrationNssl
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlags
-import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.shade.NotificationPanelView
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
@@ -37,7 +35,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackSizeCa
import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationStackAppearanceViewModel
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.SharedNotificationContainerViewModel
-import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
@@ -56,7 +53,6 @@ constructor(
notificationStackSizeCalculator: NotificationStackSizeCalculator,
private val smartspaceViewModel: KeyguardSmartspaceViewModel,
@Main mainDispatcher: CoroutineDispatcher,
- private val largeScreenHeaderHelperLazy: Lazy<LargeScreenHeaderHelper>,
) :
NotificationStackScrollLayoutSection(
context,
@@ -75,16 +71,13 @@ constructor(
return
}
constraintSet.apply {
- val splitShadeTopMargin =
- if (centralizedStatusBarDimensRefactor()) {
- largeScreenHeaderHelperLazy.get().getLargeScreenHeaderHeight()
- } else {
- context.resources.getDimensionPixelSize(
- R.dimen.large_screen_shade_header_height
- )
- }
- connect(R.id.nssl_placeholder, TOP, PARENT_ID, TOP, splitShadeTopMargin)
-
+ connect(
+ R.id.nssl_placeholder,
+ TOP,
+ PARENT_ID,
+ TOP,
+ context.resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin)
+ )
connect(R.id.nssl_placeholder, START, PARENT_ID, START)
connect(R.id.nssl_placeholder, END, PARENT_ID, END)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt
index b4f578fec910..ffab9ea00b35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/SharedNotificationContainer.kt
@@ -76,14 +76,10 @@ class SharedNotificationContainer(
}
val nsslId = R.id.notification_stack_scroller
constraintSet.apply {
- connect(nsslId, START, startConstraintId, START)
- connect(nsslId, END, PARENT_ID, END)
- connect(nsslId, BOTTOM, PARENT_ID, BOTTOM)
- connect(nsslId, TOP, PARENT_ID, TOP)
- setMargin(nsslId, START, marginStart)
- setMargin(nsslId, END, marginEnd)
- setMargin(nsslId, TOP, marginTop)
- setMargin(nsslId, BOTTOM, marginBottom)
+ connect(nsslId, START, startConstraintId, START, marginStart)
+ connect(nsslId, END, PARENT_ID, END, marginEnd)
+ connect(nsslId, BOTTOM, PARENT_ID, BOTTOM, marginBottom)
+ connect(nsslId, TOP, PARENT_ID, TOP, marginTop)
}
constraintSet.applyTo(this)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
index 811da51b55ce..e0c2c3bd91e2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
@@ -151,21 +151,20 @@ constructor(
val configurationBasedDimensions: Flow<ConfigurationBasedDimensions> =
interactor.configurationBasedDimensions
.map {
+ val marginTop =
+ if (it.useLargeScreenHeader) it.marginTopLargeScreen else it.marginTop
ConfigurationBasedDimensions(
marginStart = if (it.useSplitShade) 0 else it.marginHorizontal,
marginEnd = it.marginHorizontal,
marginBottom = it.marginBottom,
- marginTop =
- if (it.useLargeScreenHeader) it.marginTopLargeScreen else it.marginTop,
+ marginTop = marginTop,
useSplitShade = it.useSplitShade,
paddingTop =
if (it.useSplitShade) {
- // When in split shade, the margin is applied twice as the legacy shade
- // code uses it to calculate padding.
- it.keyguardSplitShadeTopMargin - 2 * it.marginTopLargeScreen
+ marginTop
} else {
0
- }
+ },
)
}
.distinctUntilChanged()
@@ -255,13 +254,15 @@ constructor(
isOnLockscreenWithoutShade,
keyguardInteractor.notificationContainerBounds,
configurationBasedDimensions,
- interactor.topPosition.sampleCombine(
- keyguardTransitionInteractor.isInTransitionToAnyState,
- shadeInteractor.qsExpansion,
- ),
+ interactor.topPosition
+ .sampleCombine(
+ keyguardTransitionInteractor.isInTransitionToAnyState,
+ shadeInteractor.qsExpansion,
+ )
+ .onStart { emit(Triple(0f, false, 0f)) }
) { onLockscreen, bounds, config, (top, isInTransitionToAnyState, qsExpansion) ->
if (onLockscreen) {
- bounds.copy(top = bounds.top + config.paddingTop)
+ bounds.copy(top = bounds.top - config.paddingTop)
} else {
// When QS expansion > 0, it should directly set the top padding so do not
// animate it
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
index ff882b19ab13..9055ba4e1c4e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
@@ -138,7 +138,8 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
configurationRepository.onAnyConfigurationChange()
- assertThat(dimens!!.paddingTop).isEqualTo(30)
+ // Should directly use the header height (flagged off value)
+ assertThat(dimens!!.paddingTop).isEqualTo(10)
}
@Test
@@ -154,7 +155,8 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
configurationRepository.onAnyConfigurationChange()
- assertThat(dimens!!.paddingTop).isEqualTo(40)
+ // Should directly use the header height (flagged on value)
+ assertThat(dimens!!.paddingTop).isEqualTo(5)
}
@Test
@@ -456,8 +458,8 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
)
runCurrent()
- // Top should be equal to bounds (1) + padding adjustment (30)
- assertThat(bounds).isEqualTo(NotificationContainerBounds(top = 31f, bottom = 2f))
+ // Top should be equal to bounds (1) - padding adjustment (10)
+ assertThat(bounds).isEqualTo(NotificationContainerBounds(top = -9f, bottom = 2f))
}
@Test
@@ -483,8 +485,8 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
)
runCurrent()
- // Top should be equal to bounds (1) + padding adjustment (40)
- assertThat(bounds).isEqualTo(NotificationContainerBounds(top = 41f, bottom = 2f))
+ // Top should be equal to bounds (1) - padding adjustment (5)
+ assertThat(bounds).isEqualTo(NotificationContainerBounds(top = -4f, bottom = 2f))
}
@Test