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

Commit f87d2d91 authored by Danny Burakov's avatar Danny Burakov Committed by Android (Google) Code Review
Browse files

Merge "[Flexiglass] Fix 2-finger swipe on single shade to go to Quick Settings." into main

parents a8d1df7a 0f6fca2c
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -21,13 +21,17 @@ import android.platform.test.annotations.EnableFlags
import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.Edge
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.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.Scenes
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
@@ -92,4 +96,42 @@ class GoneUserActionsViewModelTest : SysuiTestCase() {

            assertThat(userActions?.get(Swipe(SwipeDirection.Down))?.transitionKey).isNull()
        }

    @Test
    @DisableFlags(DualShade.FLAG_NAME)
    fun swipeDownWithTwoFingers_singleShade_goesToQuickSettings() =
        testScope.runTest {
            val userActions by collectLastValue(underTest.actions)
            shadeRepository.setShadeLayoutWide(false)
            runCurrent()

            assertThat(userActions?.get(swipeDownFromTopWithTwoFingers()))
                .isEqualTo(UserActionResult(Scenes.QuickSettings))
        }

    @Test
    @DisableFlags(DualShade.FLAG_NAME)
    fun swipeDownWithTwoFingers_splitShade_goesToShade() =
        testScope.runTest {
            val userActions by collectLastValue(underTest.actions)
            shadeRepository.setShadeLayoutWide(true)
            runCurrent()

            assertThat(userActions?.get(swipeDownFromTopWithTwoFingers()))
                .isEqualTo(UserActionResult(Scenes.Shade, ToSplitShade))
        }

    @Test
    @EnableFlags(DualShade.FLAG_NAME)
    fun swipeDownWithTwoFingers_dualShadeEnabled_isNull() =
        testScope.runTest {
            val userActions by collectLastValue(underTest.actions)
            runCurrent()

            assertThat(userActions?.get(swipeDownFromTopWithTwoFingers())).isNull()
        }

    private fun swipeDownFromTopWithTwoFingers(): UserAction {
        return Swipe(direction = SwipeDirection.Down, pointerCount = 2, fromSource = Edge.Top)
    }
}
+16 −9
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.scene.ui.viewmodel
import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.SwipeDirection
import com.android.compose.animation.scene.TransitionKey
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.scene.shared.model.Overlays
@@ -38,21 +37,25 @@ constructor(private val shadeInteractor: ShadeInteractor) : UserActionsViewModel
        shadeInteractor.shadeMode.collect { shadeMode ->
            setActions(
                when (shadeMode) {
                    ShadeMode.Single -> fullscreenShadeActions()
                    ShadeMode.Split -> fullscreenShadeActions(transitionKey = ToSplitShade)
                    ShadeMode.Single -> singleShadeActions()
                    ShadeMode.Split -> splitShadeActions()
                    ShadeMode.Dual -> dualShadeActions()
                }
            )
        }
    }

    private fun fullscreenShadeActions(
        transitionKey: TransitionKey? = null
    ): Map<UserAction, UserActionResult> {
    private fun singleShadeActions(): Map<UserAction, UserActionResult> {
        return mapOf(
            Swipe.Down to UserActionResult(Scenes.Shade, transitionKey),
            Swipe(direction = SwipeDirection.Down, pointerCount = 2, fromSource = Edge.Top) to
                UserActionResult(Scenes.Shade, transitionKey),
            Swipe.Down to Scenes.Shade,
            swipeDownFromTopWithTwoFingers() to Scenes.QuickSettings,
        )
    }

    private fun splitShadeActions(): Map<UserAction, UserActionResult> {
        return mapOf(
            Swipe.Down to UserActionResult(Scenes.Shade, ToSplitShade),
            swipeDownFromTopWithTwoFingers() to UserActionResult(Scenes.Shade, ToSplitShade),
        )
    }

@@ -64,6 +67,10 @@ constructor(private val shadeInteractor: ShadeInteractor) : UserActionsViewModel
        )
    }

    private fun swipeDownFromTopWithTwoFingers(): UserAction {
        return Swipe(direction = SwipeDirection.Down, pointerCount = 2, fromSource = Edge.Top)
    }

    @AssistedFactory
    interface Factory {
        fun create(): GoneUserActionsViewModel