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

Commit 183a5803 authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Adding live progress tracking for touchpad back gesture

Passing different lottie progress markers and success animation depending on to which side the back swipe was done.

Fixes: 369817369
Test: manual
Flag: com.android.systemui.shared.new_touchpad_gestures_tutorial
Change-Id: Ia427b5015d34a9c7cf4b6ff75eacf893439a44e6
parent db5e8570
Loading
Loading
Loading
Loading
+1 −1

File changed.

Preview size limit exceeded, changes collapsed.

+0 −1

File deleted.

Preview size limit exceeded, changes collapsed.

+1 −0

File added.

Preview size limit exceeded, changes collapsed.

+1 −0

File added.

Preview size limit exceeded, changes collapsed.

+23 −6
Original line number Diff line number Diff line
@@ -27,10 +27,12 @@ import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialScreenCon
import com.android.systemui.inputdevice.tutorial.ui.composable.rememberColorFilterProperty
import com.android.systemui.res.R
import com.android.systemui.touchpad.tutorial.ui.gesture.BackGestureRecognizer
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureDirection
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureFlowAdapter
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureRecognizer
import com.android.systemui.touchpad.tutorial.ui.gesture.GestureState
import com.android.systemui.util.kotlin.pairwiseBy
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

@Composable
fun BackGestureTutorialScreen(onDoneButtonClicked: () -> Unit, onBack: () -> Unit) {
@@ -49,11 +51,14 @@ fun BackGestureTutorialScreen(onDoneButtonClicked: () -> Unit, onBack: () -> Uni
    val recognizer = rememberBackGestureRecognizer(LocalContext.current.resources)
    val gestureUiState: Flow<GestureUiState> =
        remember(recognizer) {
            GestureFlowAdapter(recognizer).gestureStateAsFlow.map {
                it.toGestureUiState(
                    progressStartMarker = "",
                    progressEndMarker = "",
                    successAnimation = R.raw.trackpad_back_success,
            GestureFlowAdapter(recognizer).gestureStateAsFlow.pairwiseBy(GestureState.NotStarted) {
                previous,
                current ->
                val (startMarker, endMarker) = getMarkers(current)
                current.toGestureUiState(
                    progressStartMarker = startMarker,
                    progressEndMarker = endMarker,
                    successAnimation = successAnimation(previous),
                )
            }
        }
@@ -67,6 +72,18 @@ private fun rememberBackGestureRecognizer(resources: Resources): GestureRecogniz
    return remember(distance) { BackGestureRecognizer(distance) }
}

private fun getMarkers(it: GestureState): Pair<String, String> {
    return if (it is GestureState.InProgress && it.direction == GestureDirection.LEFT) {
        "gesture to L" to "end progress L"
    } else "gesture to R" to "end progress R"
}

private fun successAnimation(previous: GestureState): Int {
    return if (previous is GestureState.InProgress && previous.direction == GestureDirection.LEFT) {
        R.raw.trackpad_back_success_left
    } else R.raw.trackpad_back_success_right
}

@Composable
private fun rememberScreenColors(): TutorialScreenConfig.Colors {
    val onTertiary = MaterialTheme.colorScheme.onTertiary