diff options
4 files changed, 236 insertions, 25 deletions
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt index ea3caa380cf2..697b05aa9add 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt @@ -26,6 +26,7 @@ import androidx.annotation.IdRes import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest +import com.android.systemui.Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags @@ -167,10 +168,38 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() { } @Test - fun testLargeScreen_updateResources_splitShadeHeightIsSet() { + fun testLargeScreen_updateResources_refactorFlagOff_splitShadeHeightIsSetBasedOnResource() { + val headerResourceHeight = 20 + val headerHelperHeight = 30 + mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(headerHelperHeight) overrideResource(R.bool.config_use_large_screen_shade_header, true) overrideResource(R.dimen.qs_header_height, 10) - overrideResource(R.dimen.large_screen_shade_header_height, 20) + overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight) + + // ensure the estimated height (would be 3 here) wouldn't impact this test case + overrideResource(R.dimen.large_screen_shade_header_min_height, 1) + overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 1) + + underTest.updateResources() + + val captor = ArgumentCaptor.forClass(ConstraintSet::class.java) + verify(view).applyConstraints(capture(captor)) + assertThat(captor.value.getHeight(R.id.split_shade_status_bar)) + .isEqualTo(headerResourceHeight) + } + + @Test + fun testLargeScreen_updateResources_refactorFlagOn_splitShadeHeightIsSetBasedOnHelper() { + val headerResourceHeight = 20 + val headerHelperHeight = 30 + mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(headerHelperHeight) + overrideResource(R.bool.config_use_large_screen_shade_header, true) + overrideResource(R.dimen.qs_header_height, 10) + overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight) // ensure the estimated height (would be 3 here) wouldn't impact this test case overrideResource(R.dimen.large_screen_shade_header_min_height, 1) @@ -180,7 +209,8 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(ConstraintSet::class.java) verify(view).applyConstraints(capture(captor)) - assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(20) + assertThat(captor.value.getHeight(R.id.split_shade_status_bar)) + .isEqualTo(headerHelperHeight) } @Test @@ -416,10 +446,36 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() { } @Test - fun testLargeScreenLayout_qsAndNotifsTopMarginIsOfHeaderHeight() { + fun testLargeScreenLayout_refactorFlagOff_qsAndNotifsTopMarginIsOfHeaderHeightResource() { + mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + setLargeScreen() + val largeScreenHeaderResourceHeight = 100 + val largeScreenHeaderHelperHeight = 200 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(largeScreenHeaderHelperHeight) + overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight) + + // ensure the estimated height (would be 30 here) wouldn't impact this test case + overrideResource(R.dimen.large_screen_shade_header_min_height, 10) + overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 10) + + underTest.updateResources() + + assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin) + .isEqualTo(largeScreenHeaderResourceHeight) + assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin) + .isEqualTo(largeScreenHeaderResourceHeight) + } + + @Test + fun testLargeScreenLayout_refactorFlagOn_qsAndNotifsTopMarginIsOfHeaderHeightHelper() { + mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) setLargeScreen() - val largeScreenHeaderHeight = 100 - overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderHeight) + val largeScreenHeaderResourceHeight = 100 + val largeScreenHeaderHelperHeight = 200 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(largeScreenHeaderHelperHeight) + overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight) // ensure the estimated height (would be 30 here) wouldn't impact this test case overrideResource(R.dimen.large_screen_shade_header_min_height, 10) @@ -428,9 +484,9 @@ class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() { underTest.updateResources() assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin) - .isEqualTo(largeScreenHeaderHeight) + .isEqualTo(largeScreenHeaderHelperHeight) assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin) - .isEqualTo(largeScreenHeaderHeight) + .isEqualTo(largeScreenHeaderHelperHeight) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt index c1bc303f26ea..e66251a030a3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt @@ -26,6 +26,7 @@ import androidx.annotation.IdRes import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.test.filters.SmallTest +import com.android.systemui.Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags @@ -166,10 +167,14 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() { } @Test - fun testLargeScreen_updateResources_splitShadeHeightIsSet() { + fun testLargeScreen_updateResources_refactorFlagOff_splitShadeHeightIsSet_basedOnResource() { + mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + val helperHeight = 30 + val resourceHeight = 20 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(helperHeight) overrideResource(R.bool.config_use_large_screen_shade_header, true) overrideResource(R.dimen.qs_header_height, 10) - overrideResource(R.dimen.large_screen_shade_header_height, 20) + overrideResource(R.dimen.large_screen_shade_header_height, resourceHeight) // ensure the estimated height (would be 3 here) wouldn't impact this test case overrideResource(R.dimen.large_screen_shade_header_min_height, 1) @@ -179,7 +184,28 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() { val captor = ArgumentCaptor.forClass(ConstraintSet::class.java) verify(view).applyConstraints(capture(captor)) - assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(20) + assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(resourceHeight) + } + + @Test + fun testLargeScreen_updateResources_refactorFlagOn_splitShadeHeightIsSet_basedOnHelper() { + mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + val helperHeight = 30 + val resourceHeight = 20 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(helperHeight) + overrideResource(R.bool.config_use_large_screen_shade_header, true) + overrideResource(R.dimen.qs_header_height, 10) + overrideResource(R.dimen.large_screen_shade_header_height, resourceHeight) + + // ensure the estimated height (would be 3 here) wouldn't impact this test case + overrideResource(R.dimen.large_screen_shade_header_min_height, 1) + overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 1) + + underTest.updateResources() + + val captor = ArgumentCaptor.forClass(ConstraintSet::class.java) + verify(view).applyConstraints(capture(captor)) + assertThat(captor.value.getHeight(R.id.split_shade_status_bar)).isEqualTo(helperHeight) } @Test @@ -404,10 +430,34 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() { } @Test - fun testLargeScreenLayout_qsAndNotifsTopMarginIsOfHeaderHeight() { + fun testLargeScreenLayout_refactorFlagOff_qsAndNotifsTopMarginIsOfHeaderResourceHeight() { + mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + setLargeScreen() + val largeScreenHeaderHelperHeight = 200 + val largeScreenHeaderResourceHeight = 100 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(largeScreenHeaderHelperHeight) + overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight) + + // ensure the estimated height (would be 30 here) wouldn't impact this test case + overrideResource(R.dimen.large_screen_shade_header_min_height, 10) + overrideResource(R.dimen.new_qs_header_non_clickable_element_height, 10) + + underTest.updateResources() + + assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin) + .isEqualTo(largeScreenHeaderResourceHeight) + } + + @Test + fun testLargeScreenLayout_refactorFlagOn_qsAndNotifsTopMarginIsOfHeaderHelperHeight() { + mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) setLargeScreen() - val largeScreenHeaderHeight = 100 - overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderHeight) + val largeScreenHeaderHelperHeight = 200 + val largeScreenHeaderResourceHeight = 100 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(largeScreenHeaderHelperHeight) + overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderResourceHeight) // ensure the estimated height (would be 30 here) wouldn't impact this test case overrideResource(R.dimen.large_screen_shade_header_min_height, 10) @@ -416,7 +466,7 @@ class NotificationsQSContainerControllerTest : SysuiTestCase() { underTest.updateResources() assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin) - .isEqualTo(largeScreenHeaderHeight) + .isEqualTo(largeScreenHeaderHelperHeight) } @Test 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 20020f23b2df..9f15b05f8f02 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 @@ -21,6 +21,7 @@ package com.android.systemui.statusbar.notification.stack.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.systemui.Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.NotificationContainerBounds import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository @@ -39,8 +40,11 @@ import com.android.systemui.keyguard.ui.viewmodel.keyguardRootViewModel import com.android.systemui.kosmos.testScope import com.android.systemui.res.R import com.android.systemui.shade.data.repository.shadeRepository +import com.android.systemui.shade.largeScreenHeaderHelper +import com.android.systemui.shade.mockLargeScreenHeaderHelper import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor import com.android.systemui.testKosmos +import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope @@ -66,6 +70,7 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() { val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository val shadeRepository = kosmos.shadeRepository val sharedNotificationContainerInteractor = kosmos.sharedNotificationContainerInteractor + val largeScreenHeaderHelper = kosmos.mockLargeScreenHeaderHelper val underTest = kosmos.sharedNotificationContainerViewModel @@ -101,8 +106,10 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() { } @Test - fun validatePaddingTopInSplitShade() = + fun validatePaddingTopInSplitShade_refactorFlagOff_usesLargeHeaderResource() = testScope.runTest { + mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5) overrideResource(R.bool.config_use_split_notification_shade, true) overrideResource(R.dimen.large_screen_shade_header_height, 10) overrideResource(R.dimen.keyguard_split_shade_top_margin, 50) @@ -115,6 +122,22 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() { } @Test + fun validatePaddingTopInSplitShade_refactorFlagOn_usesLargeHeaderHelper() = + testScope.runTest { + mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5) + overrideResource(R.bool.config_use_split_notification_shade, true) + overrideResource(R.dimen.large_screen_shade_header_height, 10) + overrideResource(R.dimen.keyguard_split_shade_top_margin, 50) + + val dimens by collectLastValue(underTest.configurationBasedDimensions) + + configurationRepository.onAnyConfigurationChange() + + assertThat(dimens!!.paddingTop).isEqualTo(40) + } + + @Test fun validatePaddingTop() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) @@ -153,17 +176,41 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() { } @Test - fun validateMarginTopWithLargeScreenHeader() = + fun validateMarginTopWithLargeScreenHeader_refactorFlagOff_usesResource() = testScope.runTest { + mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + val headerResourceHeight = 50 + val headerHelperHeight = 100 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(headerHelperHeight) overrideResource(R.bool.config_use_large_screen_shade_header, true) - overrideResource(R.dimen.large_screen_shade_header_height, 50) + overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight) + overrideResource(R.dimen.notification_panel_margin_top, 0) + + val dimens by collectLastValue(underTest.configurationBasedDimensions) + + configurationRepository.onAnyConfigurationChange() + + assertThat(dimens!!.marginTop).isEqualTo(headerResourceHeight) + } + + @Test + fun validateMarginTopWithLargeScreenHeader_refactorFlagOn_usesHelper() = + testScope.runTest { + mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + val headerResourceHeight = 50 + val headerHelperHeight = 100 + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()) + .thenReturn(headerHelperHeight) + overrideResource(R.bool.config_use_large_screen_shade_header, true) + overrideResource(R.dimen.large_screen_shade_header_height, headerResourceHeight) overrideResource(R.dimen.notification_panel_margin_top, 0) val dimens by collectLastValue(underTest.configurationBasedDimensions) configurationRepository.onAnyConfigurationChange() - assertThat(dimens!!.marginTop).isEqualTo(50) + assertThat(dimens!!.marginTop).isEqualTo(headerHelperHeight) } @Test @@ -275,11 +322,13 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() { } @Test - fun boundsOnLockscreenInSplitShade() = + fun boundsOnLockscreenInSplitShade_refactorFlagOff_usesLargeHeaderResource() = testScope.runTest { + mSetFlagsRule.disableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) val bounds by collectLastValue(underTest.bounds) // When in split shade + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5) overrideResource(R.bool.config_use_split_notification_shade, true) overrideResource(R.dimen.large_screen_shade_header_height, 10) overrideResource(R.dimen.keyguard_split_shade_top_margin, 50) @@ -300,6 +349,33 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() { } @Test + fun boundsOnLockscreenInSplitShade_refactorFlagOn_usesLargeHeaderHelper() = + testScope.runTest { + mSetFlagsRule.enableFlags(FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR) + val bounds by collectLastValue(underTest.bounds) + + // When in split shade + whenever(largeScreenHeaderHelper.getLargeScreenHeaderHeight()).thenReturn(5) + overrideResource(R.bool.config_use_split_notification_shade, true) + overrideResource(R.dimen.large_screen_shade_header_height, 10) + overrideResource(R.dimen.keyguard_split_shade_top_margin, 50) + + configurationRepository.onAnyConfigurationChange() + runCurrent() + + // Start on lockscreen + showLockscreen() + + keyguardInteractor.setNotificationContainerBounds( + NotificationContainerBounds(top = 1f, bottom = 2f) + ) + runCurrent() + + // Top should be equal to bounds (1) + padding adjustment (40) + assertThat(bounds).isEqualTo(NotificationContainerBounds(top = 41f, bottom = 2f)) + } + + @Test fun boundsOnShade() = testScope.runTest { val bounds by collectLastValue(underTest.bounds) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java index 4dc4798caa8c..bbf9a6b93201 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java @@ -30,11 +30,13 @@ import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; +import com.android.systemui.Flags; import com.android.systemui.SysuiTestCase; import com.android.systemui.doze.util.BurnInHelperKt; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.core.FakeLogBuffer; import com.android.systemui.res.R; +import com.android.systemui.shade.LargeScreenHeaderHelper; import org.junit.After; import org.junit.Before; @@ -79,6 +81,7 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mStaticMockSession = mockitoSession() .mockStatic(BurnInHelperKt.class) + .mockStatic(LargeScreenHeaderHelper.class) .startMocking(); LogBuffer logBuffer = FakeLogBuffer.Factory.Companion.create(); @@ -292,18 +295,44 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } @Test - public void notifPaddingMakesUpToFullMarginInSplitShade() { + public void notifPaddingMakesUpToFullMarginInSplitShade_refactorFlagOff_usesResource() { + mSetFlagsRule.disableFlags(Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR); + int keyguardSplitShadeTopMargin = 100; + int largeScreenHeaderHeightResource = 70; when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin)) - .thenReturn(100); + .thenReturn(keyguardSplitShadeTopMargin); when(mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)) - .thenReturn(70); + .thenReturn(largeScreenHeaderHeightResource); mClockPositionAlgorithm.loadDimens(mContext, 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); + // THEN the notif padding makes up lacking margin (margin - header height). + int expectedPadding = keyguardSplitShadeTopMargin - largeScreenHeaderHeightResource; + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(expectedPadding); + } + + @Test + public void notifPaddingMakesUpToFullMarginInSplitShade_refactorFlagOn_usesHelper() { + mSetFlagsRule.enableFlags(Flags.FLAG_CENTRALIZED_STATUS_BAR_DIMENS_REFACTOR); + int keyguardSplitShadeTopMargin = 100; + int largeScreenHeaderHeightHelper = 50; + int largeScreenHeaderHeightResource = 70; + when(LargeScreenHeaderHelper.getLargeScreenHeaderHeight(mContext)) + .thenReturn(largeScreenHeaderHeightHelper); + when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin)) + .thenReturn(keyguardSplitShadeTopMargin); + when(mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)) + .thenReturn(largeScreenHeaderHeightResource); + mClockPositionAlgorithm.loadDimens(mContext, mResources); + givenLockScreen(); + mIsSplitShade = true; + // WHEN the position algorithm is run + positionClock(); + // THEN the notif padding makes up lacking margin (margin - header height). + int expectedPadding = keyguardSplitShadeTopMargin - largeScreenHeaderHeightHelper; + assertThat(mClockPosition.stackScrollerPadding).isEqualTo(expectedPadding); } @Test |