summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alejandro Nijamkin <nijamkin@google.com> 2024-08-05 16:33:37 -0700
committer Alejandro Nijamkin <nijamkin@google.com> 2024-08-07 08:54:40 -0700
commitaa9d072a8452b2b9a09d2d2633542a9406d94d0b (patch)
tree0982c20a4d19a22841dbd984ebb7ec69819e50cd
parent17223648ee39ae8aea1713ead1c83f9a114c7d5a (diff)
[flexiglass] ShadeHeaderViewModel is a SysUiViewModel
As per go/sysui-arch:summer-2024 Bug: 354270224 Test: unit tests still pass Test: manually verified that the shade header works in flexiglass as I transition between shade and QS scenes Flag: com.android.systemui.scene_container Change-Id: I865cf0812c9686291f97e2c3fce35d32890792f7
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt4
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt4
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt4
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt7
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt30
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt96
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModel.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt11
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModelKosmos.kt2
12 files changed, 97 insertions, 73 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt
index 41e8ab0b0b54..66be7bc83c64 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt
@@ -57,7 +57,7 @@ constructor(
private val contentViewModelFactory: NotificationsShadeSceneContentViewModel.Factory,
private val actionsViewModelFactory: NotificationsShadeSceneActionsViewModel.Factory,
private val overlayShadeViewModelFactory: OverlayShadeViewModel.Factory,
- private val shadeHeaderViewModel: ShadeHeaderViewModel,
+ private val shadeHeaderViewModelFactory: ShadeHeaderViewModel.Factory,
private val notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel,
private val tintedIconManagerFactory: TintedIconManager.Factory,
private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory,
@@ -94,7 +94,7 @@ constructor(
) {
Column {
ExpandedShadeHeader(
- viewModel = shadeHeaderViewModel,
+ viewModelFactory = shadeHeaderViewModelFactory,
createTintedIconManager = tintedIconManagerFactory::create,
createBatteryMeterViewController = batteryMeterViewControllerFactory::create,
statusBarIconController = statusBarIconController,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
index 5ea363e06608..8736307bb2b7 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
@@ -340,7 +340,7 @@ private fun SceneScope.QuickSettingsScene(
fadeOut(tween(customizingAnimationDuration)),
) {
ExpandedShadeHeader(
- viewModel = viewModel.shadeHeaderViewModel,
+ viewModelFactory = viewModel.shadeHeaderViewModelFactory,
createTintedIconManager = createTintedIconManager,
createBatteryMeterViewController =
createBatteryMeterViewController,
@@ -350,7 +350,7 @@ private fun SceneScope.QuickSettingsScene(
}
else ->
CollapsedShadeHeader(
- viewModel = viewModel.shadeHeaderViewModel,
+ viewModelFactory = viewModel.shadeHeaderViewModelFactory,
createTintedIconManager = createTintedIconManager,
createBatteryMeterViewController = createBatteryMeterViewController,
statusBarIconController = statusBarIconController,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt
index d2b96cdfa834..eea00c4f2935 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt
@@ -71,7 +71,7 @@ constructor(
private val actionsViewModelFactory: QuickSettingsShadeSceneActionsViewModel.Factory,
private val contentViewModelFactory: QuickSettingsShadeSceneContentViewModel.Factory,
private val lockscreenContent: Lazy<Optional<LockscreenContent>>,
- private val shadeHeaderViewModel: ShadeHeaderViewModel,
+ private val shadeHeaderViewModelFactory: ShadeHeaderViewModel.Factory,
private val tintedIconManagerFactory: TintedIconManager.Factory,
private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory,
private val statusBarIconController: StatusBarIconController,
@@ -98,7 +98,7 @@ constructor(
) {
Column {
ExpandedShadeHeader(
- viewModel = shadeHeaderViewModel,
+ viewModelFactory = shadeHeaderViewModelFactory,
createTintedIconManager = tintedIconManagerFactory::create,
createBatteryMeterViewController = batteryMeterViewControllerFactory::create,
statusBarIconController = statusBarIconController,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
index 1cd48bf2e628..8c53740ebfd0 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
@@ -73,6 +73,7 @@ import com.android.systemui.common.ui.compose.windowinsets.CutoutLocation
import com.android.systemui.common.ui.compose.windowinsets.LocalDisplayCutout
import com.android.systemui.common.ui.compose.windowinsets.LocalScreenCornerRadius
import com.android.systemui.compose.modifiers.sysuiResTag
+import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.privacy.OngoingPrivacyChip
import com.android.systemui.res.R
import com.android.systemui.scene.shared.model.Scenes
@@ -122,12 +123,13 @@ object ShadeHeader {
@Composable
fun SceneScope.CollapsedShadeHeader(
- viewModel: ShadeHeaderViewModel,
+ viewModelFactory: ShadeHeaderViewModel.Factory,
createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager,
createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController,
statusBarIconController: StatusBarIconController,
modifier: Modifier = Modifier,
) {
+ val viewModel = rememberViewModel { viewModelFactory.create() }
val isDisabled by viewModel.isDisabled.collectAsStateWithLifecycle()
if (isDisabled) {
return
@@ -279,12 +281,13 @@ fun SceneScope.CollapsedShadeHeader(
@Composable
fun SceneScope.ExpandedShadeHeader(
- viewModel: ShadeHeaderViewModel,
+ viewModelFactory: ShadeHeaderViewModel.Factory,
createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager,
createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController,
statusBarIconController: StatusBarIconController,
modifier: Modifier = Modifier,
) {
+ val viewModel = rememberViewModel { viewModelFactory.create() }
val isDisabled by viewModel.isDisabled.collectAsStateWithLifecycle()
if (isDisabled) {
return
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
index eb05a6e47b64..0e3fcf4598af 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
@@ -316,7 +316,7 @@ private fun SceneScope.SingleShade(
},
) {
CollapsedShadeHeader(
- viewModel = viewModel.shadeHeaderViewModel,
+ viewModelFactory = viewModel.shadeHeaderViewModelFactory,
createTintedIconManager = createTintedIconManager,
createBatteryMeterViewController = createBatteryMeterViewController,
statusBarIconController = statusBarIconController,
@@ -515,7 +515,7 @@ private fun SceneScope.SplitShade(
modifier = Modifier.fillMaxSize(),
) {
CollapsedShadeHeader(
- viewModel = viewModel.shadeHeaderViewModel,
+ viewModelFactory = viewModel.shadeHeaderViewModelFactory,
createTintedIconManager = createTintedIconManager,
createBatteryMeterViewController = createBatteryMeterViewController,
statusBarIconController = statusBarIconController,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt
index a978f6a6eb03..716c4780798b 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt
@@ -50,7 +50,7 @@ import com.android.systemui.scene.domain.startable.sceneContainerStartable
import com.android.systemui.scene.shared.model.SceneFamilies
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModelFactory
-import com.android.systemui.shade.ui.viewmodel.shadeHeaderViewModel
+import com.android.systemui.shade.ui.viewmodel.shadeHeaderViewModelFactory
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
@@ -94,7 +94,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
underTest =
QuickSettingsSceneViewModel(
brightnessMirrorViewModelFactory = kosmos.brightnessMirrorViewModelFactory,
- shadeHeaderViewModel = kosmos.shadeHeaderViewModel,
+ shadeHeaderViewModelFactory = kosmos.shadeHeaderViewModelFactory,
qsSceneAdapter = qsFlexiglassAdapter,
notifications = kosmos.notificationsPlaceholderViewModel,
footerActionsViewModelFactory = footerActionsViewModelFactory,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
index 3ded8a346ce9..f6fe667ff813 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt
@@ -15,6 +15,7 @@ import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
+import com.android.systemui.lifecycle.activateIn
import com.android.systemui.plugins.activityStarter
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
@@ -52,6 +53,7 @@ class ShadeHeaderViewModelTest : SysuiTestCase() {
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
+ underTest.activateIn(testScope)
}
@Test
@@ -107,15 +109,15 @@ class ShadeHeaderViewModelTest : SysuiTestCase() {
@Test
fun onSystemIconContainerClicked_unlocked_collapsesShadeToGone() =
- testScope.runTest {
- setDeviceEntered(true)
- setScene(Scenes.Shade)
+ testScope.runTest {
+ setDeviceEntered(true)
+ setScene(Scenes.Shade)
- underTest.onSystemIconContainerClicked()
- runCurrent()
+ underTest.onSystemIconContainerClicked()
+ runCurrent()
- assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone)
- }
+ assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone)
+ }
companion object {
private val SUB_1 =
@@ -137,7 +139,7 @@ class ShadeHeaderViewModelTest : SysuiTestCase() {
private fun setScene(key: SceneKey) {
sceneInteractor.changeScene(key, "test")
sceneInteractor.setTransitionState(
- MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(key))
+ MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(key))
)
testScope.runCurrent()
}
@@ -146,16 +148,16 @@ class ShadeHeaderViewModelTest : SysuiTestCase() {
if (isEntered) {
// Unlock the device marking the device has entered.
kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
- SuccessFingerprintAuthenticationStatus(0, true)
+ SuccessFingerprintAuthenticationStatus(0, true)
)
runCurrent()
}
setScene(
- if (isEntered) {
- Scenes.Gone
- } else {
- Scenes.Lockscreen
- }
+ if (isEntered) {
+ Scenes.Gone
+ } else {
+ Scenes.Lockscreen
+ }
)
assertThat(deviceEntryInteractor.isDeviceEntered.value).isEqualTo(isEntered)
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt
index f7996b26e23c..9bdd1f3c6ffd 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt
@@ -49,7 +49,7 @@ class QuickSettingsSceneViewModel
@Inject
constructor(
val brightnessMirrorViewModelFactory: BrightnessMirrorViewModel.Factory,
- val shadeHeaderViewModel: ShadeHeaderViewModel,
+ val shadeHeaderViewModelFactory: ShadeHeaderViewModel.Factory,
val qsSceneAdapter: QSSceneAdapter,
val notifications: NotificationsPlaceholderViewModel,
private val footerActionsViewModelFactory: FooterActionsViewModel.Factory,
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt
index b2e0cd04687c..03fdfa9aaa6c 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt
@@ -24,8 +24,7 @@ import android.icu.text.DisplayContext
import android.os.UserHandle
import android.provider.Settings
import com.android.systemui.broadcast.BroadcastDispatcher
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.lifecycle.SysUiViewModel
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.privacy.OngoingPrivacyChip
import com.android.systemui.privacy.PrivacyItem
@@ -38,44 +37,40 @@ import com.android.systemui.shade.domain.interactor.ShadeHeaderClockInteractor
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
import java.util.Date
import java.util.Locale
-import javax.inject.Inject
-import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
/** Models UI state for the shade header. */
-@SysUISingleton
class ShadeHeaderViewModel
-@Inject
+@AssistedInject
constructor(
- @Application private val applicationScope: CoroutineScope,
- context: Context,
+ private val context: Context,
private val activityStarter: ActivityStarter,
private val sceneInteractor: SceneInteractor,
- shadeInteractor: ShadeInteractor,
- mobileIconsInteractor: MobileIconsInteractor,
+ private val shadeInteractor: ShadeInteractor,
+ private val mobileIconsInteractor: MobileIconsInteractor,
val mobileIconsViewModel: MobileIconsViewModel,
private val privacyChipInteractor: PrivacyChipInteractor,
private val clockInteractor: ShadeHeaderClockInteractor,
- broadcastDispatcher: BroadcastDispatcher,
-) {
+ private val broadcastDispatcher: BroadcastDispatcher,
+) : SysUiViewModel() {
/** True if there is exactly one mobile connection. */
val isSingleCarrier: StateFlow<Boolean> = mobileIconsInteractor.isSingleCarrier
+ private val _mobileSubIds = MutableStateFlow(emptyList<Int>())
/** The list of subscription Ids for current mobile connections. */
- val mobileSubIds =
- mobileIconsInteractor.filteredSubscriptions
- .map { list -> list.map { it.subscriptionId } }
- .stateIn(applicationScope, SharingStarted.WhileSubscribed(), emptyList())
+ val mobileSubIds: StateFlow<List<Int>> = _mobileSubIds.asStateFlow()
/** The list of PrivacyItems to be displayed by the privacy chip. */
val privacyItems: StateFlow<List<PrivacyItem>> = privacyChipInteractor.privacyItems
@@ -94,11 +89,9 @@ constructor(
/** Whether or not the privacy chip is enabled in the device privacy config. */
val isPrivacyChipEnabled: StateFlow<Boolean> = privacyChipInteractor.isChipEnabled
+ private val _isDisabled = MutableStateFlow(false)
/** Whether or not the Shade Header should be disabled based on disableFlags. */
- val isDisabled: StateFlow<Boolean> =
- shadeInteractor.isQsEnabled
- .map { !it }
- .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false)
+ val isDisabled: StateFlow<Boolean> = _isDisabled.asStateFlow()
private val longerPattern = context.getString(R.string.abbrev_wday_month_day_no_year_alarm)
private val shorterPattern = context.getString(R.string.abbrev_month_day_no_year)
@@ -111,26 +104,40 @@ constructor(
private val _longerDateText: MutableStateFlow<String> = MutableStateFlow("")
val longerDateText: StateFlow<String> = _longerDateText.asStateFlow()
- init {
- broadcastDispatcher
- .broadcastFlow(
- filter =
- IntentFilter().apply {
- addAction(Intent.ACTION_TIME_TICK)
- addAction(Intent.ACTION_TIME_CHANGED)
- addAction(Intent.ACTION_TIMEZONE_CHANGED)
- addAction(Intent.ACTION_LOCALE_CHANGED)
- },
- user = UserHandle.SYSTEM,
- map = { intent, _ ->
- intent.action == Intent.ACTION_TIMEZONE_CHANGED ||
- intent.action == Intent.ACTION_LOCALE_CHANGED
- }
- )
- .onEach { invalidateFormats -> updateDateTexts(invalidateFormats) }
- .launchIn(applicationScope)
-
- applicationScope.launch { updateDateTexts(false) }
+ override suspend fun onActivated() {
+ coroutineScope {
+ launch {
+ broadcastDispatcher
+ .broadcastFlow(
+ filter =
+ IntentFilter().apply {
+ addAction(Intent.ACTION_TIME_TICK)
+ addAction(Intent.ACTION_TIME_CHANGED)
+ addAction(Intent.ACTION_TIMEZONE_CHANGED)
+ addAction(Intent.ACTION_LOCALE_CHANGED)
+ },
+ user = UserHandle.SYSTEM,
+ map = { intent, _ ->
+ intent.action == Intent.ACTION_TIMEZONE_CHANGED ||
+ intent.action == Intent.ACTION_LOCALE_CHANGED
+ }
+ )
+ .onEach { invalidateFormats -> updateDateTexts(invalidateFormats) }
+ .launchIn(this)
+ }
+
+ launch { updateDateTexts(false) }
+
+ launch {
+ mobileIconsInteractor.filteredSubscriptions
+ .map { list -> list.map { it.subscriptionId } }
+ .collectLatest { _mobileSubIds.value = it }
+ }
+
+ launch {
+ shadeInteractor.isQsEnabled.map { !it }.collectLatest { _isDisabled.value = it }
+ }
+ }
}
/** Notifies that the privacy chip was clicked. */
@@ -182,4 +189,9 @@ constructor(
format.setContext(DisplayContext.CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE)
return format
}
+
+ @AssistedFactory
+ interface Factory {
+ fun create(): ShadeHeaderViewModel
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModel.kt
index 63242168ca12..3cdff964e26a 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModel.kt
@@ -46,7 +46,7 @@ class ShadeSceneContentViewModel
@AssistedInject
constructor(
val qsSceneAdapter: QSSceneAdapter,
- val shadeHeaderViewModel: ShadeHeaderViewModel,
+ val shadeHeaderViewModelFactory: ShadeHeaderViewModel.Factory,
val brightnessMirrorViewModelFactory: BrightnessMirrorViewModel.Factory,
val mediaCarouselInteractor: MediaCarouselInteractor,
shadeInteractor: ShadeInteractor,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt
index 0e21698ef271..7eb9f3472482 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt
@@ -19,7 +19,6 @@ package com.android.systemui.shade.ui.viewmodel
import android.content.applicationContext
import com.android.systemui.broadcast.broadcastDispatcher
import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.plugins.activityStarter
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.shade.domain.interactor.privacyChipInteractor
@@ -31,7 +30,6 @@ import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.mobileIconsVi
val Kosmos.shadeHeaderViewModel: ShadeHeaderViewModel by
Kosmos.Fixture {
ShadeHeaderViewModel(
- applicationScope = applicationCoroutineScope,
context = applicationContext,
activityStarter = activityStarter,
sceneInteractor = sceneInteractor,
@@ -43,3 +41,12 @@ val Kosmos.shadeHeaderViewModel: ShadeHeaderViewModel by
broadcastDispatcher = broadcastDispatcher,
)
}
+
+val Kosmos.shadeHeaderViewModelFactory: ShadeHeaderViewModel.Factory by
+ Kosmos.Fixture {
+ object : ShadeHeaderViewModel.Factory {
+ override fun create(): ShadeHeaderViewModel {
+ return shadeHeaderViewModel
+ }
+ }
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModelKosmos.kt
index b2c9074f17d6..7097d3130aa0 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneContentViewModelKosmos.kt
@@ -30,7 +30,7 @@ import com.android.systemui.unfold.domain.interactor.unfoldTransitionInteractor
val Kosmos.shadeSceneContentViewModel: ShadeSceneContentViewModel by Fixture {
ShadeSceneContentViewModel(
- shadeHeaderViewModel = shadeHeaderViewModel,
+ shadeHeaderViewModelFactory = shadeHeaderViewModelFactory,
qsSceneAdapter = qsSceneAdapter,
brightnessMirrorViewModelFactory = brightnessMirrorViewModelFactory,
mediaCarouselInteractor = mediaCarouselInteractor,