summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Laird <evanlaird@google.com> 2025-01-16 06:26:03 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-01-16 06:26:03 -0800
commit01611f83aa0774fc227892e49bacbc6da9d8eea3 (patch)
treeda8c23b8e67f21374403110af0a04fd0ea80197c
parent302b7e395a8ef19f2d36e424aa1bf44261ba880c (diff)
parent1ce7ab39304a6dee84878dc0e52ac188f14d349d (diff)
Merge "[sb] add some table logging for HomeStatusBarViewModel" into main
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt23
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/SystemInfoCombinedVisibilityModel.kt44
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/VisibilityModel.kt49
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt226
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelKosmos.kt2
8 files changed, 248 insertions, 113 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt
index 937f333b0065..a1c910d48cef 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt
@@ -24,6 +24,8 @@ import com.android.systemui.statusbar.chips.ui.model.MultipleOngoingActivityChip
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState.Idle
import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipModel
+import com.android.systemui.statusbar.pipeline.shared.ui.model.SystemInfoCombinedVisibilityModel
+import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -51,28 +53,15 @@ class FakeHomeStatusBarViewModel(
override val shouldShowOperatorNameView = MutableStateFlow(false)
override val isClockVisible =
- MutableStateFlow(
- HomeStatusBarViewModel.VisibilityModel(
- visibility = View.GONE,
- shouldAnimateChange = false,
- )
- )
+ MutableStateFlow(VisibilityModel(visibility = View.GONE, shouldAnimateChange = false))
override val isNotificationIconContainerVisible =
- MutableStateFlow(
- HomeStatusBarViewModel.VisibilityModel(
- visibility = View.GONE,
- shouldAnimateChange = false,
- )
- )
+ MutableStateFlow(VisibilityModel(visibility = View.GONE, shouldAnimateChange = false))
override val systemInfoCombinedVis =
MutableStateFlow(
- HomeStatusBarViewModel.SystemInfoCombinedVisibilityModel(
- HomeStatusBarViewModel.VisibilityModel(
- visibility = View.GONE,
- shouldAnimateChange = false,
- ),
+ SystemInfoCombinedVisibilityModel(
+ VisibilityModel(visibility = View.GONE, shouldAnimateChange = false),
Idle,
)
)
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 03abcf850d26..e74d009bb909 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
@@ -83,12 +83,11 @@ import com.android.systemui.statusbar.phone.SysuiDarkIconDispatcher
import com.android.systemui.statusbar.phone.data.repository.fakeDarkIconRepository
import com.android.systemui.statusbar.pipeline.shared.domain.interactor.setHomeStatusBarIconBlockList
import com.android.systemui.statusbar.pipeline.shared.domain.interactor.setHomeStatusBarInteractorShowOperatorName
-import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel.VisibilityModel
+import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import org.junit.Before
@@ -423,8 +422,9 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
fun areNotificationsLightsOut_requiresFlagEnabled() =
kosmos.runTest {
assertLogsWtf {
- val flow = underTest.areNotificationsLightsOut
- assertThat(flow).isEqualTo(emptyFlow<Boolean>())
+ val latest by collectLastValue(underTest.areNotificationsLightsOut)
+ // Nothing is emitted
+ assertThat(latest).isNull()
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt
index 8daa8037c367..7e76d77abe61 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt
@@ -41,8 +41,8 @@ import com.android.systemui.statusbar.notification.icon.ui.viewbinder.ConnectedD
import com.android.systemui.statusbar.notification.shared.NotificationsLiveDataStoreRefactor
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment
import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization
+import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel
-import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel.VisibilityModel
import javax.inject.Inject
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt
index b1cc208e9b43..9c1171fd1ebc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt
@@ -57,6 +57,7 @@ import com.android.systemui.statusbar.phone.ui.StatusBarIconController
import com.android.systemui.statusbar.pipeline.shared.ui.binder.HomeStatusBarIconBlockListBinder
import com.android.systemui.statusbar.pipeline.shared.ui.binder.HomeStatusBarViewBinder
import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarVisibilityChangeListener
+import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel.HomeStatusBarViewModelFactory
import javax.inject.Inject
@@ -304,11 +305,7 @@ fun StatusBarRoot(
fun Disambiguation(viewModel: HomeStatusBarViewModel) {
val clockVisibilityModel =
viewModel.isClockVisible.collectAsStateWithLifecycle(
- initialValue =
- HomeStatusBarViewModel.VisibilityModel(
- visibility = View.GONE,
- shouldAnimateChange = false,
- )
+ initialValue = VisibilityModel(visibility = View.GONE, shouldAnimateChange = false)
)
if (clockVisibilityModel.value.visibility == View.VISIBLE) {
Box(modifier = Modifier.fillMaxSize().alpha(0.5f), contentAlignment = Alignment.Center) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/SystemInfoCombinedVisibilityModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/SystemInfoCombinedVisibilityModel.kt
new file mode 100644
index 000000000000..e27225270633
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/SystemInfoCombinedVisibilityModel.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.pipeline.shared.ui.model
+
+import com.android.systemui.log.table.Diffable
+import com.android.systemui.log.table.TableRowLogger
+import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState
+
+/** The combined visibility + animation state for the system info status bar area */
+data class SystemInfoCombinedVisibilityModel(
+ val baseVisibility: VisibilityModel,
+ val animationState: SystemEventAnimationState,
+) : Diffable<SystemInfoCombinedVisibilityModel> {
+ override fun logDiffs(prevVal: SystemInfoCombinedVisibilityModel, row: TableRowLogger) {
+ if (animationState != prevVal.animationState) {
+ row.logChange(COL_ANIM, animationState.name)
+ }
+
+ baseVisibility.logDiffs(prevVal.baseVisibility, row)
+ }
+
+ override fun logFull(row: TableRowLogger) {
+ row.logChange(COL_ANIM, animationState.name)
+ baseVisibility.logFull(row)
+ }
+
+ companion object {
+ const val COL_ANIM = "animState"
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/VisibilityModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/VisibilityModel.kt
new file mode 100644
index 000000000000..7b39ada72c64
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/VisibilityModel.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.pipeline.shared.ui.model
+
+import android.view.View
+import com.android.systemui.log.table.Diffable
+import com.android.systemui.log.table.TableRowLogger
+import com.android.systemui.util.visibilityString
+
+/** Models the current visibility for a specific child view of status bar. */
+data class VisibilityModel(
+ @View.Visibility val visibility: Int,
+ /** True if a visibility change should be animated. */
+ val shouldAnimateChange: Boolean,
+) : Diffable<VisibilityModel> {
+ override fun logDiffs(prevVal: VisibilityModel, row: TableRowLogger) {
+ if (visibility != prevVal.visibility) {
+ row.logChange(COL_VIS, visibilityString(visibility))
+ }
+
+ if (shouldAnimateChange != prevVal.shouldAnimateChange) {
+ row.logChange(COL_ANIMATE, shouldAnimateChange)
+ }
+ }
+
+ override fun logFull(row: TableRowLogger) {
+ row.logChange(COL_VIS, visibilityString(visibility))
+ row.logChange(COL_ANIMATE, shouldAnimateChange)
+ }
+
+ companion object {
+ const val COL_VIS = "vis"
+ const val COL_ANIMATE = "animate"
+ }
+}
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 dcd2dbf57b42..5acedf129184 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
@@ -28,6 +28,8 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED
import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.log.table.TableLogBufferFactory
+import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.plugins.DarkIconDispatcher
import com.android.systemui.scene.domain.interactor.SceneContainerOcclusionInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
@@ -39,7 +41,6 @@ import com.android.systemui.statusbar.chips.ui.model.MultipleOngoingActivityChip
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModel
import com.android.systemui.statusbar.events.domain.interactor.SystemStatusEventAnimationInteractor
-import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState.Idle
import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipModel
import com.android.systemui.statusbar.featurepods.popups.ui.viewmodel.StatusBarPopupChipsViewModel
@@ -53,7 +54,8 @@ import com.android.systemui.statusbar.phone.domain.interactor.DarkIconInteractor
import com.android.systemui.statusbar.phone.domain.interactor.LightsOutInteractor
import com.android.systemui.statusbar.pipeline.shared.domain.interactor.HomeStatusBarIconBlockListInteractor
import com.android.systemui.statusbar.pipeline.shared.domain.interactor.HomeStatusBarInteractor
-import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel.VisibilityModel
+import com.android.systemui.statusbar.pipeline.shared.ui.model.SystemInfoCombinedVisibilityModel
+import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -155,19 +157,6 @@ interface HomeStatusBarViewModel {
*/
val areaTint: Flow<StatusBarTintColor>
- /** Models the current visibility for a specific child view of status bar. */
- data class VisibilityModel(
- @View.Visibility val visibility: Int,
- /** True if a visibility change should be animated. */
- val shouldAnimateChange: Boolean,
- )
-
- /** The combined visibility + animation state for the system info status bar area */
- data class SystemInfoCombinedVisibilityModel(
- val baseVisibility: VisibilityModel,
- val animationState: SystemEventAnimationState,
- )
-
/** Interface for the assisted factory, to allow for providing a fake in tests */
interface HomeStatusBarViewModelFactory {
fun create(displayId: Int): HomeStatusBarViewModel
@@ -178,6 +167,7 @@ class HomeStatusBarViewModelImpl
@AssistedInject
constructor(
@Assisted thisDisplayId: Int,
+ tableLoggerFactory: TableLogBufferFactory,
homeStatusBarInteractor: HomeStatusBarInteractor,
homeStatusBarIconBlockListInteractor: HomeStatusBarIconBlockListInteractor,
lightsOutInteractor: LightsOutInteractor,
@@ -196,9 +186,19 @@ constructor(
statusBarContentInsetsViewModelStore: StatusBarContentInsetsViewModelStore,
@Application coroutineScope: CoroutineScope,
) : HomeStatusBarViewModel {
+
+ val tableLogger = tableLoggerFactory.getOrCreate(tableLogBufferName(thisDisplayId), 200)
+
override val isTransitioningFromLockscreenToOccluded: StateFlow<Boolean> =
keyguardTransitionInteractor
.isInTransition(Edge.create(from = LOCKSCREEN, to = OCCLUDED))
+ .distinctUntilChanged()
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = "",
+ columnName = COL_LOCK_TO_OCCLUDED,
+ initialValue = false,
+ )
.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = false)
override val transitionFromLockscreenToDreamStartedEvent: Flow<Unit> =
@@ -225,20 +225,33 @@ constructor(
// which lives elsewhere.)
currentScene == Scenes.Gone || isOccluded
}
+ .distinctUntilChanged()
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = "",
+ columnName = COL_ALLOWED_BY_SCENE,
+ initialValue = false,
+ )
.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = false)
override val areNotificationsLightsOut: Flow<Boolean> =
if (NotificationsLiveDataStoreRefactor.isUnexpectedlyInLegacyMode()) {
- emptyFlow()
- } else {
- combine(
- notificationsInteractor.areAnyNotificationsPresent,
- lightsOutInteractor.isLowProfile(thisDisplayId) ?: flowOf(false),
- ) { hasNotifications, isLowProfile ->
- hasNotifications && isLowProfile
- }
- .distinctUntilChanged()
- }
+ emptyFlow()
+ } else {
+ combine(
+ notificationsInteractor.areAnyNotificationsPresent,
+ lightsOutInteractor.isLowProfile(thisDisplayId) ?: flowOf(false),
+ ) { hasNotifications, isLowProfile ->
+ hasNotifications && isLowProfile
+ }
+ .distinctUntilChanged()
+ }
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = "",
+ columnName = COL_NOTIF_LIGHTS_OUT,
+ initialValue = false,
+ )
override val areaTint: Flow<StatusBarTintColor> =
darkIconInteractor
@@ -277,19 +290,26 @@ constructor(
override val shouldHomeStatusBarBeVisible =
combine(
- isHomeStatusBarAllowed,
- keyguardInteractor.isSecureCameraActive,
- headsUpNotificationInteractor.statusBarHeadsUpStatus,
- ) { isHomeStatusBarAllowed, isSecureCameraActive, headsUpState ->
- // When launching the camera over the lockscreen, the status icons would typically
- // become visible momentarily before animating out, since we're not yet aware that the
- // launching camera activity is fullscreen. Even once the activity finishes launching,
- // it takes a short time before WM decides that the top app wants to hide the icons and
- // tells us to hide them.
- // To ensure that this high-visibility animation is smooth, keep the icons hidden during
- // a camera launch. See b/257292822.
- headsUpState.isPinned || (isHomeStatusBarAllowed && !isSecureCameraActive)
- }
+ isHomeStatusBarAllowed,
+ keyguardInteractor.isSecureCameraActive,
+ headsUpNotificationInteractor.statusBarHeadsUpStatus,
+ ) { isHomeStatusBarAllowed, isSecureCameraActive, headsUpState ->
+ // When launching the camera over the lockscreen, the status icons would typically
+ // become visible momentarily before animating out, since we're not yet aware that
+ // the launching camera activity is fullscreen. Even once the activity finishes
+ // launching, it takes a short time before WM decides that the top app wants to hide
+ // the icons and tells us to hide them. To ensure that this high-visibility
+ // animation is smooth, keep the icons hidden during a camera launch. See
+ // b/257292822.
+ headsUpState.isPinned || (isHomeStatusBarAllowed && !isSecureCameraActive)
+ }
+ .distinctUntilChanged()
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = "",
+ columnName = COL_VISIBLE,
+ initialValue = false,
+ )
private val isAnyChipVisible =
if (StatusBarNotifChips.isEnabled) {
@@ -313,53 +333,73 @@ constructor(
override val shouldShowOperatorNameView: Flow<Boolean> =
combine(
- shouldHomeStatusBarBeVisible,
- hideStartSideContentForHeadsUp,
- homeStatusBarInteractor.visibilityViaDisableFlags,
- homeStatusBarInteractor.shouldShowOperatorName,
- ) {
- shouldStatusBarBeVisible,
- hideStartSideContentForHeadsUp,
- visibilityViaDisableFlags,
- shouldShowOperator ->
- shouldStatusBarBeVisible &&
- !hideStartSideContentForHeadsUp &&
- visibilityViaDisableFlags.isSystemInfoAllowed &&
- shouldShowOperator
- }
+ shouldHomeStatusBarBeVisible,
+ hideStartSideContentForHeadsUp,
+ homeStatusBarInteractor.visibilityViaDisableFlags,
+ homeStatusBarInteractor.shouldShowOperatorName,
+ ) {
+ shouldStatusBarBeVisible,
+ hideStartSideContentForHeadsUp,
+ visibilityViaDisableFlags,
+ shouldShowOperator ->
+ shouldStatusBarBeVisible &&
+ !hideStartSideContentForHeadsUp &&
+ visibilityViaDisableFlags.isSystemInfoAllowed &&
+ shouldShowOperator
+ }
+ .distinctUntilChanged()
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = "",
+ columnName = COL_SHOW_OPERATOR_NAME,
+ initialValue = false,
+ )
override val isClockVisible: Flow<VisibilityModel> =
combine(
- shouldHomeStatusBarBeVisible,
- hideStartSideContentForHeadsUp,
- homeStatusBarInteractor.visibilityViaDisableFlags,
- ) { shouldStatusBarBeVisible, hideStartSideContentForHeadsUp, visibilityViaDisableFlags ->
- val showClock =
- shouldStatusBarBeVisible &&
- visibilityViaDisableFlags.isClockAllowed &&
- !hideStartSideContentForHeadsUp
- // Always use View.INVISIBLE here, so that animations work
- VisibilityModel(showClock.toVisibleOrInvisible(), visibilityViaDisableFlags.animate)
- }
+ shouldHomeStatusBarBeVisible,
+ hideStartSideContentForHeadsUp,
+ homeStatusBarInteractor.visibilityViaDisableFlags,
+ ) { shouldStatusBarBeVisible, hideStartSideContentForHeadsUp, visibilityViaDisableFlags
+ ->
+ val showClock =
+ shouldStatusBarBeVisible &&
+ visibilityViaDisableFlags.isClockAllowed &&
+ !hideStartSideContentForHeadsUp
+ // Always use View.INVISIBLE here, so that animations work
+ VisibilityModel(showClock.toVisibleOrInvisible(), visibilityViaDisableFlags.animate)
+ }
+ .distinctUntilChanged()
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = COL_PREFIX_CLOCK,
+ initialValue = VisibilityModel(false.toVisibleOrInvisible(), false),
+ )
override val isNotificationIconContainerVisible: Flow<VisibilityModel> =
combine(
- shouldHomeStatusBarBeVisible,
- isAnyChipVisible,
- homeStatusBarInteractor.visibilityViaDisableFlags,
- ) { shouldStatusBarBeVisible, anyChipVisible, visibilityViaDisableFlags ->
- val showNotificationIconContainer =
- if (anyChipVisible) {
- false
- } else {
- shouldStatusBarBeVisible &&
- visibilityViaDisableFlags.areNotificationIconsAllowed
- }
- VisibilityModel(
- showNotificationIconContainer.toVisibleOrGone(),
- visibilityViaDisableFlags.animate,
+ shouldHomeStatusBarBeVisible,
+ isAnyChipVisible,
+ homeStatusBarInteractor.visibilityViaDisableFlags,
+ ) { shouldStatusBarBeVisible, anyChipVisible, visibilityViaDisableFlags ->
+ val showNotificationIconContainer =
+ if (anyChipVisible) {
+ false
+ } else {
+ shouldStatusBarBeVisible &&
+ visibilityViaDisableFlags.areNotificationIconsAllowed
+ }
+ VisibilityModel(
+ showNotificationIconContainer.toVisibleOrGone(),
+ visibilityViaDisableFlags.animate,
+ )
+ }
+ .distinctUntilChanged()
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = COL_PREFIX_NOTIF_CONTAINER,
+ initialValue = VisibilityModel(false.toVisibleOrInvisible(), false),
)
- }
private val isSystemInfoVisible =
combine(shouldHomeStatusBarBeVisible, homeStatusBarInteractor.visibilityViaDisableFlags) {
@@ -372,18 +412,19 @@ constructor(
override val systemInfoCombinedVis =
combine(isSystemInfoVisible, animations.animationState) { sysInfoVisible, animationState ->
- HomeStatusBarViewModel.SystemInfoCombinedVisibilityModel(
- sysInfoVisible,
- animationState,
- )
+ SystemInfoCombinedVisibilityModel(sysInfoVisible, animationState)
}
+ .distinctUntilChanged()
+ .logDiffsForTable(
+ tableLogBuffer = tableLogger,
+ columnPrefix = COL_PREFIX_SYSTEM_INFO,
+ initialValue =
+ SystemInfoCombinedVisibilityModel(VisibilityModel(View.VISIBLE, false), Idle),
+ )
.stateIn(
coroutineScope,
SharingStarted.WhileSubscribed(),
- HomeStatusBarViewModel.SystemInfoCombinedVisibilityModel(
- VisibilityModel(View.VISIBLE, false),
- Idle,
- ),
+ SystemInfoCombinedVisibilityModel(VisibilityModel(View.VISIBLE, false), Idle),
)
override val iconBlockList: Flow<List<String>> =
@@ -408,6 +449,19 @@ constructor(
HomeStatusBarViewModel.HomeStatusBarViewModelFactory {
override fun create(displayId: Int): HomeStatusBarViewModelImpl
}
+
+ companion object {
+ private const val COL_LOCK_TO_OCCLUDED = "Lock->Occluded"
+ private const val COL_ALLOWED_BY_SCENE = "allowedByScene"
+ private const val COL_NOTIF_LIGHTS_OUT = "notifLightsOut"
+ private const val COL_SHOW_OPERATOR_NAME = "showOperatorName"
+ private const val COL_VISIBLE = "visible"
+ private const val COL_PREFIX_CLOCK = "clock"
+ private const val COL_PREFIX_NOTIF_CONTAINER = "notifContainer"
+ private const val COL_PREFIX_SYSTEM_INFO = "systemInfo"
+
+ fun tableLogBufferName(displayId: Int) = "HomeStatusBarViewModel[$displayId]"
+ }
}
/** Lookup the color for a given view in the status bar */
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelKosmos.kt
index db7e31bb2cb6..f8bf3c3fbbd9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelKosmos.kt
@@ -21,6 +21,7 @@ import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
+import com.android.systemui.log.table.tableLogBufferFactory
import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -39,6 +40,7 @@ var Kosmos.homeStatusBarViewModel: HomeStatusBarViewModel by
Kosmos.Fixture {
HomeStatusBarViewModelImpl(
testableContext.displayId,
+ tableLogBufferFactory,
homeStatusBarInteractor,
homeStatusBarIconBlockListInteractor,
lightsOutInteractor,