Changing GestureState to sealed classes instead of enums
First phase of introducing live tracking of gestures.
Moving GestureState to classes is required because InProgress will include current progress.
Bug: 369817369
Test: Only small refactoring, code compiles and tests pass
Flag: com.android.systemui.shared.new_touchpad_gestures_tutorial
Change-Id: I5d7858c3c1a0fe51588eb1933a0171c1e79fccb3
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureMonitorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureMonitorTest.kt
index 9064f7c..ba9fa92 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureMonitorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureMonitorTest.kt
@@ -20,9 +20,9 @@
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 @@
@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 @@
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) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureMonitorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureMonitorTest.kt
index 6aefbe9..59cc026 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureMonitorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureMonitorTest.kt
@@ -20,9 +20,9 @@
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 @@
@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 @@
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) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitorTest.kt
index d059c14..7eac6bb 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitorTest.kt
@@ -21,9 +21,9 @@
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 @@
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 @@
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 @@
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) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt
index 466ddbe..4d26366 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/TouchpadGestureHandlerTest.kt
@@ -25,8 +25,6 @@
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 @@
@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 @@
fun triggersGestureDoneForThreeFingerGesture() {
backGestureEvents().forEach { handler.onMotionEvent(it) }
- assertThat(gestureState).isEqualTo(FINISHED)
+ assertThat(gestureState).isEqualTo(GestureState.Finished)
}
private fun backGestureEvents(): List<MotionEvent> {
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionKeyTutorialScreen.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionKeyTutorialScreen.kt
index 1aa5ee0..4142be3 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionKeyTutorialScreen.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionKeyTutorialScreen.kt
@@ -37,25 +37,22 @@
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 @@
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 @@
rememberColorFilterProperty(".primaryFixedDim", primaryFixedDim),
rememberColorFilterProperty(".secondaryFixedDim", secondaryFixedDim),
rememberColorFilterProperty(".onSecondaryFixed", onSecondaryFixed),
- rememberColorFilterProperty(".onSecondaryFixedVariant", onSecondaryFixedVariant)
+ rememberColorFilterProperty(".onSecondaryFixedVariant", onSecondaryFixedVariant),
)
val screenColors =
remember(dynamicProperties) {
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt
index f32c94b..73975a0 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt
@@ -61,15 +61,16 @@
import com.airbnb.lottie.compose.animateLottieCompositionAsState
import com.airbnb.lottie.compose.rememberLottieComposition
import com.airbnb.lottie.compose.rememberLottieDynamicProperty
-import com.android.compose.modifiers.background
-import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.FINISHED
-import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.IN_PROGRESS
-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.InProgress
+import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.NotStarted
-enum class TutorialActionState {
- NOT_STARTED,
- IN_PROGRESS,
- FINISHED,
+sealed interface TutorialActionState {
+ data object NotStarted : TutorialActionState
+
+ data class InProgress(val progress: Float = 0f) : TutorialActionState
+
+ data object Finished : TutorialActionState
}
@Composable
@@ -89,11 +90,11 @@
Row(modifier = Modifier.fillMaxWidth().weight(1f)) {
TutorialDescription(
titleTextId =
- if (actionState == FINISHED) config.strings.titleSuccessResId
+ if (actionState == Finished) config.strings.titleSuccessResId
else config.strings.titleResId,
titleColor = config.colors.title,
bodyTextId =
- if (actionState == FINISHED) config.strings.bodySuccessResId
+ if (actionState == Finished) config.strings.bodySuccessResId
else config.strings.bodyResId,
modifier = Modifier.weight(1f),
)
@@ -104,7 +105,7 @@
modifier = Modifier.weight(1f).padding(top = 8.dp),
)
}
- AnimatedVisibility(visible = actionState == FINISHED, enter = fadeIn()) {
+ AnimatedVisibility(visible = actionState == Finished, enter = fadeIn()) {
DoneButton(onDoneButtonClicked = onDoneButtonClicked)
}
}
@@ -142,7 +143,7 @@
AnimatedContent(
targetState = actionState,
transitionSpec = {
- if (initialState == NOT_STARTED) {
+ if (initialState == NotStarted) {
val transitionDurationMillis = 150
fadeIn(animationSpec = tween(transitionDurationMillis, easing = LinearEasing))
.togetherWith(
@@ -160,17 +161,17 @@
},
) { state ->
when (state) {
- NOT_STARTED ->
+ NotStarted ->
EducationAnimation(
config.animations.educationResId,
config.colors.animationColors,
)
- IN_PROGRESS ->
+ is InProgress ->
FrozenSuccessAnimation(
config.animations.successResId,
config.colors.animationColors,
)
- FINISHED ->
+ Finished ->
SuccessAnimation(config.animations.successResId, config.colors.animationColors)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt
index e1b89da..72389cd 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt
@@ -38,9 +38,9 @@
import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialScreenConfig
import com.android.systemui.touchpad.tutorial.ui.gesture.EasterEggGestureMonitor
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState
-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.TouchpadGestureHandler
import com.android.systemui.touchpad.tutorial.ui.gesture.TouchpadGestureMonitor
@@ -76,9 +76,9 @@
fun GestureState.toTutorialActionState(): TutorialActionState {
return when (this) {
- NOT_STARTED -> TutorialActionState.NOT_STARTED
- IN_PROGRESS -> TutorialActionState.IN_PROGRESS
- FINISHED -> TutorialActionState.FINISHED
+ NotStarted -> TutorialActionState.NotStarted
+ is InProgress -> TutorialActionState.InProgress()
+ Finished -> TutorialActionState.Finished
}
}
@@ -90,7 +90,7 @@
onBack: () -> Unit,
) {
BackHandler(onBack = onBack)
- var gestureState by remember { mutableStateOf(NOT_STARTED) }
+ var gestureState: GestureState by remember { mutableStateOf(NotStarted) }
var easterEggTriggered by remember { mutableStateOf(false) }
val gestureMonitor =
gestureMonitorProvider.rememberGestureMonitor(
@@ -143,7 +143,7 @@
.pointerInteropFilter(
onTouchEvent = { event ->
// FINISHED is the final state so we don't need to process touches anymore
- if (gestureState == FINISHED) {
+ if (gestureState == Finished) {
false
} else {
gestureHandler.onMotionEvent(event)
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureState.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureState.kt
index 446875a..b513c49 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureState.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureState.kt
@@ -16,8 +16,10 @@
package com.android.systemui.touchpad.tutorial.ui.gesture
-enum class GestureState {
- NOT_STARTED,
- IN_PROGRESS,
- FINISHED
+sealed interface GestureState {
+ data object NotStarted : GestureState
+
+ data object Finished : GestureState
+
+ data class InProgress(val progress: Float = 0f) : GestureState
}
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitor.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitor.kt
index 5828239..ca3880a 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitor.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/RecentAppsGestureMonitor.kt
@@ -43,14 +43,14 @@
if (isThreeFingerTouchpadSwipe(event)) {
xStart = event.x
yStart = event.y
- gestureStateChangedCallback(GestureState.IN_PROGRESS)
+ gestureStateChangedCallback(GestureState.InProgress())
}
}
MotionEvent.ACTION_UP -> {
if (isThreeFingerTouchpadSwipe(event) && isRecentAppsGesture(event)) {
- gestureStateChangedCallback(GestureState.FINISHED)
+ gestureStateChangedCallback(GestureState.Finished)
} else {
- gestureStateChangedCallback(GestureState.NOT_STARTED)
+ gestureStateChangedCallback(GestureState.NotStarted)
}
velocityTracker.resetTracking()
}
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerDistanceBasedGestureMonitor.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerDistanceBasedGestureMonitor.kt
index 9bf0fe9..12bcaea 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerDistanceBasedGestureMonitor.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/ThreeFingerDistanceBasedGestureMonitor.kt
@@ -46,15 +46,15 @@
if (isThreeFingerTouchpadSwipe(event)) {
xStart = event.x
yStart = event.y
- gestureStateChangedCallback(GestureState.IN_PROGRESS)
+ gestureStateChangedCallback(GestureState.InProgress())
}
}
MotionEvent.ACTION_UP -> {
if (isThreeFingerTouchpadSwipe(event)) {
if (donePredicate.wasGestureDone(xStart, yStart, event.x, event.y)) {
- gestureStateChangedCallback(GestureState.FINISHED)
+ gestureStateChangedCallback(GestureState.Finished)
} else {
- gestureStateChangedCallback(GestureState.NOT_STARTED)
+ gestureStateChangedCallback(GestureState.NotStarted)
}
}
}