summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt111
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt8
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> =