diff options
| author | 2024-02-07 17:08:26 +0000 | |
|---|---|---|
| committer | 2024-02-09 22:09:12 +0000 | |
| commit | 4d810b76a8aaa990c058f59e67a86812ba6882e0 (patch) | |
| tree | 0c14019a42ee81267a03768649f1ff5df7af5293 | |
| parent | 2f5c581d2b944ec662a2776f9233d4cc3c861a67 (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
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 |