Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt +6 −17 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, ) ) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() } } Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt +2 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/SystemInfoCombinedVisibilityModel.kt 0 → 100644 +44 −0 Original line number Diff line number Diff line /* * 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" } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt +6 −17 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, ) ) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt +2 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/model/SystemInfoCombinedVisibilityModel.kt 0 → 100644 +44 −0 Original line number Diff line number Diff line /* * 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" } }