Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bba1cd5a authored by Alejandro Nijamkin's avatar Alejandro Nijamkin
Browse files

[flexiglass] Gone scene view-model is SysUiViewModel

Also, no longer injected into anywhere.

Bug: 354270224
Flag: com.android.systemui.scene_container
Test: new unit test, updated existing unit and integration tests
Test: manually verified that the gone scene can navigate from/to adjacent scenes
and that its elements seem to animate and render correctly

Change-Id: I8cef0fb51bc415ec10d7726c165619ccdceb2fb9
parent 6b94cec9
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ import com.android.systemui.qs.ui.composable.QuickSettings
import com.android.systemui.qs.ui.composable.QuickSettings.SharedValues.MediaLandscapeTopOffset
import com.android.systemui.qs.ui.composable.QuickSettings.SharedValues.MediaOffset.Default
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.viewmodel.GoneSceneViewModel
import com.android.systemui.scene.ui.viewmodel.GoneSceneActionsViewModel
import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScrollView
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
import dagger.Lazy
@@ -48,12 +48,18 @@ class GoneScene
constructor(
    private val notificationStackScrolLView: Lazy<NotificationScrollView>,
    private val notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel,
    private val viewModel: GoneSceneViewModel,
    private val viewModelFactory: GoneSceneActionsViewModel.Factory,
) : ComposableScene {
    override val key = Scenes.Gone

    private val actionsViewModel: GoneSceneActionsViewModel by lazy { viewModelFactory.create() }

    override val destinationScenes: Flow<Map<UserAction, UserActionResult>> =
        viewModel.destinationScenes
        actionsViewModel.actions

    override suspend fun activate() {
        actionsViewModel.activate()
    }

    @Composable
    override fun SceneScope.Content(
+7 −5
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.scene.shared.model.TransitionKeys.ToSplitShade
import com.android.systemui.shade.data.repository.shadeRepository
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -42,25 +43,26 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
@EnableSceneContainer
class GoneSceneViewModelTest : SysuiTestCase() {
class GoneSceneActionsViewModelTest : SysuiTestCase() {

    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val shadeRepository by lazy { kosmos.shadeRepository }
    private lateinit var underTest: GoneSceneViewModel
    private lateinit var underTest: GoneSceneActionsViewModel

    @Before
    fun setUp() {
        underTest =
            GoneSceneViewModel(
            GoneSceneActionsViewModel(
                shadeInteractor = kosmos.shadeInteractor,
            )
        underTest.activateIn(testScope)
    }

    @Test
    fun downTransitionKey_splitShadeEnabled_isGoneToSplitShade() =
        testScope.runTest {
            val destinationScenes by collectLastValue(underTest.destinationScenes)
            val destinationScenes by collectLastValue(underTest.actions)
            shadeRepository.setShadeLayoutWide(true)
            runCurrent()

@@ -71,7 +73,7 @@ class GoneSceneViewModelTest : SysuiTestCase() {
    @Test
    fun downTransitionKey_splitShadeDisabled_isNull() =
        testScope.runTest {
            val destinationScenes by collectLastValue(underTest.destinationScenes)
            val destinationScenes by collectLastValue(underTest.actions)
            shadeRepository.setShadeLayoutWide(false)
            runCurrent()

+92 −0
Original line number Diff line number Diff line
@@ -22,28 +22,30 @@ import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.SwipeDirection
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.scene.shared.model.SceneFamilies
import com.android.systemui.scene.shared.model.TransitionKeys.OpenBottomShade
import com.android.systemui.scene.shared.model.TransitionKeys.ToSplitShade
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.shared.model.ShadeMode
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.map

@SysUISingleton
class GoneSceneViewModel
@Inject
class GoneSceneActionsViewModel
@AssistedInject
constructor(
    private val shadeInteractor: ShadeInteractor,
) {
    val destinationScenes: Flow<Map<UserAction, UserActionResult>> =
        shadeInteractor.shadeMode.map { shadeMode ->
            buildMap {
) : SceneActionsViewModel() {

    override suspend fun hydrateActions(setActions: (Map<UserAction, UserActionResult>) -> Unit) {
        shadeInteractor.shadeMode
            .map { shadeMode ->
                buildMap<UserAction, UserActionResult> {
                    if (
                        shadeMode is ShadeMode.Single ||
                        // TODO(b/338577208): Remove this once we add Dual Shade invocation zones.
                            // TODO(b/338577208): Remove this once we add Dual Shade invocation
                            // zones.
                            shadeMode is ShadeMode.Dual
                    ) {
                        if (shadeInteractor.shadeAlignment == Alignment.BottomEnd) {
@@ -80,4 +82,11 @@ constructor(
                    }
                }
            }
            .collectLatest { setActions(it) }
    }

    @AssistedFactory
    interface Factory {
        fun create(): GoneSceneActionsViewModel
    }
}