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

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

Merge "Using success animation from state instead of configuration" into main

parents 7ea80e58 5c4e6576
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