diff options
2 files changed, 117 insertions, 2 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt index 12cf3b6cd2cf..2da692b4cb45 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt @@ -1513,7 +1513,39 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {      @Test      @DisableSceneContainer -    fun shadeShown_sceneFlagOff_noStatusBarViewsShown() = +    fun shadeSlightlyShown_sceneFlagOff_statusBarViewsShown() = +        kosmos.runTest { +            val clockVisible by collectLastValue(underTest.isClockVisible) +            val notifIconsVisible by collectLastValue(underTest.isNotificationIconContainerVisible) +            val systemInfoVisible by collectLastValue(underTest.systemInfoCombinedVis) +            transitionKeyguardToGone() + +            kosmos.shadeTestUtil.setShadeExpansion(0.1f) + +            assertThat(clockVisible!!.visibility).isEqualTo(View.VISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.VISIBLE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.VISIBLE) +        } + +    @Test +    @DisableSceneContainer +    fun shadeHalfShown_sceneFlagOff_noStatusBarViewsShown() = +        kosmos.runTest { +            val clockVisible by collectLastValue(underTest.isClockVisible) +            val notifIconsVisible by collectLastValue(underTest.isNotificationIconContainerVisible) +            val systemInfoVisible by collectLastValue(underTest.systemInfoCombinedVis) +            transitionKeyguardToGone() + +            kosmos.shadeTestUtil.setShadeExpansion(0.5f) + +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) +        } + +    @Test +    @DisableSceneContainer +    fun shadeFullyShown_sceneFlagOff_noStatusBarViewsShown() =          kosmos.runTest {              val clockVisible by collectLastValue(underTest.isClockVisible)              val notifIconsVisible by collectLastValue(underTest.isNotificationIconContainerVisible) @@ -1527,6 +1559,83 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {              assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE)          } +    /** Regression test for b/394257529#comment24. */ +    @Test +    @DisableSceneContainer +    fun qqsToQsTransition_sceneFlagOff_statusBarViewsNeverShown() = +        kosmos.runTest { +            val clockVisible by collectLastValue(underTest.isClockVisible) +            val notifIconsVisible by collectLastValue(underTest.isNotificationIconContainerVisible) +            val systemInfoVisible by collectLastValue(underTest.systemInfoCombinedVis) +            transitionKeyguardToGone() + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 1f, qsExpansion = 0f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0.9f, qsExpansion = 0.1f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0.6f, qsExpansion = 0.4f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0.5f, qsExpansion = 0.5f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0.2f, qsExpansion = 0.8f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0f, qsExpansion = 1f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) +        } + +    /** Regression test for b/394257529#comment24. */ +    @Test +    @DisableSceneContainer +    fun qsToQqsTransition_sceneFlagOff_statusBarViewsNeverShown() = +        kosmos.runTest { +            val clockVisible by collectLastValue(underTest.isClockVisible) +            val notifIconsVisible by collectLastValue(underTest.isNotificationIconContainerVisible) +            val systemInfoVisible by collectLastValue(underTest.systemInfoCombinedVis) +            transitionKeyguardToGone() + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0f, qsExpansion = 1f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0.3f, qsExpansion = 0.7f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0.5f, qsExpansion = 0.5f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 0.7f, qsExpansion = 0.3f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) + +            kosmos.shadeTestUtil.setShadeAndQsExpansion(shadeExpansion = 1f, qsExpansion = 0f) +            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE) +            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE) +            assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) +        } +      @Test      @EnableSceneContainer      fun shadeShown_sceneFlagOn_noStatusBarViewsShown() = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt index 3bae91a0ebe3..c717b180575c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt @@ -262,6 +262,12 @@ constructor(      override val popupChips          get() = statusBarPopupChips.shownPopupChips +    private val isShadeExpandedEnough = +        // Keep the status bar visible while the shade is just starting to open, but otherwise +        // hide it so that the status bar doesn't draw while it can't be seen. +        // See b/394257529#comment24. +        shadeInteractor.anyExpansion.map { it >= 0.2 }.distinctUntilChanged() +      /**       * Whether the display of this statusbar has the shade window (that is hosting shade container       * and lockscreen, among other things). @@ -283,7 +289,7 @@ constructor(                      Overlays.QuickSettingsShade in currentOverlays)              }          } else { -            shadeInteractor.isAnyFullyExpanded +            isShadeExpandedEnough          }      private val isShadeVisibleOnThisDisplay: Flow<Boolean> =  |