Loading packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt +97 −43 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.widget.RemoteViews import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.Spring import androidx.compose.animation.core.Spring import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.animateFloatAsState Loading @@ -46,6 +45,7 @@ import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth Loading Loading @@ -585,24 +585,23 @@ private fun Toolbar( ) ) .onSizeChanged { setToolbarSize(it) }, .onSizeChanged { setToolbarSize(it) }, ) { ) { val spacerModifier = Modifier.width(ButtonDefaults.IconSpacing) ToolbarButton( isPrimary = !removeEnabled, if (!removeEnabled) { Button( modifier = Modifier.align(Alignment.CenterStart), modifier = Modifier.align(Alignment.CenterStart), onClick = onOpenWidgetPicker, onClick = onOpenWidgetPicker, colors = filledButtonColors(), contentPadding = Dimensions.ButtonPadding ) { ) { Icon(Icons.Default.Add, stringResource(R.string.hub_mode_add_widget_button_text)) Icon(Icons.Default.Add, stringResource(R.string.hub_mode_add_widget_button_text)) Spacer(spacerModifier) Text( Text( text = stringResource(R.string.hub_mode_add_widget_button_text), text = stringResource(R.string.hub_mode_add_widget_button_text), ) ) } } } if (removeEnabled) { AnimatedVisibility( modifier = Modifier.align(Alignment.Center), visible = removeEnabled, enter = fadeIn(), exit = fadeOut() ) { Button( Button( onClick = onRemoveClicked, onClick = onRemoveClicked, colors = filledButtonColors(), colors = filledButtonColors(), Loading @@ -610,33 +609,97 @@ private fun Toolbar( modifier = modifier = Modifier.graphicsLayer { alpha = removeButtonAlpha } Modifier.graphicsLayer { alpha = removeButtonAlpha } .onGloballyPositioned { setRemoveButtonCoordinates(it) } .onGloballyPositioned { setRemoveButtonCoordinates(it) } .align(Alignment.Center) ) { ) { RemoveButtonContent(spacerModifier) Row( horizontalArrangement = Arrangement.spacedBy( ButtonDefaults.IconSpacing, Alignment.CenterHorizontally ), verticalAlignment = Alignment.CenterVertically ) { Icon(Icons.Default.Close, stringResource(R.string.button_to_remove_widget)) Text( text = stringResource(R.string.button_to_remove_widget), ) } } } } } if (!removeEnabled) { ToolbarButton( Button( isPrimary = !removeEnabled, modifier = Modifier.align(Alignment.CenterEnd), modifier = Modifier.align(Alignment.CenterEnd), onClick = onEditDone, onClick = onEditDone, colors = filledButtonColors(), contentPadding = Dimensions.ButtonPadding ) { ) { Icon( Icon( Icons.Default.Check, Icons.Default.Check, stringResource(id = R.string.hub_mode_editing_exit_button_text) stringResource(id = R.string.hub_mode_editing_exit_button_text) ) ) Spacer(spacerModifier) Text( Text( text = stringResource(R.string.hub_mode_editing_exit_button_text), text = stringResource(R.string.hub_mode_editing_exit_button_text), ) ) } } } } } } /** * Toolbar button that displays as a filled button if primary, and an outline button if secondary. */ @Composable private fun ToolbarButton( isPrimary: Boolean = true, onClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit ) { val colors = LocalAndroidColorScheme.current AnimatedVisibility( visible = isPrimary, modifier = modifier, enter = fadeIn(), exit = fadeOut() ) { Button( onClick = onClick, colors = filledButtonColors(), contentPadding = Dimensions.ButtonPadding, ) { Row( horizontalArrangement = Arrangement.spacedBy(ButtonDefaults.IconSpacing, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically ) { content() } } } AnimatedVisibility( visible = !isPrimary, modifier = modifier, enter = fadeIn(), exit = fadeOut() ) { OutlinedButton( onClick = onClick, colors = ButtonDefaults.outlinedButtonColors( contentColor = colors.primary, ), border = BorderStroke(width = 2.0.dp, color = colors.primary), contentPadding = Dimensions.ButtonPadding, ) { Row( horizontalArrangement = Arrangement.spacedBy(ButtonDefaults.IconSpacing, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically ) { content() } } } } } @OptIn(ExperimentalAnimationApi::class) @Composable @Composable private fun AnimatedVisibilityScope.ButtonToEditWidgets( private fun AnimatedVisibilityScope.ButtonToEditWidgets( onClick: () -> Unit, onClick: () -> Unit, Loading Loading @@ -738,15 +801,6 @@ private fun PopupOnDismissCtaTile(onHidePopup: () -> Unit) { } } } } @Composable private fun RemoveButtonContent(spacerModifier: Modifier) { Icon(Icons.Default.Close, stringResource(R.string.button_to_remove_widget)) Spacer(spacerModifier) Text( text = stringResource(R.string.button_to_remove_widget), ) } @Composable @Composable private fun filledButtonColors(): ButtonColors { private fun filledButtonColors(): ButtonColors { val colors = LocalAndroidColorScheme.current val colors = LocalAndroidColorScheme.current Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt +97 −43 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.widget.RemoteViews import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.Spring import androidx.compose.animation.core.Spring import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.animateFloatAsState Loading @@ -46,6 +45,7 @@ import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth Loading Loading @@ -585,24 +585,23 @@ private fun Toolbar( ) ) .onSizeChanged { setToolbarSize(it) }, .onSizeChanged { setToolbarSize(it) }, ) { ) { val spacerModifier = Modifier.width(ButtonDefaults.IconSpacing) ToolbarButton( isPrimary = !removeEnabled, if (!removeEnabled) { Button( modifier = Modifier.align(Alignment.CenterStart), modifier = Modifier.align(Alignment.CenterStart), onClick = onOpenWidgetPicker, onClick = onOpenWidgetPicker, colors = filledButtonColors(), contentPadding = Dimensions.ButtonPadding ) { ) { Icon(Icons.Default.Add, stringResource(R.string.hub_mode_add_widget_button_text)) Icon(Icons.Default.Add, stringResource(R.string.hub_mode_add_widget_button_text)) Spacer(spacerModifier) Text( Text( text = stringResource(R.string.hub_mode_add_widget_button_text), text = stringResource(R.string.hub_mode_add_widget_button_text), ) ) } } } if (removeEnabled) { AnimatedVisibility( modifier = Modifier.align(Alignment.Center), visible = removeEnabled, enter = fadeIn(), exit = fadeOut() ) { Button( Button( onClick = onRemoveClicked, onClick = onRemoveClicked, colors = filledButtonColors(), colors = filledButtonColors(), Loading @@ -610,33 +609,97 @@ private fun Toolbar( modifier = modifier = Modifier.graphicsLayer { alpha = removeButtonAlpha } Modifier.graphicsLayer { alpha = removeButtonAlpha } .onGloballyPositioned { setRemoveButtonCoordinates(it) } .onGloballyPositioned { setRemoveButtonCoordinates(it) } .align(Alignment.Center) ) { ) { RemoveButtonContent(spacerModifier) Row( horizontalArrangement = Arrangement.spacedBy( ButtonDefaults.IconSpacing, Alignment.CenterHorizontally ), verticalAlignment = Alignment.CenterVertically ) { Icon(Icons.Default.Close, stringResource(R.string.button_to_remove_widget)) Text( text = stringResource(R.string.button_to_remove_widget), ) } } } } } if (!removeEnabled) { ToolbarButton( Button( isPrimary = !removeEnabled, modifier = Modifier.align(Alignment.CenterEnd), modifier = Modifier.align(Alignment.CenterEnd), onClick = onEditDone, onClick = onEditDone, colors = filledButtonColors(), contentPadding = Dimensions.ButtonPadding ) { ) { Icon( Icon( Icons.Default.Check, Icons.Default.Check, stringResource(id = R.string.hub_mode_editing_exit_button_text) stringResource(id = R.string.hub_mode_editing_exit_button_text) ) ) Spacer(spacerModifier) Text( Text( text = stringResource(R.string.hub_mode_editing_exit_button_text), text = stringResource(R.string.hub_mode_editing_exit_button_text), ) ) } } } } } } /** * Toolbar button that displays as a filled button if primary, and an outline button if secondary. */ @Composable private fun ToolbarButton( isPrimary: Boolean = true, onClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit ) { val colors = LocalAndroidColorScheme.current AnimatedVisibility( visible = isPrimary, modifier = modifier, enter = fadeIn(), exit = fadeOut() ) { Button( onClick = onClick, colors = filledButtonColors(), contentPadding = Dimensions.ButtonPadding, ) { Row( horizontalArrangement = Arrangement.spacedBy(ButtonDefaults.IconSpacing, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically ) { content() } } } AnimatedVisibility( visible = !isPrimary, modifier = modifier, enter = fadeIn(), exit = fadeOut() ) { OutlinedButton( onClick = onClick, colors = ButtonDefaults.outlinedButtonColors( contentColor = colors.primary, ), border = BorderStroke(width = 2.0.dp, color = colors.primary), contentPadding = Dimensions.ButtonPadding, ) { Row( horizontalArrangement = Arrangement.spacedBy(ButtonDefaults.IconSpacing, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically ) { content() } } } } } @OptIn(ExperimentalAnimationApi::class) @Composable @Composable private fun AnimatedVisibilityScope.ButtonToEditWidgets( private fun AnimatedVisibilityScope.ButtonToEditWidgets( onClick: () -> Unit, onClick: () -> Unit, Loading Loading @@ -738,15 +801,6 @@ private fun PopupOnDismissCtaTile(onHidePopup: () -> Unit) { } } } } @Composable private fun RemoveButtonContent(spacerModifier: Modifier) { Icon(Icons.Default.Close, stringResource(R.string.button_to_remove_widget)) Spacer(spacerModifier) Text( text = stringResource(R.string.button_to_remove_widget), ) } @Composable @Composable private fun filledButtonColors(): ButtonColors { private fun filledButtonColors(): ButtonColors { val colors = LocalAndroidColorScheme.current val colors = LocalAndroidColorScheme.current Loading