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

Commit b0d339f5 authored by Michał Brzeziński's avatar Michał Brzeziński Committed by Android (Google) Code Review
Browse files

Merge "Changing GestureState to sealed classes instead of enums" into main

parents e4a34009 88dcc78c
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -20,9 +20,9 @@ import android.view.MotionEvent
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.FINISHED
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.IN_PROGRESS
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.NOT_STARTED
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.Finished
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.InProgress
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.NotStarted
import com.android.systemui.touchpad.tutorial.ui.gesture.MultiFingerGesture.Companion.SWIPE_DISTANCE
import com.google.common.truth.Truth.assertThat
import org.junit.Test
@@ -32,28 +32,28 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class BackGestureMonitorTest : SysuiTestCase() {

    private var gestureState = NOT_STARTED
    private var gestureState: GestureState = NotStarted
    private val gestureMonitor =
        BackGestureMonitor(
            gestureDistanceThresholdPx = SWIPE_DISTANCE.toInt(),
            gestureStateChangedCallback = { gestureState = it }
            gestureStateChangedCallback = { gestureState = it },
        )

    @Test
    fun triggersGestureFinishedForThreeFingerGestureRight() {
        assertStateAfterEvents(events = ThreeFingerGesture.swipeRight(), expectedState = FINISHED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeRight(), expectedState = Finished)
    }

    @Test
    fun triggersGestureFinishedForThreeFingerGestureLeft() {
        assertStateAfterEvents(events = ThreeFingerGesture.swipeLeft(), expectedState = FINISHED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeLeft(), expectedState = Finished)
    }

    @Test
    fun triggersGestureProgressForThreeFingerGestureStarted() {
        assertStateAfterEvents(
            events = ThreeFingerGesture.startEvents(x = 0f, y = 0f),
            expectedState = IN_PROGRESS
            expectedState = InProgress(),
        )
    }

@@ -61,24 +61,24 @@ class BackGestureMonitorTest : SysuiTestCase() {
    fun doesntTriggerGestureFinished_onGestureDistanceTooShort() {
        assertStateAfterEvents(
            events = ThreeFingerGesture.swipeLeft(distancePx = SWIPE_DISTANCE / 2),
            expectedState = NOT_STARTED
            expectedState = NotStarted,
        )
    }

    @Test
    fun doesntTriggerGestureFinished_onThreeFingersSwipeInOtherDirections() {
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeDown(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = NotStarted)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeDown(), expectedState = NotStarted)
    }

    @Test
    fun doesntTriggerGestureFinished_onTwoFingersSwipe() {
        assertStateAfterEvents(events = TwoFingerGesture.swipeRight(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = TwoFingerGesture.swipeRight(), expectedState = NotStarted)
    }

    @Test
    fun doesntTriggerGestureFinished_onFourFingersSwipe() {
        assertStateAfterEvents(events = FourFingerGesture.swipeRight(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = FourFingerGesture.swipeRight(), expectedState = NotStarted)
    }

    private fun assertStateAfterEvents(events: List<MotionEvent>, expectedState: GestureState) {
+13 −16
Original line number Diff line number Diff line
@@ -20,9 +20,9 @@ import android.view.MotionEvent
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.FINISHED
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.IN_PROGRESS
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.NOT_STARTED
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.Finished
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.InProgress
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.NotStarted
import com.android.systemui.touchpad.tutorial.ui.gesture.MultiFingerGesture.Companion.SWIPE_DISTANCE
import com.google.common.truth.Truth.assertThat
import org.junit.Test
@@ -32,23 +32,23 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class HomeGestureMonitorTest : SysuiTestCase() {

    private var gestureState = NOT_STARTED
    private var gestureState: GestureState = GestureState.NotStarted
    private val gestureMonitor =
        HomeGestureMonitor(
            gestureDistanceThresholdPx = SWIPE_DISTANCE.toInt(),
            gestureStateChangedCallback = { gestureState = it }
            gestureStateChangedCallback = { gestureState = it },
        )

    @Test
    fun triggersGestureFinishedForThreeFingerGestureUp() {
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = FINISHED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = Finished)
    }

    @Test
    fun triggersGestureProgressForThreeFingerGestureStarted() {
        assertStateAfterEvents(
            events = ThreeFingerGesture.startEvents(x = 0f, y = 0f),
            expectedState = IN_PROGRESS
            expectedState = InProgress(),
        )
    }

@@ -56,28 +56,25 @@ class HomeGestureMonitorTest : SysuiTestCase() {
    fun doesntTriggerGestureFinished_onGestureDistanceTooShort() {
        assertStateAfterEvents(
            events = ThreeFingerGesture.swipeUp(distancePx = SWIPE_DISTANCE / 2),
            expectedState = NOT_STARTED
            expectedState = NotStarted,
        )
    }

    @Test
    fun doesntTriggerGestureFinished_onThreeFingersSwipeInOtherDirections() {
        assertStateAfterEvents(events = ThreeFingerGesture.swipeDown(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeLeft(), expectedState = NOT_STARTED)
        assertStateAfterEvents(
            events = ThreeFingerGesture.swipeRight(),
            expectedState = NOT_STARTED
        )
        assertStateAfterEvents(events = ThreeFingerGesture.swipeDown(), expectedState = NotStarted)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeLeft(), expectedState = NotStarted)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeRight(), expectedState = NotStarted)
    }

    @Test
    fun doesntTriggerGestureFinished_onTwoFingersSwipe() {
        assertStateAfterEvents(events = TwoFingerGesture.swipeUp(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = TwoFingerGesture.swipeUp(), expectedState = NotStarted)
    }

    @Test
    fun doesntTriggerGestureFinished_onFourFingersSwipe() {
        assertStateAfterEvents(events = FourFingerGesture.swipeUp(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = FourFingerGesture.swipeUp(), expectedState = NotStarted)
    }

    private fun assertStateAfterEvents(events: List<MotionEvent>, expectedState: GestureState) {
+14 −17
Original line number Diff line number Diff line
@@ -21,9 +21,9 @@ import androidx.compose.ui.input.pointer.util.VelocityTracker1D
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.FINISHED
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.IN_PROGRESS
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.NOT_STARTED
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.Finished
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.InProgress
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.NotStarted
import com.android.systemui.touchpad.tutorial.ui.gesture.MultiFingerGesture.Companion.SWIPE_DISTANCE
import com.google.common.truth.Truth.assertThat
import org.junit.Test
@@ -43,7 +43,7 @@ class RecentAppsGestureMonitorTest : SysuiTestCase() {
        const val FAST = THRESHOLD_VELOCITY_PX_PER_MS * 1000 + 1
    }

    private var gestureState = NOT_STARTED
    private var gestureState: GestureState = GestureState.NotStarted
    private val velocityTracker =
        mock<VelocityTracker1D> {
            // by default return correct speed for the gesture - as if pointer is slowing down
@@ -54,25 +54,25 @@ class RecentAppsGestureMonitorTest : SysuiTestCase() {
            gestureDistanceThresholdPx = SWIPE_DISTANCE.toInt(),
            gestureStateChangedCallback = { gestureState = it },
            velocityThresholdPxPerMs = THRESHOLD_VELOCITY_PX_PER_MS,
            velocityTracker = velocityTracker
            velocityTracker = velocityTracker,
        )

    @Test
    fun triggersGestureFinishedForThreeFingerGestureUp() {
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = FINISHED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = Finished)
    }

    @Test
    fun doesntTriggerGestureFinished_onGestureSpeedTooHigh() {
        whenever(velocityTracker.calculateVelocity()).thenReturn(FAST)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeUp(), expectedState = NotStarted)
    }

    @Test
    fun triggersGestureProgressForThreeFingerGestureStarted() {
        assertStateAfterEvents(
            events = ThreeFingerGesture.startEvents(x = 0f, y = 0f),
            expectedState = IN_PROGRESS
            expectedState = InProgress(),
        )
    }

@@ -80,28 +80,25 @@ class RecentAppsGestureMonitorTest : SysuiTestCase() {
    fun doesntTriggerGestureFinished_onGestureDistanceTooShort() {
        assertStateAfterEvents(
            events = ThreeFingerGesture.swipeUp(distancePx = SWIPE_DISTANCE / 2),
            expectedState = NOT_STARTED
            expectedState = NotStarted,
        )
    }

    @Test
    fun doesntTriggerGestureFinished_onThreeFingersSwipeInOtherDirections() {
        assertStateAfterEvents(events = ThreeFingerGesture.swipeDown(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeLeft(), expectedState = NOT_STARTED)
        assertStateAfterEvents(
            events = ThreeFingerGesture.swipeRight(),
            expectedState = NOT_STARTED
        )
        assertStateAfterEvents(events = ThreeFingerGesture.swipeDown(), expectedState = NotStarted)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeLeft(), expectedState = NotStarted)
        assertStateAfterEvents(events = ThreeFingerGesture.swipeRight(), expectedState = NotStarted)
    }

    @Test
    fun doesntTriggerGestureFinished_onTwoFingersSwipe() {
        assertStateAfterEvents(events = TwoFingerGesture.swipeUp(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = TwoFingerGesture.swipeUp(), expectedState = NotStarted)
    }

    @Test
    fun doesntTriggerGestureFinished_onFourFingersSwipe() {
        assertStateAfterEvents(events = FourFingerGesture.swipeUp(), expectedState = NOT_STARTED)
        assertStateAfterEvents(events = FourFingerGesture.swipeUp(), expectedState = NotStarted)
    }

    private fun assertStateAfterEvents(events: List<MotionEvent>, expectedState: GestureState) {
+2 −4
Original line number Diff line number Diff line
@@ -25,8 +25,6 @@ import android.view.MotionEvent.TOOL_TYPE_MOUSE
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.FINISHED
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.NOT_STARTED
import com.android.systemui.touchpad.tutorial.ui.gesture.MultiFingerGesture.Companion.SWIPE_DISTANCE
import com.google.common.truth.Truth.assertThat
import org.junit.Test
@@ -36,7 +34,7 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class TouchpadGestureHandlerTest : SysuiTestCase() {

    private var gestureState = NOT_STARTED
    private var gestureState: GestureState = GestureState.NotStarted
    private val handler =
        TouchpadGestureHandler(
            BackGestureMonitor(
@@ -82,7 +80,7 @@ class TouchpadGestureHandlerTest : SysuiTestCase() {
    fun triggersGestureDoneForThreeFingerGesture() {
        backGestureEvents().forEach { handler.onMotionEvent(it) }

        assertThat(gestureState).isEqualTo(FINISHED)
        assertThat(gestureState).isEqualTo(GestureState.Finished)
    }

    private fun backGestureEvents(): List<MotionEvent> {
+9 −12
Original line number Diff line number Diff line
@@ -37,25 +37,22 @@ import androidx.compose.ui.input.key.onKeyEvent
import androidx.compose.ui.input.key.type
import com.airbnb.lottie.compose.rememberLottieDynamicProperties
import com.android.compose.theme.LocalAndroidColorScheme
import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.FINISHED
import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.NOT_STARTED
import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.Finished
import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.NotStarted
import com.android.systemui.res.R

@Composable
fun ActionKeyTutorialScreen(
    onDoneButtonClicked: () -> Unit,
    onBack: () -> Unit,
) {
fun ActionKeyTutorialScreen(onDoneButtonClicked: () -> Unit, onBack: () -> Unit) {
    BackHandler(onBack = onBack)
    val screenConfig = buildScreenConfig()
    var actionState by remember { mutableStateOf(NOT_STARTED) }
    var actionState: TutorialActionState by remember { mutableStateOf(NotStarted) }
    val focusRequester = remember { FocusRequester() }
    Box(
        modifier =
            Modifier.fillMaxSize()
                .onKeyEvent { keyEvent: KeyEvent ->
                    if (keyEvent.key == Key.MetaLeft && keyEvent.type == KeyEventType.KeyUp) {
                        actionState = FINISHED
                        actionState = Finished
                    }
                    true
                }
@@ -81,13 +78,13 @@ private fun buildScreenConfig() =
                titleResId = R.string.tutorial_action_key_title,
                bodyResId = R.string.tutorial_action_key_guidance,
                titleSuccessResId = R.string.tutorial_action_key_success_title,
                bodySuccessResId = R.string.tutorial_action_key_success_body
                bodySuccessResId = R.string.tutorial_action_key_success_body,
            ),
        animations =
            TutorialScreenConfig.Animations(
                educationResId = R.raw.action_key_edu,
                successResId = R.raw.action_key_success
            )
                successResId = R.raw.action_key_success,
            ),
    )

@Composable
@@ -101,7 +98,7 @@ private fun rememberScreenColors(): TutorialScreenConfig.Colors {
            rememberColorFilterProperty(".primaryFixedDim", primaryFixedDim),
            rememberColorFilterProperty(".secondaryFixedDim", secondaryFixedDim),
            rememberColorFilterProperty(".onSecondaryFixed", onSecondaryFixed),
            rememberColorFilterProperty(".onSecondaryFixedVariant", onSecondaryFixedVariant)
            rememberColorFilterProperty(".onSecondaryFixedVariant", onSecondaryFixedVariant),
        )
    val screenColors =
        remember(dynamicProperties) {
Loading