Loading packages/SystemUI/src/com/android/systemui/development/ui/compose/BuildNumber.kt +8 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.minimumInteractiveComponentSize Loading @@ -32,16 +33,18 @@ import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.onLongClick import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp import com.android.systemui.communal.ui.compose.extensions.detectLongPressGesture import com.android.systemui.development.ui.viewmodel.BuildNumberViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R @Composable fun BuildNumber( viewModelFactory: BuildNumberViewModel.Factory, textColor: Color, modifier: Modifier = Modifier, textColor: Color = MaterialTheme.colorScheme.onSurface, ) { val viewModel = rememberViewModel(traceName = "BuildNumber") { viewModelFactory.create() } Loading @@ -56,6 +59,10 @@ fun BuildNumber( style = MaterialTheme.typography.bodySmall, modifier = modifier .borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(1.dp), ) .focusable() .wrapContentWidth() // Using this instead of combinedClickable because this node should not support Loading packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PaginatedGridLayout.kt +1 −13 Original line number Diff line number Diff line Loading @@ -23,12 +23,10 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect Loading Loading @@ -58,7 +56,6 @@ import com.android.systemui.qs.panels.ui.compose.toolbar.EditModeButton import com.android.systemui.qs.panels.ui.viewmodel.PaginatedGridViewModel import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel import com.android.systemui.qs.panels.ui.viewmodel.toolbar.EditModeButtonViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import javax.inject.Inject Loading Loading @@ -190,16 +187,7 @@ private fun FooterBar( horizontalArrangement = spacedBy(8.dp), ) { Row(Modifier.weight(1f)) { BuildNumber( viewModelFactory = buildNumberViewModelFactory, textColor = MaterialTheme.colorScheme.onSurface, modifier = Modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(1.dp), ) .wrapContentSize(), ) BuildNumber(viewModelFactory = buildNumberViewModelFactory) Spacer(modifier = Modifier.weight(1f)) } PagerDots( Loading packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/toolbar/Toolbar.kt +41 −38 Original line number Diff line number Diff line Loading @@ -24,23 +24,20 @@ import androidx.compose.animation.SharedTransitionLayout import androidx.compose.animation.SharedTransitionScope import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.development.ui.compose.BuildNumber import com.android.systemui.development.ui.viewmodel.BuildNumberViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.footer.ui.compose.IconButton import com.android.systemui.qs.panels.ui.compose.toolbar.Toolbar.TransitionKeys.SecurityInfoKey import com.android.systemui.qs.panels.ui.viewmodel.TextFeedbackContentViewModel import com.android.systemui.qs.panels.ui.viewmodel.TextFeedbackViewModel import com.android.systemui.qs.panels.ui.viewmodel.toolbar.ToolbarViewModel import com.android.systemui.qs.ui.compose.borderOnFocus @OptIn(ExperimentalSharedTransitionApi::class) @Composable Loading Loading @@ -91,24 +88,27 @@ private fun SharedTransitionScope.StandardToolbarLayout( modifier: Modifier = Modifier, ) { Row(modifier) { // User switcher button IconButton( model = { viewModel.userSwitcherViewModel }, useModifierBasedExpandable = true, Modifier.sysuiResTag("multi_user_switch").minimumInteractiveComponentSize(), ) // Edit mode button // TODO(b/410843063): Support the tooltip in DualShade val editModeButtonViewModel = rememberViewModel("Toolbar") { viewModel.editModeButtonViewModelFactory.create() } EditModeButton(editModeButtonViewModel, tooltipEnabled = false) // Settings button IconButton( viewModel.settingsButtonViewModel, model = viewModel.settingsButtonViewModel, useModifierBasedExpandable = true, Modifier.sysuiResTag("settings_button_container").minimumInteractiveComponentSize(), ) viewModel.userSwitcherViewModel?.let { IconButton( it, useModifierBasedExpandable = true, Modifier.sysuiResTag("multi_user_switch").minimumInteractiveComponentSize(), ) } // Security info button SecurityInfo( viewModel = viewModel.securityInfoViewModel, showCollapsed = true, Loading @@ -119,15 +119,28 @@ private fun SharedTransitionScope.StandardToolbarLayout( ), ) // Text feedback chip / build number ToolbarTextFeedback( viewModelFactory = viewModel.textFeedbackContentViewModelFactory, buildNumberViewModelFactory = viewModel.buildNumberViewModelFactory, modifier = Modifier.weight(1f), ) } } @Composable private fun ToolbarTextFeedback( viewModelFactory: TextFeedbackContentViewModel.Factory, buildNumberViewModelFactory: BuildNumberViewModel.Factory, modifier: Modifier, ) { Box(modifier = modifier) { val context = LocalContext.current val textFeedbackViewModel = val viewModel = rememberViewModel("Toolbar.TextFeedbackViewModel", context) { viewModel.textFeedbackContentViewModelFactory.create(context) viewModelFactory.create(context) } Box(modifier = Modifier.weight(1f)) { val hasTextFeedback = textFeedbackViewModel.textFeedback !is TextFeedbackViewModel.NoFeedback val hasTextFeedback = viewModel.textFeedback !is TextFeedbackViewModel.NoFeedback Crossfade( targetState = hasTextFeedback, Loading @@ -135,19 +148,9 @@ private fun SharedTransitionScope.StandardToolbarLayout( label = "Toolbar.ShowTextFeedback", ) { showTextFeedback -> if (showTextFeedback) { TextFeedback(textFeedbackViewModel.textFeedback, Modifier.wrapContentSize()) TextFeedback(model = viewModel.textFeedback) } else { BuildNumber( viewModelFactory = viewModel.buildNumberViewModelFactory, textColor = MaterialTheme.colorScheme.onSurface, modifier = Modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(1.dp), ) .wrapContentSize(), ) } BuildNumber(viewModelFactory = buildNumberViewModelFactory) } } } Loading Loading
packages/SystemUI/src/com/android/systemui/development/ui/compose/BuildNumber.kt +8 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.minimumInteractiveComponentSize Loading @@ -32,16 +33,18 @@ import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.onLongClick import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp import com.android.systemui.communal.ui.compose.extensions.detectLongPressGesture import com.android.systemui.development.ui.viewmodel.BuildNumberViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R @Composable fun BuildNumber( viewModelFactory: BuildNumberViewModel.Factory, textColor: Color, modifier: Modifier = Modifier, textColor: Color = MaterialTheme.colorScheme.onSurface, ) { val viewModel = rememberViewModel(traceName = "BuildNumber") { viewModelFactory.create() } Loading @@ -56,6 +59,10 @@ fun BuildNumber( style = MaterialTheme.typography.bodySmall, modifier = modifier .borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(1.dp), ) .focusable() .wrapContentWidth() // Using this instead of combinedClickable because this node should not support Loading
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PaginatedGridLayout.kt +1 −13 Original line number Diff line number Diff line Loading @@ -23,12 +23,10 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect Loading Loading @@ -58,7 +56,6 @@ import com.android.systemui.qs.panels.ui.compose.toolbar.EditModeButton import com.android.systemui.qs.panels.ui.viewmodel.PaginatedGridViewModel import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel import com.android.systemui.qs.panels.ui.viewmodel.toolbar.EditModeButtonViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import javax.inject.Inject Loading Loading @@ -190,16 +187,7 @@ private fun FooterBar( horizontalArrangement = spacedBy(8.dp), ) { Row(Modifier.weight(1f)) { BuildNumber( viewModelFactory = buildNumberViewModelFactory, textColor = MaterialTheme.colorScheme.onSurface, modifier = Modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(1.dp), ) .wrapContentSize(), ) BuildNumber(viewModelFactory = buildNumberViewModelFactory) Spacer(modifier = Modifier.weight(1f)) } PagerDots( Loading
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/toolbar/Toolbar.kt +41 −38 Original line number Diff line number Diff line Loading @@ -24,23 +24,20 @@ import androidx.compose.animation.SharedTransitionLayout import androidx.compose.animation.SharedTransitionScope import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.development.ui.compose.BuildNumber import com.android.systemui.development.ui.viewmodel.BuildNumberViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.footer.ui.compose.IconButton import com.android.systemui.qs.panels.ui.compose.toolbar.Toolbar.TransitionKeys.SecurityInfoKey import com.android.systemui.qs.panels.ui.viewmodel.TextFeedbackContentViewModel import com.android.systemui.qs.panels.ui.viewmodel.TextFeedbackViewModel import com.android.systemui.qs.panels.ui.viewmodel.toolbar.ToolbarViewModel import com.android.systemui.qs.ui.compose.borderOnFocus @OptIn(ExperimentalSharedTransitionApi::class) @Composable Loading Loading @@ -91,24 +88,27 @@ private fun SharedTransitionScope.StandardToolbarLayout( modifier: Modifier = Modifier, ) { Row(modifier) { // User switcher button IconButton( model = { viewModel.userSwitcherViewModel }, useModifierBasedExpandable = true, Modifier.sysuiResTag("multi_user_switch").minimumInteractiveComponentSize(), ) // Edit mode button // TODO(b/410843063): Support the tooltip in DualShade val editModeButtonViewModel = rememberViewModel("Toolbar") { viewModel.editModeButtonViewModelFactory.create() } EditModeButton(editModeButtonViewModel, tooltipEnabled = false) // Settings button IconButton( viewModel.settingsButtonViewModel, model = viewModel.settingsButtonViewModel, useModifierBasedExpandable = true, Modifier.sysuiResTag("settings_button_container").minimumInteractiveComponentSize(), ) viewModel.userSwitcherViewModel?.let { IconButton( it, useModifierBasedExpandable = true, Modifier.sysuiResTag("multi_user_switch").minimumInteractiveComponentSize(), ) } // Security info button SecurityInfo( viewModel = viewModel.securityInfoViewModel, showCollapsed = true, Loading @@ -119,15 +119,28 @@ private fun SharedTransitionScope.StandardToolbarLayout( ), ) // Text feedback chip / build number ToolbarTextFeedback( viewModelFactory = viewModel.textFeedbackContentViewModelFactory, buildNumberViewModelFactory = viewModel.buildNumberViewModelFactory, modifier = Modifier.weight(1f), ) } } @Composable private fun ToolbarTextFeedback( viewModelFactory: TextFeedbackContentViewModel.Factory, buildNumberViewModelFactory: BuildNumberViewModel.Factory, modifier: Modifier, ) { Box(modifier = modifier) { val context = LocalContext.current val textFeedbackViewModel = val viewModel = rememberViewModel("Toolbar.TextFeedbackViewModel", context) { viewModel.textFeedbackContentViewModelFactory.create(context) viewModelFactory.create(context) } Box(modifier = Modifier.weight(1f)) { val hasTextFeedback = textFeedbackViewModel.textFeedback !is TextFeedbackViewModel.NoFeedback val hasTextFeedback = viewModel.textFeedback !is TextFeedbackViewModel.NoFeedback Crossfade( targetState = hasTextFeedback, Loading @@ -135,19 +148,9 @@ private fun SharedTransitionScope.StandardToolbarLayout( label = "Toolbar.ShowTextFeedback", ) { showTextFeedback -> if (showTextFeedback) { TextFeedback(textFeedbackViewModel.textFeedback, Modifier.wrapContentSize()) TextFeedback(model = viewModel.textFeedback) } else { BuildNumber( viewModelFactory = viewModel.buildNumberViewModelFactory, textColor = MaterialTheme.colorScheme.onSurface, modifier = Modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(1.dp), ) .wrapContentSize(), ) } BuildNumber(viewModelFactory = buildNumberViewModelFactory) } } } Loading