Loading packages/SystemUI/compose/features/src/com/android/systemui/ambientcue/ui/compose/Chip.kt +13 −2 Original line number Diff line number Diff line Loading @@ -33,14 +33,19 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.android.compose.ui.graphics.painter.rememberDrawablePainter Loading @@ -51,6 +56,12 @@ import com.android.systemui.res.R @Composable fun Chip(action: ActionViewModel, modifier: Modifier = Modifier) { val backgroundColor = if (isSystemInDarkTheme()) Color.Black else Color.White val config = LocalConfiguration.current val isBoldTextEnabled by remember { derivedStateOf { config.fontWeightAdjustment > 0 } } val chipTextStyle = MaterialTheme.typography.labelLarge.copy( fontWeight = if (isBoldTextEnabled) FontWeight.Bold else FontWeight.Medium ) val haptics = LocalHapticFeedback.current Row( Loading Loading @@ -94,7 +105,7 @@ fun Chip(action: ActionViewModel, modifier: Modifier = Modifier) { val hasAttribution = action.attribution != null Text( action.label, style = MaterialTheme.typography.labelLarge, style = chipTextStyle, color = MaterialTheme.colorScheme.onSurface, maxLines = if (hasAttribution) 1 else 2, overflow = TextOverflow.Ellipsis, Loading @@ -102,7 +113,7 @@ fun Chip(action: ActionViewModel, modifier: Modifier = Modifier) { if (hasAttribution) { Text( action.attribution!!, style = MaterialTheme.typography.labelLarge, style = chipTextStyle, color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, modifier = Modifier.alpha(0.8f), Loading packages/SystemUI/compose/features/src/com/android/systemui/ambientcue/ui/compose/NavBarPill.kt +12 −3 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember Loading @@ -61,8 +62,10 @@ import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntSize Loading Loading @@ -141,6 +144,12 @@ fun NavBarPill( animationSpec = tween(250, delayMillis = 200), label = "expansion", ) val config = LocalConfiguration.current val isBoldTextEnabled by remember { derivedStateOf { config.fontWeightAdjustment > 0 } } val actionTextStyle = MaterialTheme.typography.labelMedium.copy( fontWeight = if (isBoldTextEnabled) FontWeight.Bold else FontWeight.Medium ) Box( modifier = Loading Loading @@ -262,7 +271,7 @@ fun NavBarPill( ) { Text( text = action.label, style = MaterialTheme.typography.labelMedium, style = actionTextStyle, maxLines = 1, overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.onSurface, Loading @@ -271,7 +280,7 @@ fun NavBarPill( if (action.icon.repeatCount > 0) { Text( text = "+${action.icon.repeatCount}", style = MaterialTheme.typography.labelMedium, style = actionTextStyle, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(end = 3.dp), ) Loading @@ -279,7 +288,7 @@ fun NavBarPill( } else if (action.icon.repeatCount == 0) { Text( text = action.label, style = MaterialTheme.typography.labelMedium, style = actionTextStyle, maxLines = 1, overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.onSurface, Loading packages/SystemUI/compose/features/src/com/android/systemui/ambientcue/ui/compose/ShortPill.kt +31 −40 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import androidx.compose.material3.IconButtonColors import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember Loading @@ -60,8 +61,10 @@ import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInParent import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp Loading Loading @@ -133,6 +136,13 @@ fun ShortPill( var pillContentSize by remember { mutableStateOf(IntSize.Zero) } var pillContentPosition by remember { mutableStateOf(Offset.Zero) } val config = LocalConfiguration.current val isBoldTextEnabled by remember { derivedStateOf { config.fontWeightAdjustment > 0 } } val actionTextStyle = MaterialTheme.typography.labelMedium.copy( fontWeight = if (isBoldTextEnabled) FontWeight.Bold else FontWeight.Medium ) Box( modifier = modifier.drawBehind { Loading Loading @@ -172,8 +182,7 @@ fun ShortPill( } val fadeOutModifier = Modifier.graphicsLayer { alpha = expansionAlpha } val pillModifier = Modifier .clip(RoundedCornerShape(16.dp)) Modifier.clip(RoundedCornerShape(16.dp)) .background(backgroundColor) .animatedActionBorder(strokeWidth = 1.dp, cornerRadius = 16.dp, visible = visible) .widthIn(0.dp, minSize * 2) Loading @@ -196,9 +205,8 @@ fun ShortPill( Arrangement.spacedBy(-4.dp, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically, modifier = pillModifier .defaultMinSize(minWidth = minSize) .onGloballyPositioned { coordinates -> pillModifier.defaultMinSize(minWidth = minSize).onGloballyPositioned { coordinates -> pillContentSize = coordinates.size pillContentPosition = coordinates.positionInParent() }, Loading @@ -209,7 +217,7 @@ fun ShortPill( Text( text = action.label, color = outlineColor, style = MaterialTheme.typography.labelMedium, style = actionTextStyle, overflow = TextOverflow.Ellipsis, maxLines = 1, modifier = Modifier.padding(horizontal = 8.dp), Loading @@ -218,10 +226,7 @@ fun ShortPill( } } CloseButton( onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize), ) CloseButton(onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize)) } } else { // Vertical Column( Loading @@ -232,25 +237,18 @@ fun ShortPill( Spacer(modifier = Modifier.size(closeButtonSize)) Column( verticalArrangement = Arrangement.spacedBy(-4.dp, Alignment.CenterVertically), verticalArrangement = Arrangement.spacedBy(-4.dp, Alignment.CenterVertically), modifier = pillModifier .defaultMinSize(minHeight = minSize) .onGloballyPositioned { coordinates -> pillModifier.defaultMinSize(minHeight = minSize).onGloballyPositioned { coordinates -> pillContentSize = coordinates.size pillContentPosition = coordinates.positionInParent() }, ) { filteredActions.take(3).fastForEach { action -> Icon(action, backgroundColor) } filteredActions.take(3).fastForEach { action -> Icon(action, backgroundColor) } } CloseButton( onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize), ) CloseButton(onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize)) } } Loading @@ -258,19 +256,16 @@ fun ShortPill( if (expansionAlpha < 1f && pillContentSize != IntSize.Zero) { with(LocalDensity.current) { val offsetX = pillContentPosition.x.toDp() + (pillContentSize.width.toDp() / 2) - pillContentPosition.x.toDp() + (pillContentSize.width.toDp() / 2) - (closeButtonSize / 2) val offsetY = pillContentPosition.y.toDp() + (pillContentSize.height.toDp() / 2) - pillContentPosition.y.toDp() + (pillContentSize.height.toDp() / 2) - (closeButtonSize / 2) CloseButton( onCloseClick = onCloseClick, modifier = Modifier .offset(x = offsetX, y = offsetY) Modifier.offset(x = offsetX, y = offsetY) .size(closeButtonSize) .graphicsLayer { alpha = 1f - expansionAlpha } // Fade IN .then(scaleAnimationModifier), Loading @@ -281,10 +276,7 @@ fun ShortPill( } @Composable private fun CloseButton( onCloseClick: () -> Unit, modifier: Modifier = Modifier, ) { private fun CloseButton(onCloseClick: () -> Unit, modifier: Modifier = Modifier) { PlatformIconButton( modifier = Loading Loading @@ -317,8 +309,7 @@ private fun Icon(action: ActionViewModel, backgroundColor: Color, modifier: Modi if (action.actionType == ActionType.MR) { Modifier.size(20.dp) } else { Modifier .size(19.25.dp) Modifier.size(19.25.dp) .border( width = 0.75.dp, color = MaterialTheme.colorScheme.outline, Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/ambientcue/ui/compose/Chip.kt +13 −2 Original line number Diff line number Diff line Loading @@ -33,14 +33,19 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.android.compose.ui.graphics.painter.rememberDrawablePainter Loading @@ -51,6 +56,12 @@ import com.android.systemui.res.R @Composable fun Chip(action: ActionViewModel, modifier: Modifier = Modifier) { val backgroundColor = if (isSystemInDarkTheme()) Color.Black else Color.White val config = LocalConfiguration.current val isBoldTextEnabled by remember { derivedStateOf { config.fontWeightAdjustment > 0 } } val chipTextStyle = MaterialTheme.typography.labelLarge.copy( fontWeight = if (isBoldTextEnabled) FontWeight.Bold else FontWeight.Medium ) val haptics = LocalHapticFeedback.current Row( Loading Loading @@ -94,7 +105,7 @@ fun Chip(action: ActionViewModel, modifier: Modifier = Modifier) { val hasAttribution = action.attribution != null Text( action.label, style = MaterialTheme.typography.labelLarge, style = chipTextStyle, color = MaterialTheme.colorScheme.onSurface, maxLines = if (hasAttribution) 1 else 2, overflow = TextOverflow.Ellipsis, Loading @@ -102,7 +113,7 @@ fun Chip(action: ActionViewModel, modifier: Modifier = Modifier) { if (hasAttribution) { Text( action.attribution!!, style = MaterialTheme.typography.labelLarge, style = chipTextStyle, color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, modifier = Modifier.alpha(0.8f), Loading
packages/SystemUI/compose/features/src/com/android/systemui/ambientcue/ui/compose/NavBarPill.kt +12 −3 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember Loading @@ -61,8 +62,10 @@ import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntSize Loading Loading @@ -141,6 +144,12 @@ fun NavBarPill( animationSpec = tween(250, delayMillis = 200), label = "expansion", ) val config = LocalConfiguration.current val isBoldTextEnabled by remember { derivedStateOf { config.fontWeightAdjustment > 0 } } val actionTextStyle = MaterialTheme.typography.labelMedium.copy( fontWeight = if (isBoldTextEnabled) FontWeight.Bold else FontWeight.Medium ) Box( modifier = Loading Loading @@ -262,7 +271,7 @@ fun NavBarPill( ) { Text( text = action.label, style = MaterialTheme.typography.labelMedium, style = actionTextStyle, maxLines = 1, overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.onSurface, Loading @@ -271,7 +280,7 @@ fun NavBarPill( if (action.icon.repeatCount > 0) { Text( text = "+${action.icon.repeatCount}", style = MaterialTheme.typography.labelMedium, style = actionTextStyle, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.padding(end = 3.dp), ) Loading @@ -279,7 +288,7 @@ fun NavBarPill( } else if (action.icon.repeatCount == 0) { Text( text = action.label, style = MaterialTheme.typography.labelMedium, style = actionTextStyle, maxLines = 1, overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.onSurface, Loading
packages/SystemUI/compose/features/src/com/android/systemui/ambientcue/ui/compose/ShortPill.kt +31 −40 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import androidx.compose.material3.IconButtonColors import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember Loading @@ -60,8 +61,10 @@ import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInParent import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp Loading Loading @@ -133,6 +136,13 @@ fun ShortPill( var pillContentSize by remember { mutableStateOf(IntSize.Zero) } var pillContentPosition by remember { mutableStateOf(Offset.Zero) } val config = LocalConfiguration.current val isBoldTextEnabled by remember { derivedStateOf { config.fontWeightAdjustment > 0 } } val actionTextStyle = MaterialTheme.typography.labelMedium.copy( fontWeight = if (isBoldTextEnabled) FontWeight.Bold else FontWeight.Medium ) Box( modifier = modifier.drawBehind { Loading Loading @@ -172,8 +182,7 @@ fun ShortPill( } val fadeOutModifier = Modifier.graphicsLayer { alpha = expansionAlpha } val pillModifier = Modifier .clip(RoundedCornerShape(16.dp)) Modifier.clip(RoundedCornerShape(16.dp)) .background(backgroundColor) .animatedActionBorder(strokeWidth = 1.dp, cornerRadius = 16.dp, visible = visible) .widthIn(0.dp, minSize * 2) Loading @@ -196,9 +205,8 @@ fun ShortPill( Arrangement.spacedBy(-4.dp, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically, modifier = pillModifier .defaultMinSize(minWidth = minSize) .onGloballyPositioned { coordinates -> pillModifier.defaultMinSize(minWidth = minSize).onGloballyPositioned { coordinates -> pillContentSize = coordinates.size pillContentPosition = coordinates.positionInParent() }, Loading @@ -209,7 +217,7 @@ fun ShortPill( Text( text = action.label, color = outlineColor, style = MaterialTheme.typography.labelMedium, style = actionTextStyle, overflow = TextOverflow.Ellipsis, maxLines = 1, modifier = Modifier.padding(horizontal = 8.dp), Loading @@ -218,10 +226,7 @@ fun ShortPill( } } CloseButton( onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize), ) CloseButton(onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize)) } } else { // Vertical Column( Loading @@ -232,25 +237,18 @@ fun ShortPill( Spacer(modifier = Modifier.size(closeButtonSize)) Column( verticalArrangement = Arrangement.spacedBy(-4.dp, Alignment.CenterVertically), verticalArrangement = Arrangement.spacedBy(-4.dp, Alignment.CenterVertically), modifier = pillModifier .defaultMinSize(minHeight = minSize) .onGloballyPositioned { coordinates -> pillModifier.defaultMinSize(minHeight = minSize).onGloballyPositioned { coordinates -> pillContentSize = coordinates.size pillContentPosition = coordinates.positionInParent() }, ) { filteredActions.take(3).fastForEach { action -> Icon(action, backgroundColor) } filteredActions.take(3).fastForEach { action -> Icon(action, backgroundColor) } } CloseButton( onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize), ) CloseButton(onCloseClick = onCloseClick, modifier = Modifier.size(closeButtonSize)) } } Loading @@ -258,19 +256,16 @@ fun ShortPill( if (expansionAlpha < 1f && pillContentSize != IntSize.Zero) { with(LocalDensity.current) { val offsetX = pillContentPosition.x.toDp() + (pillContentSize.width.toDp() / 2) - pillContentPosition.x.toDp() + (pillContentSize.width.toDp() / 2) - (closeButtonSize / 2) val offsetY = pillContentPosition.y.toDp() + (pillContentSize.height.toDp() / 2) - pillContentPosition.y.toDp() + (pillContentSize.height.toDp() / 2) - (closeButtonSize / 2) CloseButton( onCloseClick = onCloseClick, modifier = Modifier .offset(x = offsetX, y = offsetY) Modifier.offset(x = offsetX, y = offsetY) .size(closeButtonSize) .graphicsLayer { alpha = 1f - expansionAlpha } // Fade IN .then(scaleAnimationModifier), Loading @@ -281,10 +276,7 @@ fun ShortPill( } @Composable private fun CloseButton( onCloseClick: () -> Unit, modifier: Modifier = Modifier, ) { private fun CloseButton(onCloseClick: () -> Unit, modifier: Modifier = Modifier) { PlatformIconButton( modifier = Loading Loading @@ -317,8 +309,7 @@ private fun Icon(action: ActionViewModel, backgroundColor: Color, modifier: Modi if (action.actionType == ActionType.MR) { Modifier.size(20.dp) } else { Modifier .size(19.25.dp) Modifier.size(19.25.dp) .border( width = 0.75.dp, color = MaterialTheme.colorScheme.outline, Loading