Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsDimension.kt +3 −2 Original line number Diff line number Diff line Loading @@ -23,10 +23,11 @@ object SettingsDimension { val paddingTiny = 2.dp val paddingExtraSmall = 4.dp val paddingExtraSmall1 = 6.dp val paddingSmall = if (isSpaExpressiveEnabled) 8.dp else 4.dp val paddingSmall1 = 16.dp val paddingExtraSmall3 = 6.dp val paddingExtraSmall5 = 10.dp val paddingExtraSmall6 = 12.dp val paddingSmall = if (isSpaExpressiveEnabled) 8.dp else 4.dp val paddingSmall1 = 16.dp val paddingLarge = 16.dp val paddingExtraLarge = 24.dp val paddingExtraLarge1 = 28.dp Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/button/ActionButtons.kt +45 −37 Original line number Diff line number Diff line Loading @@ -25,20 +25,23 @@ import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Launch import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.WarningAmber import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FilledIconButton import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable Loading @@ -48,6 +51,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.semantics.clearAndSetSemantics import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp Loading Loading @@ -93,46 +97,19 @@ fun ActionButtons(actionButtons: List<ActionButton>) { } } @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable private fun RowScope.ActionButton(actionButton: ActionButton) { if (isSpaExpressiveEnabled) { FilledTonalButton( onClick = actionButton.onClick, modifier = Modifier .weight(1f) .fillMaxHeight() .clip(RoundedCornerShape(100.dp)), enabled = actionButton.enabled, // Because buttons could appear, disappear or change positions, reset the interaction source // to prevent highlight the wrong button. interactionSource = remember(actionButton) { MutableInteractionSource() }, shape = RectangleShape, colors = ButtonDefaults.filledTonalButtonColors( containerColor = MaterialTheme.colorScheme.primaryContainer, contentColor = MaterialTheme.colorScheme.onPrimaryContainer, disabledContainerColor = MaterialTheme.colorScheme.surface, ), contentPadding = PaddingValues(horizontal = 24.dp, vertical = 16.dp), ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { Icon( imageVector = actionButton.imageVector, contentDescription = null, modifier = Modifier.size(SettingsDimension.itemIconSize), ) Box( modifier = Modifier .padding(top = 6.dp), contentAlignment = Alignment.Center, ) { IconButton(actionButton) Spacer(Modifier.height(SettingsDimension.paddingExtraSmall3)) Text( text = actionButton.text, textAlign = TextAlign.Center, style = MaterialTheme.typography.titleSmall, modifier = Modifier.clearAndSetSemantics {}, // semantics set in IconButton style = MaterialTheme.typography.titleSmallEmphasized, ) } } } } else { FilledTonalButton( onClick = actionButton.onClick, Loading Loading @@ -174,6 +151,37 @@ private fun RowScope.ActionButton(actionButton: ActionButton) { } } @Composable @OptIn(ExperimentalMaterial3ExpressiveApi::class) private fun IconButton(actionButton: ActionButton) { FilledIconButton( onClick = actionButton.onClick, shape = IconButtonDefaults.mediumRoundShape, modifier = Modifier .size( IconButtonDefaults.mediumContainerSize( IconButtonDefaults.IconButtonWidthOption.Wide ) ), enabled = actionButton.enabled, // Because buttons could appear, disappear or change positions, reset the interaction source // to prevent highlight the wrong button. interactionSource = remember(actionButton) { MutableInteractionSource() }, colors = IconButtonDefaults.filledIconButtonColors( containerColor = MaterialTheme.colorScheme.primaryContainer, contentColor = MaterialTheme.colorScheme.onPrimaryContainer, disabledContainerColor = MaterialTheme.colorScheme.surface, ), ) { Icon( imageVector = actionButton.imageVector, contentDescription = actionButton.text, modifier = Modifier.size(SettingsDimension.itemIconSize), ) } } @Composable private fun ButtonDivider() { Box( Loading Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/theme/SettingsDimension.kt +3 −2 Original line number Diff line number Diff line Loading @@ -23,10 +23,11 @@ object SettingsDimension { val paddingTiny = 2.dp val paddingExtraSmall = 4.dp val paddingExtraSmall1 = 6.dp val paddingSmall = if (isSpaExpressiveEnabled) 8.dp else 4.dp val paddingSmall1 = 16.dp val paddingExtraSmall3 = 6.dp val paddingExtraSmall5 = 10.dp val paddingExtraSmall6 = 12.dp val paddingSmall = if (isSpaExpressiveEnabled) 8.dp else 4.dp val paddingSmall1 = 16.dp val paddingLarge = 16.dp val paddingExtraLarge = 24.dp val paddingExtraLarge1 = 28.dp Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/button/ActionButtons.kt +45 −37 Original line number Diff line number Diff line Loading @@ -25,20 +25,23 @@ import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Launch import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.WarningAmber import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FilledIconButton import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable Loading @@ -48,6 +51,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.semantics.clearAndSetSemantics import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp Loading Loading @@ -93,46 +97,19 @@ fun ActionButtons(actionButtons: List<ActionButton>) { } } @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable private fun RowScope.ActionButton(actionButton: ActionButton) { if (isSpaExpressiveEnabled) { FilledTonalButton( onClick = actionButton.onClick, modifier = Modifier .weight(1f) .fillMaxHeight() .clip(RoundedCornerShape(100.dp)), enabled = actionButton.enabled, // Because buttons could appear, disappear or change positions, reset the interaction source // to prevent highlight the wrong button. interactionSource = remember(actionButton) { MutableInteractionSource() }, shape = RectangleShape, colors = ButtonDefaults.filledTonalButtonColors( containerColor = MaterialTheme.colorScheme.primaryContainer, contentColor = MaterialTheme.colorScheme.onPrimaryContainer, disabledContainerColor = MaterialTheme.colorScheme.surface, ), contentPadding = PaddingValues(horizontal = 24.dp, vertical = 16.dp), ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { Icon( imageVector = actionButton.imageVector, contentDescription = null, modifier = Modifier.size(SettingsDimension.itemIconSize), ) Box( modifier = Modifier .padding(top = 6.dp), contentAlignment = Alignment.Center, ) { IconButton(actionButton) Spacer(Modifier.height(SettingsDimension.paddingExtraSmall3)) Text( text = actionButton.text, textAlign = TextAlign.Center, style = MaterialTheme.typography.titleSmall, modifier = Modifier.clearAndSetSemantics {}, // semantics set in IconButton style = MaterialTheme.typography.titleSmallEmphasized, ) } } } } else { FilledTonalButton( onClick = actionButton.onClick, Loading Loading @@ -174,6 +151,37 @@ private fun RowScope.ActionButton(actionButton: ActionButton) { } } @Composable @OptIn(ExperimentalMaterial3ExpressiveApi::class) private fun IconButton(actionButton: ActionButton) { FilledIconButton( onClick = actionButton.onClick, shape = IconButtonDefaults.mediumRoundShape, modifier = Modifier .size( IconButtonDefaults.mediumContainerSize( IconButtonDefaults.IconButtonWidthOption.Wide ) ), enabled = actionButton.enabled, // Because buttons could appear, disappear or change positions, reset the interaction source // to prevent highlight the wrong button. interactionSource = remember(actionButton) { MutableInteractionSource() }, colors = IconButtonDefaults.filledIconButtonColors( containerColor = MaterialTheme.colorScheme.primaryContainer, contentColor = MaterialTheme.colorScheme.onPrimaryContainer, disabledContainerColor = MaterialTheme.colorScheme.surface, ), ) { Icon( imageVector = actionButton.imageVector, contentDescription = actionButton.text, modifier = Modifier.size(SettingsDimension.itemIconSize), ) } } @Composable private fun ButtonDivider() { Box( Loading