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

Commit 5c4e6576 authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Using success animation from state instead of configuration

For back gesture we need runtime-provided success animation.
Removing success animation from config - it's no longer needed there.

Bug: 369817369
Test: still only refactoring
Flag: com.android.systemui.shared.new_touchpad_gestures_tutorial
Change-Id: Idcb1e10b79a63dbc65f6bf10e8b7581ccf6703d2
parent 3b282f6a
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ fun ActionKeyTutorialScreen(onDoneButtonClicked: () -> Unit, onBack: () -> Unit)
            Modifier.fillMaxSize()
                .onKeyEvent { keyEvent: KeyEvent ->
                    if (keyEvent.key == Key.MetaLeft && keyEvent.type == KeyEventType.KeyUp) {
                        actionState = Finished
                        actionState = Finished(R.raw.action_key_success)
                    }
                    true
                }
@@ -80,11 +80,7 @@ private fun buildScreenConfig() =
                titleSuccessResId = R.string.tutorial_action_key_success_title,
                bodySuccessResId = R.string.tutorial_action_key_success_body,
            ),
        animations =
            TutorialScreenConfig.Animations(
                educationResId = R.raw.action_key_edu,
                successResId = R.raw.action_key_success,
            ),
        animations = TutorialScreenConfig.Animations(educationResId = R.raw.action_key_edu),
    )

@Composable
+5 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.inputdevice.tutorial.ui.composable

import androidx.annotation.RawRes
import androidx.annotation.StringRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeIn
@@ -48,7 +49,7 @@ sealed interface TutorialActionState {
        val endMarker: String? = null,
    ) : TutorialActionState

    data object Finished : TutorialActionState
    data class Finished(@RawRes val successAnimation: Int) : TutorialActionState
}

@Composable
@@ -68,11 +69,11 @@ fun ActionTutorialContent(
        Row(modifier = Modifier.fillMaxWidth().weight(1f)) {
            TutorialDescription(
                titleTextId =
                    if (actionState == Finished) config.strings.titleSuccessResId
                    if (actionState is Finished) config.strings.titleSuccessResId
                    else config.strings.titleResId,
                titleColor = config.colors.title,
                bodyTextId =
                    if (actionState == Finished) config.strings.bodySuccessResId
                    if (actionState is Finished) config.strings.bodySuccessResId
                    else config.strings.bodyResId,
                modifier = Modifier.weight(1f),
            )
@@ -83,7 +84,7 @@ fun ActionTutorialContent(
                modifier = Modifier.weight(1f).padding(top = 8.dp),
            )
        }
        AnimatedVisibility(visible = actionState == Finished, enter = fadeIn()) {
        AnimatedVisibility(visible = actionState is Finished, enter = fadeIn()) {
            DoneButton(onDoneButtonClicked = onDoneButtonClicked)
        }
    }
+6 −3
Original line number Diff line number Diff line
@@ -77,7 +77,9 @@ fun TutorialAnimation(
                        config.colors.animationColors,
                    )
                Finished::class ->
                    SuccessAnimation(config.animations.successResId, config.colors.animationColors)
                    // Below cast is safe as Finished state is the last state and afterwards we can
                    // only leave the screen so this composable would be no longer displayed
                    SuccessAnimation(actionState as Finished, config.colors.animationColors)
            }
        }
    }
@@ -100,10 +102,11 @@ private fun EducationAnimation(

@Composable
private fun SuccessAnimation(
    @RawRes successAnimationId: Int,
    finishedState: Finished,
    animationProperties: LottieDynamicProperties,
) {
    val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(successAnimationId))
    val composition by
        rememberLottieComposition(LottieCompositionSpec.RawRes(finishedState.successAnimation))
    val progress by animateLottieCompositionAsState(composition, iterations = 1)
    LottieAnimation(
        composition = composition,
+3 −6
Original line number Diff line number Diff line
@@ -24,13 +24,13 @@ import com.airbnb.lottie.compose.LottieDynamicProperties
data class TutorialScreenConfig(
    val colors: Colors,
    val strings: Strings,
    val animations: Animations
    val animations: Animations,
) {

    data class Colors(
        val background: Color,
        val title: Color,
        val animationColors: LottieDynamicProperties
        val animationColors: LottieDynamicProperties,
    )

    data class Strings(
@@ -40,8 +40,5 @@ data class TutorialScreenConfig(
        @StringRes val bodySuccessResId: Int,
    )

    data class Animations(
        @RawRes val educationResId: Int,
        @RawRes val successResId: Int,
    )
    data class Animations(@RawRes val educationResId: Int)
}
+1 −5
Original line number Diff line number Diff line
@@ -44,11 +44,7 @@ fun BackGestureTutorialScreen(onDoneButtonClicked: () -> Unit, onBack: () -> Uni
                    titleSuccessResId = R.string.touchpad_back_gesture_success_title,
                    bodySuccessResId = R.string.touchpad_back_gesture_success_body,
                ),
            animations =
                TutorialScreenConfig.Animations(
                    educationResId = R.raw.trackpad_back_edu,
                    successResId = R.raw.trackpad_back_success,
                ),
            animations = TutorialScreenConfig.Animations(educationResId = R.raw.trackpad_back_edu),
        )
    val recognizer = rememberBackGestureRecognizer(LocalContext.current.resources)
    val gestureUiState: Flow<GestureUiState> =
Loading