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

Commit 8bd77ac4 authored by Pat Manning's avatar Pat Manning Committed by Android (Google) Code Review
Browse files

Merge "Set TalkBack focus to last selected screen on OOBE settings page." into main

parents 35c0ac60 0a8e8588
Loading
Loading
Loading
Loading
+28 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.touchpad.tutorial.ui.composable

import android.content.res.Configuration
import androidx.compose.foundation.background
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -36,8 +37,12 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.input.pointer.pointerInteropFilter
@@ -49,6 +54,7 @@ import com.android.systemui.inputdevice.tutorial.ui.composable.DoneButton
import com.android.systemui.res.R
import com.android.systemui.touchpad.tutorial.ui.gesture.isFourFingerTouchpadSwipe
import com.android.systemui.touchpad.tutorial.ui.gesture.isThreeFingerTouchpadSwipe
import com.android.systemui.touchpad.tutorial.ui.viewmodel.Screen

@Composable
fun TutorialSelectionScreen(
@@ -56,6 +62,7 @@ fun TutorialSelectionScreen(
    onHomeTutorialClicked: () -> Unit,
    onRecentAppsTutorialClicked: () -> Unit,
    onDoneButtonClicked: () -> Unit,
    lastSelectedScreen: Screen,
) {
    Column(
        verticalArrangement = Arrangement.Center,
@@ -80,6 +87,7 @@ fun TutorialSelectionScreen(
                    onHomeTutorialClicked = onHomeTutorialClicked,
                    onRecentAppsTutorialClicked = onRecentAppsTutorialClicked,
                    modifier = Modifier.weight(1f).padding(60.dp),
                    lastSelectedScreen,
                )
            }
            else -> {
@@ -88,6 +96,7 @@ fun TutorialSelectionScreen(
                    onHomeTutorialClicked = onHomeTutorialClicked,
                    onRecentAppsTutorialClicked = onRecentAppsTutorialClicked,
                    modifier = Modifier.weight(1f).padding(60.dp),
                    lastSelectedScreen,
                )
            }
        }
@@ -105,6 +114,7 @@ private fun HorizontalSelectionButtons(
    onHomeTutorialClicked: () -> Unit,
    onRecentAppsTutorialClicked: () -> Unit,
    modifier: Modifier = Modifier,
    lastSelectedScreen: Screen,
) {
    Row(
        horizontalArrangement = Arrangement.spacedBy(20.dp),
@@ -116,6 +126,7 @@ private fun HorizontalSelectionButtons(
            onHomeTutorialClicked,
            onRecentAppsTutorialClicked,
            modifier = Modifier.weight(1f).fillMaxSize(),
            lastSelectedScreen,
        )
    }
}
@@ -126,6 +137,7 @@ private fun VerticalSelectionButtons(
    onHomeTutorialClicked: () -> Unit,
    onRecentAppsTutorialClicked: () -> Unit,
    modifier: Modifier = Modifier,
    lastSelectedScreen: Screen,
) {
    Column(
        verticalArrangement = Arrangement.spacedBy(20.dp),
@@ -137,6 +149,7 @@ private fun VerticalSelectionButtons(
            onHomeTutorialClicked,
            onRecentAppsTutorialClicked,
            modifier = Modifier.weight(1f).fillMaxSize(),
            lastSelectedScreen,
        )
    }
}
@@ -147,14 +160,26 @@ private fun ThreeTutorialButtons(
    onHomeTutorialClicked: () -> Unit,
    onRecentAppsTutorialClicked: () -> Unit,
    modifier: Modifier = Modifier,
    lastSelectedScreen: Screen,
) {
    val homeFocusRequester = remember { FocusRequester() }
    val backFocusRequester = remember { FocusRequester() }
    val recentAppsFocusRequester = remember { FocusRequester() }
    LaunchedEffect(Unit) {
        when (lastSelectedScreen) {
            Screen.HOME_GESTURE -> homeFocusRequester.requestFocus()
            Screen.BACK_GESTURE -> backFocusRequester.requestFocus()
            Screen.RECENT_APPS_GESTURE -> recentAppsFocusRequester.requestFocus()
            else -> {} // No-Op.
        }
    }
    TutorialButton(
        text = stringResource(R.string.touchpad_tutorial_home_gesture_button),
        icon = ImageVector.vectorResource(id = R.drawable.touchpad_tutorial_home_icon),
        iconColor = MaterialTheme.colorScheme.onPrimary,
        onClick = onHomeTutorialClicked,
        backgroundColor = MaterialTheme.colorScheme.primary,
        modifier = modifier,
        modifier = modifier.focusRequester(homeFocusRequester).focusable(),
    )
    TutorialButton(
        text = stringResource(R.string.touchpad_tutorial_back_gesture_button),
@@ -162,7 +187,7 @@ private fun ThreeTutorialButtons(
        iconColor = MaterialTheme.colorScheme.onTertiary,
        onClick = onBackTutorialClicked,
        backgroundColor = MaterialTheme.colorScheme.tertiary,
        modifier = modifier,
        modifier = modifier.focusRequester(backFocusRequester).focusable(),
    )
    TutorialButton(
        text = stringResource(R.string.touchpad_tutorial_recent_apps_gesture_button),
@@ -170,7 +195,7 @@ private fun ThreeTutorialButtons(
        iconColor = MaterialTheme.colorScheme.onSecondary,
        onClick = onRecentAppsTutorialClicked,
        backgroundColor = MaterialTheme.colorScheme.secondary,
        modifier = modifier,
        modifier = modifier.focusRequester(recentAppsFocusRequester).focusable(),
    )
}

+17 −3
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@ import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.lifecycle.Lifecycle.State.STARTED
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.theme.PlatformTheme
@@ -82,13 +85,24 @@ constructor(
@Composable
fun TouchpadTutorialScreen(vm: TouchpadTutorialViewModel, closeTutorial: () -> Unit) {
    val activeScreen by vm.screen.collectAsStateWithLifecycle(STARTED)
    var lastSelectedScreen by remember { mutableStateOf(TUTORIAL_SELECTION) }
    when (activeScreen) {
        TUTORIAL_SELECTION ->
            TutorialSelectionScreen(
                onBackTutorialClicked = { vm.goTo(BACK_GESTURE) },
                onHomeTutorialClicked = { vm.goTo(HOME_GESTURE) },
                onRecentAppsTutorialClicked = { vm.goTo(RECENT_APPS_GESTURE) },
                onBackTutorialClicked = {
                    lastSelectedScreen = BACK_GESTURE
                    vm.goTo(BACK_GESTURE)
                },
                onHomeTutorialClicked = {
                    lastSelectedScreen = HOME_GESTURE
                    vm.goTo(HOME_GESTURE)
                },
                onRecentAppsTutorialClicked = {
                    lastSelectedScreen = RECENT_APPS_GESTURE
                    vm.goTo(RECENT_APPS_GESTURE)
                },
                onDoneButtonClicked = closeTutorial,
                lastSelectedScreen,
            )
        BACK_GESTURE ->
            BackGestureTutorialScreen(