Loading packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizerTest.kt +33 −8 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ 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.GestureDirection.LEFT import com.android.systemui.touchpad.tutorial.ui.gesture.GestureDirection.RIGHT 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 Loading Loading @@ -61,23 +63,46 @@ class BackGestureRecognizerTest : SysuiTestCase() { } @Test fun triggersProgressRelativeToDistance() { assertProgressWhileMovingFingers(deltaX = -SWIPE_DISTANCE / 2, expectedProgress = 0.5f) assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE / 2, expectedProgress = 0.5f) assertProgressWhileMovingFingers(deltaX = -SWIPE_DISTANCE, expectedProgress = 1f) assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE, expectedProgress = 1f) fun triggersProgressRelativeToDistanceWhenSwipingLeft() { assertProgressWhileMovingFingers( deltaX = -SWIPE_DISTANCE / 2, expected = InProgress(progress = 0.5f, direction = LEFT), ) assertProgressWhileMovingFingers( deltaX = -SWIPE_DISTANCE, expected = InProgress(progress = 1f, direction = LEFT), ) } private fun assertProgressWhileMovingFingers(deltaX: Float, expectedProgress: Float) { @Test fun triggersProgressRelativeToDistanceWhenSwipingRight() { assertProgressWhileMovingFingers( deltaX = SWIPE_DISTANCE / 2, expected = InProgress(progress = 0.5f, direction = RIGHT), ) assertProgressWhileMovingFingers( deltaX = SWIPE_DISTANCE, expected = InProgress(progress = 1f, direction = RIGHT), ) } private fun assertProgressWhileMovingFingers(deltaX: Float, expected: InProgress) { assertStateAfterEvents( events = ThreeFingerGesture.eventsForGestureInProgress { move(deltaX = deltaX) }, expectedState = InProgress(progress = expectedProgress), expectedState = expected, ) } @Test fun triggeredProgressIsNoBiggerThanOne() { assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE * 2, expectedProgress = 1f) assertProgressWhileMovingFingers( deltaX = SWIPE_DISTANCE * 2, expected = InProgress(progress = 1f, direction = RIGHT), ) assertProgressWhileMovingFingers( deltaX = -SWIPE_DISTANCE * 2, expected = InProgress(progress = 1f, direction = LEFT), ) } @Test Loading packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizer.kt +10 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.systemui.touchpad.tutorial.ui.gesture import android.util.MathUtils import android.view.MotionEvent import com.android.systemui.touchpad.tutorial.ui.gesture.GestureDirection.LEFT import com.android.systemui.touchpad.tutorial.ui.gesture.GestureDirection.RIGHT import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.InProgress import kotlin.math.abs /** Loading @@ -44,7 +47,13 @@ class BackGestureRecognizer(private val gestureDistanceThresholdPx: Int) : Gestu gestureStateChangedCallback, gestureState, isFinished = { abs(it.deltaX) >= gestureDistanceThresholdPx }, progress = { MathUtils.saturate(abs(it.deltaX / gestureDistanceThresholdPx)) }, progress = ::getProgress, ) } private fun getProgress(it: Moving): InProgress { val direction = if (it.deltaX > 0) RIGHT else LEFT val value = MathUtils.saturate(abs(it.deltaX / gestureDistanceThresholdPx)) return InProgress(value, direction) } } packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureState.kt +7 −1 Original line number Diff line number Diff line Loading @@ -21,5 +21,11 @@ sealed interface GestureState { data object Finished : GestureState data class InProgress(val progress: Float = 0f) : GestureState data class InProgress(val progress: Float = 0f, val direction: GestureDirection? = null) : GestureState } enum class GestureDirection { LEFT, RIGHT, } packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureStateUpdates.kt +2 −2 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ inline fun updateGestureState( gestureStateChangedCallback: (GestureState) -> Unit, gestureState: DistanceGestureState?, isFinished: (Finished) -> Boolean, progress: (Moving) -> Float, progress: (Moving) -> GestureState.InProgress, ) { when (gestureState) { is Finished -> { Loading @@ -32,7 +32,7 @@ inline fun updateGestureState( } } is Moving -> { gestureStateChangedCallback(GestureState.InProgress(progress(gestureState))) gestureStateChangedCallback(progress(gestureState)) } is Started -> gestureStateChangedCallback(GestureState.InProgress()) else -> {} Loading packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizer.kt +2 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.touchpad.tutorial.ui.gesture import android.util.MathUtils import android.view.MotionEvent import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.InProgress /** Recognizes touchpad home gesture, that is - using three fingers on touchpad - swiping up. */ class HomeGestureRecognizer(private val gestureDistanceThresholdPx: Int) : GestureRecognizer { Loading @@ -40,7 +41,7 @@ class HomeGestureRecognizer(private val gestureDistanceThresholdPx: Int) : Gestu gestureStateChangedCallback, gestureState, isFinished = { -it.deltaY >= gestureDistanceThresholdPx }, progress = { MathUtils.saturate(-it.deltaY / gestureDistanceThresholdPx) }, progress = { InProgress(MathUtils.saturate(-it.deltaY / gestureDistanceThresholdPx)) }, ) } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizerTest.kt +33 −8 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ 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.GestureDirection.LEFT import com.android.systemui.touchpad.tutorial.ui.gesture.GestureDirection.RIGHT 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 Loading Loading @@ -61,23 +63,46 @@ class BackGestureRecognizerTest : SysuiTestCase() { } @Test fun triggersProgressRelativeToDistance() { assertProgressWhileMovingFingers(deltaX = -SWIPE_DISTANCE / 2, expectedProgress = 0.5f) assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE / 2, expectedProgress = 0.5f) assertProgressWhileMovingFingers(deltaX = -SWIPE_DISTANCE, expectedProgress = 1f) assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE, expectedProgress = 1f) fun triggersProgressRelativeToDistanceWhenSwipingLeft() { assertProgressWhileMovingFingers( deltaX = -SWIPE_DISTANCE / 2, expected = InProgress(progress = 0.5f, direction = LEFT), ) assertProgressWhileMovingFingers( deltaX = -SWIPE_DISTANCE, expected = InProgress(progress = 1f, direction = LEFT), ) } private fun assertProgressWhileMovingFingers(deltaX: Float, expectedProgress: Float) { @Test fun triggersProgressRelativeToDistanceWhenSwipingRight() { assertProgressWhileMovingFingers( deltaX = SWIPE_DISTANCE / 2, expected = InProgress(progress = 0.5f, direction = RIGHT), ) assertProgressWhileMovingFingers( deltaX = SWIPE_DISTANCE, expected = InProgress(progress = 1f, direction = RIGHT), ) } private fun assertProgressWhileMovingFingers(deltaX: Float, expected: InProgress) { assertStateAfterEvents( events = ThreeFingerGesture.eventsForGestureInProgress { move(deltaX = deltaX) }, expectedState = InProgress(progress = expectedProgress), expectedState = expected, ) } @Test fun triggeredProgressIsNoBiggerThanOne() { assertProgressWhileMovingFingers(deltaX = SWIPE_DISTANCE * 2, expectedProgress = 1f) assertProgressWhileMovingFingers( deltaX = SWIPE_DISTANCE * 2, expected = InProgress(progress = 1f, direction = RIGHT), ) assertProgressWhileMovingFingers( deltaX = -SWIPE_DISTANCE * 2, expected = InProgress(progress = 1f, direction = LEFT), ) } @Test Loading
packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/BackGestureRecognizer.kt +10 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.systemui.touchpad.tutorial.ui.gesture import android.util.MathUtils import android.view.MotionEvent import com.android.systemui.touchpad.tutorial.ui.gesture.GestureDirection.LEFT import com.android.systemui.touchpad.tutorial.ui.gesture.GestureDirection.RIGHT import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.InProgress import kotlin.math.abs /** Loading @@ -44,7 +47,13 @@ class BackGestureRecognizer(private val gestureDistanceThresholdPx: Int) : Gestu gestureStateChangedCallback, gestureState, isFinished = { abs(it.deltaX) >= gestureDistanceThresholdPx }, progress = { MathUtils.saturate(abs(it.deltaX / gestureDistanceThresholdPx)) }, progress = ::getProgress, ) } private fun getProgress(it: Moving): InProgress { val direction = if (it.deltaX > 0) RIGHT else LEFT val value = MathUtils.saturate(abs(it.deltaX / gestureDistanceThresholdPx)) return InProgress(value, direction) } }
packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureState.kt +7 −1 Original line number Diff line number Diff line Loading @@ -21,5 +21,11 @@ sealed interface GestureState { data object Finished : GestureState data class InProgress(val progress: Float = 0f) : GestureState data class InProgress(val progress: Float = 0f, val direction: GestureDirection? = null) : GestureState } enum class GestureDirection { LEFT, RIGHT, }
packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/GestureStateUpdates.kt +2 −2 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ inline fun updateGestureState( gestureStateChangedCallback: (GestureState) -> Unit, gestureState: DistanceGestureState?, isFinished: (Finished) -> Boolean, progress: (Moving) -> Float, progress: (Moving) -> GestureState.InProgress, ) { when (gestureState) { is Finished -> { Loading @@ -32,7 +32,7 @@ inline fun updateGestureState( } } is Moving -> { gestureStateChangedCallback(GestureState.InProgress(progress(gestureState))) gestureStateChangedCallback(progress(gestureState)) } is Started -> gestureStateChangedCallback(GestureState.InProgress()) else -> {} Loading
packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/gesture/HomeGestureRecognizer.kt +2 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.touchpad.tutorial.ui.gesture import android.util.MathUtils import android.view.MotionEvent import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState.InProgress /** Recognizes touchpad home gesture, that is - using three fingers on touchpad - swiping up. */ class HomeGestureRecognizer(private val gestureDistanceThresholdPx: Int) : GestureRecognizer { Loading @@ -40,7 +41,7 @@ class HomeGestureRecognizer(private val gestureDistanceThresholdPx: Int) : Gestu gestureStateChangedCallback, gestureState, isFinished = { -it.deltaY >= gestureDistanceThresholdPx }, progress = { MathUtils.saturate(-it.deltaY / gestureDistanceThresholdPx) }, progress = { InProgress(MathUtils.saturate(-it.deltaY / gestureDistanceThresholdPx)) }, ) } }