Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt +42 −8 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.ui.compose.Icon import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.qs.flags.QSComposeFragment import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsButtonViewModel import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsForegroundServicesButtonViewModel import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsSecurityButtonViewModel Loading Loading @@ -218,11 +219,24 @@ fun FooterActions( Spacer(Modifier.weight(1f)) } security?.let { SecurityButton(it, Modifier.weight(1f)) } foregroundServices?.let { ForegroundServicesButton(it) } userSwitcher?.let { IconButton(it, Modifier.sysuiResTag("multi_user_switch")) } IconButton(viewModel.settings, Modifier.sysuiResTag("settings_button_container")) power?.let { IconButton(it, Modifier.sysuiResTag("pm_lite")) } val useModifierBasedExpandable = remember { QSComposeFragment.isEnabled } security?.let { SecurityButton(it, useModifierBasedExpandable, Modifier.weight(1f)) } foregroundServices?.let { ForegroundServicesButton(it, useModifierBasedExpandable) } userSwitcher?.let { IconButton( it, useModifierBasedExpandable, Modifier.sysuiResTag("multi_user_switch"), ) } IconButton( viewModel.settings, useModifierBasedExpandable, Modifier.sysuiResTag("settings_button_container"), ) power?.let { IconButton(it, useModifierBasedExpandable, Modifier.sysuiResTag("pm_lite")) } } } } Loading @@ -231,6 +245,7 @@ fun FooterActions( @Composable private fun SecurityButton( model: FooterActionsSecurityButtonViewModel, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { val onClick: ((Expandable) -> Unit)? = Loading @@ -239,13 +254,21 @@ private fun SecurityButton( { expandable -> onClick(context, expandable) } } TextButton(model.icon, model.text, showNewDot = false, onClick = onClick, modifier) TextButton( model.icon, model.text, showNewDot = false, onClick = onClick, useModifierBasedExpandable, modifier, ) } /** The foreground services button. */ @Composable private fun RowScope.ForegroundServicesButton( model: FooterActionsForegroundServicesButtonViewModel model: FooterActionsForegroundServicesButtonViewModel, useModifierBasedExpandable: Boolean, ) { if (model.displayText) { TextButton( Loading @@ -253,6 +276,7 @@ private fun RowScope.ForegroundServicesButton( model.text, showNewDot = model.hasNewChanges, onClick = model.onClick, useModifierBasedExpandable, Modifier.weight(1f), ) } else { Loading @@ -261,13 +285,18 @@ private fun RowScope.ForegroundServicesButton( contentDescription = model.text, showNewDot = model.hasNewChanges, onClick = model.onClick, useModifierBasedExpandable, ) } } /** A button with an icon. */ @Composable fun IconButton(model: FooterActionsButtonViewModel, modifier: Modifier = Modifier) { fun IconButton( model: FooterActionsButtonViewModel, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { Expandable( color = colorAttr(model.backgroundColor), shape = CircleShape, Loading @@ -277,6 +306,7 @@ fun IconButton(model: FooterActionsButtonViewModel, modifier: Modifier = Modifie color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), useModifierBasedImplementation = useModifierBasedExpandable, ) { val tint = model.iconTint?.let { Color(it) } ?: Color.Unspecified Icon(model.icon, tint = tint, modifier = Modifier.size(20.dp)) Loading @@ -290,6 +320,7 @@ private fun NumberButton( contentDescription: String, showNewDot: Boolean, onClick: (Expandable) -> Unit, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { // By default Expandable will show a ripple above its content when clicked, and clip the content Loading @@ -309,6 +340,7 @@ private fun NumberButton( color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), useModifierBasedImplementation = useModifierBasedExpandable, ) { Box(Modifier.size(40.dp)) { Box( Loading Loading @@ -355,6 +387,7 @@ private fun TextButton( text: String, showNewDot: Boolean, onClick: ((Expandable) -> Unit)?, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { Expandable( Loading @@ -367,6 +400,7 @@ private fun TextButton( .padding(horizontal = 4.dp) .borderOnFocus(color = MaterialTheme.colorScheme.secondary, CornerSize(50)), onClick = onClick, useModifierBasedImplementation = useModifierBasedExpandable, ) { Row( Modifier.padding(horizontal = dimensionResource(R.dimen.qs_footer_padding)), Loading packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/Tile.kt +1 −0 Original line number Diff line number Diff line Loading @@ -245,6 +245,7 @@ private fun TileExpandable( color = color(), shape = shape, modifier = modifier.clip(shape).verticalSquish(squishiness), useModifierBasedImplementation = true, ) { content(hapticsViewModel?.createStateAwareExpandable(it) ?: it) } Loading packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/toolbar/Toolbar.kt +9 −2 Original line number Diff line number Diff line Loading @@ -32,18 +32,25 @@ fun Toolbar(toolbarViewModelFactory: ToolbarViewModel.Factory, modifier: Modifie Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) { viewModel.userSwitcherViewModel?.let { IconButton(it, Modifier.sysuiResTag("multi_user_switch")) IconButton( it, useModifierBasedExpandable = true, Modifier.sysuiResTag("multi_user_switch"), ) } EditModeButton(viewModel.editModeButtonViewModelFactory) IconButton( viewModel.settingsButtonViewModel, useModifierBasedExpandable = true, Modifier.sysuiResTag("settings_button_container"), ) Spacer(modifier = Modifier.weight(1f)) viewModel.powerButtonViewModel?.let { IconButton(it, Modifier.sysuiResTag("pm_lite")) } viewModel.powerButtonViewModel?.let { IconButton(it, useModifierBasedExpandable = true, Modifier.sysuiResTag("pm_lite")) } } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt +42 −8 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ import com.android.systemui.animation.Expandable import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.ui.compose.Icon import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.qs.flags.QSComposeFragment import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsButtonViewModel import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsForegroundServicesButtonViewModel import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsSecurityButtonViewModel Loading Loading @@ -218,11 +219,24 @@ fun FooterActions( Spacer(Modifier.weight(1f)) } security?.let { SecurityButton(it, Modifier.weight(1f)) } foregroundServices?.let { ForegroundServicesButton(it) } userSwitcher?.let { IconButton(it, Modifier.sysuiResTag("multi_user_switch")) } IconButton(viewModel.settings, Modifier.sysuiResTag("settings_button_container")) power?.let { IconButton(it, Modifier.sysuiResTag("pm_lite")) } val useModifierBasedExpandable = remember { QSComposeFragment.isEnabled } security?.let { SecurityButton(it, useModifierBasedExpandable, Modifier.weight(1f)) } foregroundServices?.let { ForegroundServicesButton(it, useModifierBasedExpandable) } userSwitcher?.let { IconButton( it, useModifierBasedExpandable, Modifier.sysuiResTag("multi_user_switch"), ) } IconButton( viewModel.settings, useModifierBasedExpandable, Modifier.sysuiResTag("settings_button_container"), ) power?.let { IconButton(it, useModifierBasedExpandable, Modifier.sysuiResTag("pm_lite")) } } } } Loading @@ -231,6 +245,7 @@ fun FooterActions( @Composable private fun SecurityButton( model: FooterActionsSecurityButtonViewModel, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { val onClick: ((Expandable) -> Unit)? = Loading @@ -239,13 +254,21 @@ private fun SecurityButton( { expandable -> onClick(context, expandable) } } TextButton(model.icon, model.text, showNewDot = false, onClick = onClick, modifier) TextButton( model.icon, model.text, showNewDot = false, onClick = onClick, useModifierBasedExpandable, modifier, ) } /** The foreground services button. */ @Composable private fun RowScope.ForegroundServicesButton( model: FooterActionsForegroundServicesButtonViewModel model: FooterActionsForegroundServicesButtonViewModel, useModifierBasedExpandable: Boolean, ) { if (model.displayText) { TextButton( Loading @@ -253,6 +276,7 @@ private fun RowScope.ForegroundServicesButton( model.text, showNewDot = model.hasNewChanges, onClick = model.onClick, useModifierBasedExpandable, Modifier.weight(1f), ) } else { Loading @@ -261,13 +285,18 @@ private fun RowScope.ForegroundServicesButton( contentDescription = model.text, showNewDot = model.hasNewChanges, onClick = model.onClick, useModifierBasedExpandable, ) } } /** A button with an icon. */ @Composable fun IconButton(model: FooterActionsButtonViewModel, modifier: Modifier = Modifier) { fun IconButton( model: FooterActionsButtonViewModel, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { Expandable( color = colorAttr(model.backgroundColor), shape = CircleShape, Loading @@ -277,6 +306,7 @@ fun IconButton(model: FooterActionsButtonViewModel, modifier: Modifier = Modifie color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), useModifierBasedImplementation = useModifierBasedExpandable, ) { val tint = model.iconTint?.let { Color(it) } ?: Color.Unspecified Icon(model.icon, tint = tint, modifier = Modifier.size(20.dp)) Loading @@ -290,6 +320,7 @@ private fun NumberButton( contentDescription: String, showNewDot: Boolean, onClick: (Expandable) -> Unit, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { // By default Expandable will show a ripple above its content when clicked, and clip the content Loading @@ -309,6 +340,7 @@ private fun NumberButton( color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), useModifierBasedImplementation = useModifierBasedExpandable, ) { Box(Modifier.size(40.dp)) { Box( Loading Loading @@ -355,6 +387,7 @@ private fun TextButton( text: String, showNewDot: Boolean, onClick: ((Expandable) -> Unit)?, useModifierBasedExpandable: Boolean, modifier: Modifier = Modifier, ) { Expandable( Loading @@ -367,6 +400,7 @@ private fun TextButton( .padding(horizontal = 4.dp) .borderOnFocus(color = MaterialTheme.colorScheme.secondary, CornerSize(50)), onClick = onClick, useModifierBasedImplementation = useModifierBasedExpandable, ) { Row( Modifier.padding(horizontal = dimensionResource(R.dimen.qs_footer_padding)), Loading
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/Tile.kt +1 −0 Original line number Diff line number Diff line Loading @@ -245,6 +245,7 @@ private fun TileExpandable( color = color(), shape = shape, modifier = modifier.clip(shape).verticalSquish(squishiness), useModifierBasedImplementation = true, ) { content(hapticsViewModel?.createStateAwareExpandable(it) ?: it) } Loading
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/toolbar/Toolbar.kt +9 −2 Original line number Diff line number Diff line Loading @@ -32,18 +32,25 @@ fun Toolbar(toolbarViewModelFactory: ToolbarViewModel.Factory, modifier: Modifie Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) { viewModel.userSwitcherViewModel?.let { IconButton(it, Modifier.sysuiResTag("multi_user_switch")) IconButton( it, useModifierBasedExpandable = true, Modifier.sysuiResTag("multi_user_switch"), ) } EditModeButton(viewModel.editModeButtonViewModelFactory) IconButton( viewModel.settingsButtonViewModel, useModifierBasedExpandable = true, Modifier.sysuiResTag("settings_button_container"), ) Spacer(modifier = Modifier.weight(1f)) viewModel.powerButtonViewModel?.let { IconButton(it, Modifier.sysuiResTag("pm_lite")) } viewModel.powerButtonViewModel?.let { IconButton(it, useModifierBasedExpandable = true, Modifier.sysuiResTag("pm_lite")) } } }