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

Commit d0eb85b7 authored by Ale Nijamkin's avatar Ale Nijamkin Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Require single swipe up to return to LS from QS scene" into main

parents 2830e96f 7bfffc4f
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.qs.FooterActionsController
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModel
import com.android.systemui.shade.domain.interactor.privacyChipInteractor
@@ -88,6 +89,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
            flags,
            scope = testScope.backgroundScope,
        )
    private val sceneInteractor = kosmos.sceneInteractor

    private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel

@@ -115,11 +117,12 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
                notifications = kosmos.notificationsPlaceholderViewModel,
                footerActionsViewModelFactory = footerActionsViewModelFactory,
                footerActionsController = footerActionsController,
                sceneInteractor = sceneInteractor,
            )
    }

    @Test
    fun destinationsNotCustomizing() =
    fun destinations_whenNotCustomizing() =
        testScope.runTest {
            overrideResource(R.bool.config_use_split_notification_shade, false)
            val destinations by collectLastValue(underTest.destinationScenes)
@@ -135,7 +138,30 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
        }

    @Test
    fun destinationsCustomizing_noDestinations() =
    fun destinations_whenNotCustomizing_withPreviousSceneLockscreen() =
        testScope.runTest {
            overrideResource(R.bool.config_use_split_notification_shade, false)
            qsFlexiglassAdapter.setCustomizing(false)
            val destinations by collectLastValue(underTest.destinationScenes)

            val currentScene by collectLastValue(sceneInteractor.currentScene)
            val previousScene by collectLastValue(sceneInteractor.previousScene)
            sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
            sceneInteractor.changeScene(Scenes.QuickSettings, "reason")
            assertThat(currentScene).isEqualTo(Scenes.QuickSettings)
            assertThat(previousScene).isEqualTo(Scenes.Lockscreen)

            assertThat(destinations)
                .isEqualTo(
                    mapOf(
                        Back to UserActionResult(Scenes.Lockscreen),
                        Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Lockscreen),
                    )
                )
        }

    @Test
    fun destinations_whenCustomizing_noDestinations() =
        testScope.runTest {
            overrideResource(R.bool.config_use_split_notification_shade, false)
            val destinations by collectLastValue(underTest.destinationScenes)
+12 −6
Original line number Diff line number Diff line
@@ -25,12 +25,15 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.qs.FooterActionsController
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
import com.android.systemui.qs.ui.adapter.QSSceneAdapter
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.brightness.ui.viewModel.BrightnessMirrorViewModel
import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map

/** Models UI state and handles user input for the quick settings scene. */
@@ -44,22 +47,25 @@ constructor(
    val notifications: NotificationsPlaceholderViewModel,
    private val footerActionsViewModelFactory: FooterActionsViewModel.Factory,
    private val footerActionsController: FooterActionsController,
    private val sceneInteractor: SceneInteractor,
) {
    val destinationScenes =
        qsSceneAdapter.isCustomizing.map { customizing ->
        qsSceneAdapter.isCustomizing.flatMapLatest { customizing ->
            if (customizing) {
                // TODO(b/332749288) Empty map so there are no back handlers and back can close
                // customizer
                emptyMap()
                flowOf(emptyMap())
                // TODO(b/330200163) Add an Up from Bottom to be able to collapse the shade
                // while customizing
            } else {
                sceneInteractor.previousScene.map { previousScene ->
                    mapOf(
                    Back to UserActionResult(Scenes.Shade),
                    Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade),
                        Back to UserActionResult(previousScene ?: Scenes.Shade),
                        Swipe(SwipeDirection.Up) to UserActionResult(previousScene ?: Scenes.Shade),
                    )
                }
            }
        }

    private val footerActionsControllerInitialized = AtomicBoolean(false)