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

Commit c550d284 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix broken "View Recent Apps" visd" into main

parents 3204de1b 61bd9c33
Loading
Loading
Loading
Loading
+41 −19
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -45,11 +46,13 @@ import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.android.compose.windowsizeclass.LocalWindowSizeClass
import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.Error
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.InProgressAfterError
import com.android.systemui.inputdevice.tutorial.ui.composable.TutorialActionState.NotStarted
import com.android.systemui.keyboard.shortcut.ui.composable.hasCompactWindowSize

sealed interface TutorialActionState {
    data object NotStarted : TutorialActionState
@@ -82,18 +85,25 @@ fun ActionTutorialContent(
) {
    Column(
        verticalArrangement = Arrangement.Center,
        modifier =
            Modifier.fillMaxSize()
                .background(config.colors.background)
                .safeDrawingPadding()
                .padding(start = 48.dp, top = 100.dp, end = 48.dp, bottom = 8.dp),
        modifier = Modifier.fillMaxSize().background(config.colors.background).safeDrawingPadding(),
    ) {
        val isCompactWindow = hasCompactWindowSize()
        when (LocalConfiguration.current.orientation) {
            Configuration.ORIENTATION_LANDSCAPE -> {
                HorizontalDescriptionAndAnimation(actionState, config, Modifier.weight(1f))
                HorizontalDescriptionAndAnimation(
                    actionState,
                    config,
                    isCompactWindow,
                    Modifier.weight(1f),
                )
            }
            else -> {
                VerticalDescriptionAndAnimation(actionState, config, Modifier.weight(1f))
                VerticalDescriptionAndAnimation(
                    actionState,
                    config,
                    isCompactWindow,
                    Modifier.weight(1f),
                )
            }
        }
        val buttonAlpha by animateFloatAsState(if (actionState is Finished) 1f else 0f)
@@ -109,11 +119,15 @@ fun ActionTutorialContent(
private fun HorizontalDescriptionAndAnimation(
    actionState: TutorialActionState,
    config: TutorialScreenConfig,
    isCompactWindow: Boolean,
    modifier: Modifier = Modifier,
) {
    Row(modifier = modifier.fillMaxWidth()) {
        TutorialDescription(actionState, config, modifier = Modifier.weight(1f))
        Spacer(modifier = Modifier.width(70.dp))
    Row(
        modifier =
            modifier.fillMaxWidth().padding(start = 48.dp, top = 100.dp, end = 48.dp, bottom = 8.dp)
    ) {
        TutorialDescription(actionState, config, isCompactWindow, modifier = Modifier.weight(1f))
        Spacer(modifier = Modifier.width(24.dp))
        TutorialAnimation(actionState, config, modifier = Modifier.weight(1f))
    }
}
@@ -122,20 +136,25 @@ private fun HorizontalDescriptionAndAnimation(
private fun VerticalDescriptionAndAnimation(
    actionState: TutorialActionState,
    config: TutorialScreenConfig,
    isCompactWindow: Boolean,
    modifier: Modifier = Modifier,
) {
    Column(modifier = modifier.fillMaxWidth().padding(horizontal = 40.dp, vertical = 40.dp)) {
        Spacer(modifier = Modifier.weight(0.1f))
    val horizontalPadding = if (isCompactWindow) 24.dp else 96.dp
    // Represents the majority of tablets in portrait - we need extra spacer at the top and bottom
    val isTablet = LocalWindowSizeClass.current.heightSizeClass == WindowHeightSizeClass.Expanded
    Column(
        modifier =
            modifier.fillMaxWidth().padding(start = 0.dp, top = 100.dp, end = 0.dp, bottom = 8.dp)
    ) {
        if (isTablet) Spacer(modifier = Modifier.weight(0.3f))
        TutorialDescription(
            actionState,
            config,
            modifier =
                Modifier.weight(0.2f)
                    // extra padding to better align with animation which has embedded padding
                    .padding(horizontal = 15.dp),
            isCompactWindow,
            modifier = Modifier.weight(1f).padding(horizontal = horizontalPadding),
        )
        Spacer(modifier = Modifier.width(70.dp))
        TutorialAnimation(actionState, config, modifier = Modifier.weight(1f))
        TutorialAnimation(actionState, config, modifier = Modifier.weight(1.8f).fillMaxWidth())
        if (isTablet) Spacer(modifier = Modifier.weight(0.3f))
    }
}

@@ -143,6 +162,7 @@ private fun VerticalDescriptionAndAnimation(
fun TutorialDescription(
    actionState: TutorialActionState,
    config: TutorialScreenConfig,
    isCompactWindow: Boolean,
    modifier: Modifier = Modifier,
) {
    val focusRequester = remember { FocusRequester() }
@@ -159,7 +179,9 @@ fun TutorialDescription(
    Column(verticalArrangement = Arrangement.Top, modifier = modifier) {
        Text(
            text = stringResource(id = titleTextId),
            style = MaterialTheme.typography.displayLarge,
            style =
                if (isCompactWindow) MaterialTheme.typography.headlineLarge
                else MaterialTheme.typography.displayMedium,
            color = config.colors.title,
            modifier = Modifier.focusRequester(focusRequester).focusable(),
        )