Loading packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt +6 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.util.Log import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.Animatable import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollState import androidx.compose.foundation.background import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.scrollBy import androidx.compose.foundation.gestures.scrollBy import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer Loading Loading @@ -233,6 +234,8 @@ fun SceneScope.NotificationScrollingStack( // The height of the scrim visible on screen when it is in its resting (collapsed) state. // The height of the scrim visible on screen when it is in its resting (collapsed) state. val minVisibleScrimHeight: () -> Float = { screenHeight - maxScrimTop() } val minVisibleScrimHeight: () -> Float = { screenHeight - maxScrimTop() } val isClickable by viewModel.isClickable.collectAsStateWithLifecycle() // we are not scrolled to the top unless the scrim is at its maximum offset. // we are not scrolled to the top unless the scrim is at its maximum offset. LaunchedEffect(viewModel, scrimOffset) { LaunchedEffect(viewModel, scrimOffset) { snapshotFlow { scrimOffset.value >= 0f } snapshotFlow { scrimOffset.value >= 0f } Loading Loading @@ -328,6 +331,9 @@ fun SceneScope.NotificationScrollingStack( ) ) ) ) } } .thenIf(isClickable) { Modifier.clickable(onClick = { viewModel.onEmptySpaceClicked() }) } ) { ) { // Creates a cutout in the background scrim in the shape of the notifications scrim. // Creates a cutout in the background scrim in the shape of the notifications scrim. // Only visible when notif scrim alpha < 1, during shade expansion. // Only visible when notif scrim alpha < 1, during shade expansion. Loading packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +16 −6 Original line number Original line Diff line number Diff line Loading @@ -96,6 +96,7 @@ import com.android.systemui.scene.ui.composable.ComposableScene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScrollView import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScrollView import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.TintedIconManager import com.android.systemui.statusbar.phone.ui.TintedIconManager Loading Loading @@ -137,6 +138,7 @@ constructor( private val shadeSession: SaveableSession, private val shadeSession: SaveableSession, private val notificationStackScrollView: Lazy<NotificationScrollView>, private val notificationStackScrollView: Lazy<NotificationScrollView>, private val viewModel: ShadeSceneViewModel, private val viewModel: ShadeSceneViewModel, private val notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, private val tintedIconManagerFactory: TintedIconManager.Factory, private val tintedIconManagerFactory: TintedIconManager.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, private val statusBarIconController: StatusBarIconController, private val statusBarIconController: StatusBarIconController, Loading @@ -156,6 +158,7 @@ constructor( ShadeScene( ShadeScene( notificationStackScrollView.get(), notificationStackScrollView.get(), viewModel = viewModel, viewModel = viewModel, notificationsPlaceholderViewModel = notificationsPlaceholderViewModel, createTintedIconManager = tintedIconManagerFactory::create, createTintedIconManager = tintedIconManagerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, statusBarIconController = statusBarIconController, statusBarIconController = statusBarIconController, Loading @@ -176,6 +179,7 @@ constructor( private fun SceneScope.ShadeScene( private fun SceneScope.ShadeScene( notificationStackScrollView: NotificationScrollView, notificationStackScrollView: NotificationScrollView, viewModel: ShadeSceneViewModel, viewModel: ShadeSceneViewModel, notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, statusBarIconController: StatusBarIconController, statusBarIconController: StatusBarIconController, Loading @@ -190,6 +194,7 @@ private fun SceneScope.ShadeScene( SingleShade( SingleShade( notificationStackScrollView = notificationStackScrollView, notificationStackScrollView = notificationStackScrollView, viewModel = viewModel, viewModel = viewModel, notificationsPlaceholderViewModel = notificationsPlaceholderViewModel, createTintedIconManager = createTintedIconManager, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, createBatteryMeterViewController = createBatteryMeterViewController, statusBarIconController = statusBarIconController, statusBarIconController = statusBarIconController, Loading @@ -202,6 +207,7 @@ private fun SceneScope.ShadeScene( SplitShade( SplitShade( notificationStackScrollView = notificationStackScrollView, notificationStackScrollView = notificationStackScrollView, viewModel = viewModel, viewModel = viewModel, notificationsPlaceholderViewModel = notificationsPlaceholderViewModel, createTintedIconManager = createTintedIconManager, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, createBatteryMeterViewController = createBatteryMeterViewController, statusBarIconController = statusBarIconController, statusBarIconController = statusBarIconController, Loading @@ -218,6 +224,7 @@ private fun SceneScope.ShadeScene( private fun SceneScope.SingleShade( private fun SceneScope.SingleShade( notificationStackScrollView: NotificationScrollView, notificationStackScrollView: NotificationScrollView, viewModel: ShadeSceneViewModel, viewModel: ShadeSceneViewModel, notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, statusBarIconController: StatusBarIconController, statusBarIconController: StatusBarIconController, Loading Loading @@ -329,7 +336,7 @@ private fun SceneScope.SingleShade( NotificationScrollingStack( NotificationScrollingStack( shadeSession = shadeSession, shadeSession = shadeSession, stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, maxScrimTop = { maxNotifScrimTop.value }, maxScrimTop = { maxNotifScrimTop.value }, shadeMode = ShadeMode.Single, shadeMode = ShadeMode.Single, shouldPunchHoleBehindScrim = shouldPunchHoleBehindScrim, shouldPunchHoleBehindScrim = shouldPunchHoleBehindScrim, Loading @@ -353,7 +360,7 @@ private fun SceneScope.SingleShade( } } NotificationStackCutoffGuideline( NotificationStackCutoffGuideline( stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() ) ) } } Loading @@ -363,6 +370,7 @@ private fun SceneScope.SingleShade( private fun SceneScope.SplitShade( private fun SceneScope.SplitShade( notificationStackScrollView: NotificationScrollView, notificationStackScrollView: NotificationScrollView, viewModel: ShadeSceneViewModel, viewModel: ShadeSceneViewModel, notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, statusBarIconController: StatusBarIconController, statusBarIconController: StatusBarIconController, Loading Loading @@ -430,8 +438,10 @@ private fun SceneScope.SplitShade( label = "alphaAnimationBrightnessMirrorContentHiding", label = "alphaAnimationBrightnessMirrorContentHiding", ) ) viewModel.notifications.setAlphaForBrightnessMirror(contentAlpha) notificationsPlaceholderViewModel.setAlphaForBrightnessMirror(contentAlpha) DisposableEffect(Unit) { onDispose { viewModel.notifications.setAlphaForBrightnessMirror(1f) } } DisposableEffect(Unit) { onDispose { notificationsPlaceholderViewModel.setAlphaForBrightnessMirror(1f) } } val isMediaVisible by viewModel.isMediaVisible.collectAsStateWithLifecycle() val isMediaVisible by viewModel.isMediaVisible.collectAsStateWithLifecycle() Loading Loading @@ -532,7 +542,7 @@ private fun SceneScope.SplitShade( NotificationScrollingStack( NotificationScrollingStack( shadeSession = shadeSession, shadeSession = shadeSession, stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, maxScrimTop = { 0f }, maxScrimTop = { 0f }, shouldPunchHoleBehindScrim = false, shouldPunchHoleBehindScrim = false, shouldReserveSpaceForNavBar = false, shouldReserveSpaceForNavBar = false, Loading @@ -547,7 +557,7 @@ private fun SceneScope.SplitShade( } } NotificationStackCutoffGuideline( NotificationStackCutoffGuideline( stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() ) ) } } Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModelTest.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel package com.android.systemui.keyguard.ui.viewmodel import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.SceneKey import com.android.compose.animation.scene.SceneKey Loading Loading @@ -61,6 +62,7 @@ import platform.test.runner.parameterized.Parameters @SmallTest @SmallTest @RunWith(ParameterizedAndroidJunit4::class) @RunWith(ParameterizedAndroidJunit4::class) @RunWithLooper @EnableSceneContainer @EnableSceneContainer class LockscreenSceneViewModelTest : SysuiTestCase() { class LockscreenSceneViewModelTest : SysuiTestCase() { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.qs.ui.viewmodel package com.android.systemui.qs.ui.viewmodel import android.testing.TestableLooper.RunWithLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.compose.animation.scene.Back import com.android.compose.animation.scene.Back Loading Loading @@ -65,6 +66,7 @@ import org.mockito.Mockito.verify @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class) @RunWithLooper @EnableSceneContainer @EnableSceneContainer class QuickSettingsSceneViewModelTest : SysuiTestCase() { class QuickSettingsSceneViewModelTest : SysuiTestCase() { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt +4 −22 Original line number Original line Diff line number Diff line Loading @@ -51,13 +51,10 @@ import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.qs.footerActionsController import com.android.systemui.qs.ui.adapter.fakeQSSceneAdapter import com.android.systemui.qs.footerActionsViewModelFactory import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.domain.startable.sceneContainerStartable Loading @@ -65,16 +62,14 @@ import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.fakeSceneDataSource import com.android.systemui.scene.shared.model.fakeSceneDataSource import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModel import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.shade.ui.viewmodel.shadeHeaderViewModel import com.android.systemui.shade.ui.viewmodel.shadeSceneViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository import com.android.systemui.telephony.data.repository.fakeTelephonyRepository import com.android.systemui.telephony.data.repository.fakeTelephonyRepository import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.unfold.domain.interactor.unfoldTransitionInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.whenever Loading Loading @@ -167,7 +162,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { private var bouncerSceneJob: Job? = null private var bouncerSceneJob: Job? = null private val qsFlexiglassAdapter = FakeQSSceneAdapter(inflateDelegate = { mock() }) private val qsFlexiglassAdapter = kosmos.fakeQSSceneAdapter private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager private lateinit var telecomManager: TelecomManager private lateinit var telecomManager: TelecomManager Loading Loading @@ -200,20 +195,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { bouncerActionButtonInteractor = kosmos.bouncerActionButtonInteractor bouncerActionButtonInteractor = kosmos.bouncerActionButtonInteractor bouncerViewModel = kosmos.bouncerViewModel bouncerViewModel = kosmos.bouncerViewModel shadeSceneViewModel = shadeSceneViewModel = kosmos.shadeSceneViewModel ShadeSceneViewModel( applicationScope = testScope.backgroundScope, shadeHeaderViewModel = kosmos.shadeHeaderViewModel, qsSceneAdapter = qsFlexiglassAdapter, notifications = kosmos.notificationsPlaceholderViewModel, brightnessMirrorViewModel = kosmos.brightnessMirrorViewModel, mediaCarouselInteractor = kosmos.mediaCarouselInteractor, shadeInteractor = kosmos.shadeInteractor, footerActionsController = kosmos.footerActionsController, footerActionsViewModelFactory = kosmos.footerActionsViewModelFactory, sceneInteractor = sceneInteractor, unfoldTransitionInteractor = kosmos.unfoldTransitionInteractor, ) val startable = kosmos.sceneContainerStartable val startable = kosmos.sceneContainerStartable startable.start() startable.start() Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt +6 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.util.Log import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.Animatable import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollState import androidx.compose.foundation.background import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.scrollBy import androidx.compose.foundation.gestures.scrollBy import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer Loading Loading @@ -233,6 +234,8 @@ fun SceneScope.NotificationScrollingStack( // The height of the scrim visible on screen when it is in its resting (collapsed) state. // The height of the scrim visible on screen when it is in its resting (collapsed) state. val minVisibleScrimHeight: () -> Float = { screenHeight - maxScrimTop() } val minVisibleScrimHeight: () -> Float = { screenHeight - maxScrimTop() } val isClickable by viewModel.isClickable.collectAsStateWithLifecycle() // we are not scrolled to the top unless the scrim is at its maximum offset. // we are not scrolled to the top unless the scrim is at its maximum offset. LaunchedEffect(viewModel, scrimOffset) { LaunchedEffect(viewModel, scrimOffset) { snapshotFlow { scrimOffset.value >= 0f } snapshotFlow { scrimOffset.value >= 0f } Loading Loading @@ -328,6 +331,9 @@ fun SceneScope.NotificationScrollingStack( ) ) ) ) } } .thenIf(isClickable) { Modifier.clickable(onClick = { viewModel.onEmptySpaceClicked() }) } ) { ) { // Creates a cutout in the background scrim in the shape of the notifications scrim. // Creates a cutout in the background scrim in the shape of the notifications scrim. // Only visible when notif scrim alpha < 1, during shade expansion. // Only visible when notif scrim alpha < 1, during shade expansion. Loading
packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +16 −6 Original line number Original line Diff line number Diff line Loading @@ -96,6 +96,7 @@ import com.android.systemui.scene.ui.composable.ComposableScene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScrollView import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScrollView import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.TintedIconManager import com.android.systemui.statusbar.phone.ui.TintedIconManager Loading Loading @@ -137,6 +138,7 @@ constructor( private val shadeSession: SaveableSession, private val shadeSession: SaveableSession, private val notificationStackScrollView: Lazy<NotificationScrollView>, private val notificationStackScrollView: Lazy<NotificationScrollView>, private val viewModel: ShadeSceneViewModel, private val viewModel: ShadeSceneViewModel, private val notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, private val tintedIconManagerFactory: TintedIconManager.Factory, private val tintedIconManagerFactory: TintedIconManager.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, private val statusBarIconController: StatusBarIconController, private val statusBarIconController: StatusBarIconController, Loading @@ -156,6 +158,7 @@ constructor( ShadeScene( ShadeScene( notificationStackScrollView.get(), notificationStackScrollView.get(), viewModel = viewModel, viewModel = viewModel, notificationsPlaceholderViewModel = notificationsPlaceholderViewModel, createTintedIconManager = tintedIconManagerFactory::create, createTintedIconManager = tintedIconManagerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, createBatteryMeterViewController = batteryMeterViewControllerFactory::create, statusBarIconController = statusBarIconController, statusBarIconController = statusBarIconController, Loading @@ -176,6 +179,7 @@ constructor( private fun SceneScope.ShadeScene( private fun SceneScope.ShadeScene( notificationStackScrollView: NotificationScrollView, notificationStackScrollView: NotificationScrollView, viewModel: ShadeSceneViewModel, viewModel: ShadeSceneViewModel, notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, statusBarIconController: StatusBarIconController, statusBarIconController: StatusBarIconController, Loading @@ -190,6 +194,7 @@ private fun SceneScope.ShadeScene( SingleShade( SingleShade( notificationStackScrollView = notificationStackScrollView, notificationStackScrollView = notificationStackScrollView, viewModel = viewModel, viewModel = viewModel, notificationsPlaceholderViewModel = notificationsPlaceholderViewModel, createTintedIconManager = createTintedIconManager, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, createBatteryMeterViewController = createBatteryMeterViewController, statusBarIconController = statusBarIconController, statusBarIconController = statusBarIconController, Loading @@ -202,6 +207,7 @@ private fun SceneScope.ShadeScene( SplitShade( SplitShade( notificationStackScrollView = notificationStackScrollView, notificationStackScrollView = notificationStackScrollView, viewModel = viewModel, viewModel = viewModel, notificationsPlaceholderViewModel = notificationsPlaceholderViewModel, createTintedIconManager = createTintedIconManager, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, createBatteryMeterViewController = createBatteryMeterViewController, statusBarIconController = statusBarIconController, statusBarIconController = statusBarIconController, Loading @@ -218,6 +224,7 @@ private fun SceneScope.ShadeScene( private fun SceneScope.SingleShade( private fun SceneScope.SingleShade( notificationStackScrollView: NotificationScrollView, notificationStackScrollView: NotificationScrollView, viewModel: ShadeSceneViewModel, viewModel: ShadeSceneViewModel, notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, statusBarIconController: StatusBarIconController, statusBarIconController: StatusBarIconController, Loading Loading @@ -329,7 +336,7 @@ private fun SceneScope.SingleShade( NotificationScrollingStack( NotificationScrollingStack( shadeSession = shadeSession, shadeSession = shadeSession, stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, maxScrimTop = { maxNotifScrimTop.value }, maxScrimTop = { maxNotifScrimTop.value }, shadeMode = ShadeMode.Single, shadeMode = ShadeMode.Single, shouldPunchHoleBehindScrim = shouldPunchHoleBehindScrim, shouldPunchHoleBehindScrim = shouldPunchHoleBehindScrim, Loading @@ -353,7 +360,7 @@ private fun SceneScope.SingleShade( } } NotificationStackCutoffGuideline( NotificationStackCutoffGuideline( stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() ) ) } } Loading @@ -363,6 +370,7 @@ private fun SceneScope.SingleShade( private fun SceneScope.SplitShade( private fun SceneScope.SplitShade( notificationStackScrollView: NotificationScrollView, notificationStackScrollView: NotificationScrollView, viewModel: ShadeSceneViewModel, viewModel: ShadeSceneViewModel, notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController, statusBarIconController: StatusBarIconController, statusBarIconController: StatusBarIconController, Loading Loading @@ -430,8 +438,10 @@ private fun SceneScope.SplitShade( label = "alphaAnimationBrightnessMirrorContentHiding", label = "alphaAnimationBrightnessMirrorContentHiding", ) ) viewModel.notifications.setAlphaForBrightnessMirror(contentAlpha) notificationsPlaceholderViewModel.setAlphaForBrightnessMirror(contentAlpha) DisposableEffect(Unit) { onDispose { viewModel.notifications.setAlphaForBrightnessMirror(1f) } } DisposableEffect(Unit) { onDispose { notificationsPlaceholderViewModel.setAlphaForBrightnessMirror(1f) } } val isMediaVisible by viewModel.isMediaVisible.collectAsStateWithLifecycle() val isMediaVisible by viewModel.isMediaVisible.collectAsStateWithLifecycle() Loading Loading @@ -532,7 +542,7 @@ private fun SceneScope.SplitShade( NotificationScrollingStack( NotificationScrollingStack( shadeSession = shadeSession, shadeSession = shadeSession, stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, maxScrimTop = { 0f }, maxScrimTop = { 0f }, shouldPunchHoleBehindScrim = false, shouldPunchHoleBehindScrim = false, shouldReserveSpaceForNavBar = false, shouldReserveSpaceForNavBar = false, Loading @@ -547,7 +557,7 @@ private fun SceneScope.SplitShade( } } NotificationStackCutoffGuideline( NotificationStackCutoffGuideline( stackScrollView = notificationStackScrollView, stackScrollView = notificationStackScrollView, viewModel = viewModel.notifications, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding() ) ) } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModelTest.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel package com.android.systemui.keyguard.ui.viewmodel import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.EnableFlags import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.SceneKey import com.android.compose.animation.scene.SceneKey Loading Loading @@ -61,6 +62,7 @@ import platform.test.runner.parameterized.Parameters @SmallTest @SmallTest @RunWith(ParameterizedAndroidJunit4::class) @RunWith(ParameterizedAndroidJunit4::class) @RunWithLooper @EnableSceneContainer @EnableSceneContainer class LockscreenSceneViewModelTest : SysuiTestCase() { class LockscreenSceneViewModelTest : SysuiTestCase() { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.qs.ui.viewmodel package com.android.systemui.qs.ui.viewmodel import android.testing.TestableLooper.RunWithLooper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.compose.animation.scene.Back import com.android.compose.animation.scene.Back Loading Loading @@ -65,6 +66,7 @@ import org.mockito.Mockito.verify @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class) @RunWithLooper @EnableSceneContainer @EnableSceneContainer class QuickSettingsSceneViewModelTest : SysuiTestCase() { class QuickSettingsSceneViewModelTest : SysuiTestCase() { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt +4 −22 Original line number Original line Diff line number Diff line Loading @@ -51,13 +51,10 @@ import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel import com.android.systemui.kosmos.testScope import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.qs.footerActionsController import com.android.systemui.qs.ui.adapter.fakeQSSceneAdapter import com.android.systemui.qs.footerActionsViewModelFactory import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.domain.startable.sceneContainerStartable import com.android.systemui.scene.domain.startable.sceneContainerStartable Loading @@ -65,16 +62,14 @@ import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.fakeSceneDataSource import com.android.systemui.scene.shared.model.fakeSceneDataSource import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModel import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.shade.ui.viewmodel.shadeHeaderViewModel import com.android.systemui.shade.ui.viewmodel.shadeSceneViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository import com.android.systemui.telephony.data.repository.fakeTelephonyRepository import com.android.systemui.telephony.data.repository.fakeTelephonyRepository import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.unfold.domain.interactor.unfoldTransitionInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.whenever Loading Loading @@ -167,7 +162,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { private var bouncerSceneJob: Job? = null private var bouncerSceneJob: Job? = null private val qsFlexiglassAdapter = FakeQSSceneAdapter(inflateDelegate = { mock() }) private val qsFlexiglassAdapter = kosmos.fakeQSSceneAdapter private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager private lateinit var telecomManager: TelecomManager private lateinit var telecomManager: TelecomManager Loading Loading @@ -200,20 +195,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { bouncerActionButtonInteractor = kosmos.bouncerActionButtonInteractor bouncerActionButtonInteractor = kosmos.bouncerActionButtonInteractor bouncerViewModel = kosmos.bouncerViewModel bouncerViewModel = kosmos.bouncerViewModel shadeSceneViewModel = shadeSceneViewModel = kosmos.shadeSceneViewModel ShadeSceneViewModel( applicationScope = testScope.backgroundScope, shadeHeaderViewModel = kosmos.shadeHeaderViewModel, qsSceneAdapter = qsFlexiglassAdapter, notifications = kosmos.notificationsPlaceholderViewModel, brightnessMirrorViewModel = kosmos.brightnessMirrorViewModel, mediaCarouselInteractor = kosmos.mediaCarouselInteractor, shadeInteractor = kosmos.shadeInteractor, footerActionsController = kosmos.footerActionsController, footerActionsViewModelFactory = kosmos.footerActionsViewModelFactory, sceneInteractor = sceneInteractor, unfoldTransitionInteractor = kosmos.unfoldTransitionInteractor, ) val startable = kosmos.sceneContainerStartable val startable = kosmos.sceneContainerStartable startable.start() startable.start() Loading