Skip to content

Commit

Permalink
Merge "Keep Add and Done visible as secondary buttons when a widget i…
Browse files Browse the repository at this point in the history
…s selected" into main
  • Loading branch information
Coco Duan authored and Android (Google) Code Review committed Jun 12, 2024
2 parents aab2d1c + d9776f4 commit b915c23
Showing 1 changed file with 97 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import android.widget.RemoteViews
import androidx.annotation.VisibleForTesting
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.AnimatedVisibilityScope
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.animateFloatAsState
Expand All @@ -46,6 +45,7 @@ import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
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.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
Expand Down Expand Up @@ -585,58 +585,121 @@ private fun Toolbar(
)
.onSizeChanged { setToolbarSize(it) },
) {
val spacerModifier = Modifier.width(ButtonDefaults.IconSpacing)

if (!removeEnabled) {
Button(
modifier = Modifier.align(Alignment.CenterStart),
onClick = onOpenWidgetPicker,
colors = filledButtonColors(),
contentPadding = Dimensions.ButtonPadding
) {
Icon(Icons.Default.Add, stringResource(R.string.hub_mode_add_widget_button_text))
Spacer(spacerModifier)
Text(
text = stringResource(R.string.hub_mode_add_widget_button_text),
)
}
ToolbarButton(
isPrimary = !removeEnabled,
modifier = Modifier.align(Alignment.CenterStart),
onClick = onOpenWidgetPicker,
) {
Icon(Icons.Default.Add, stringResource(R.string.hub_mode_add_widget_button_text))
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(
onClick = onRemoveClicked,
colors = filledButtonColors(),
contentPadding = Dimensions.ButtonPadding,
modifier =
Modifier.graphicsLayer { alpha = removeButtonAlpha }
.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) {
Button(
modifier = Modifier.align(Alignment.CenterEnd),
onClick = onEditDone,
colors = filledButtonColors(),
contentPadding = Dimensions.ButtonPadding
ToolbarButton(
isPrimary = !removeEnabled,
modifier = Modifier.align(Alignment.CenterEnd),
onClick = onEditDone,
) {
Icon(
Icons.Default.Check,
stringResource(id = R.string.hub_mode_editing_exit_button_text)
)
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
) {
Icon(
Icons.Default.Check,
stringResource(id = R.string.hub_mode_editing_exit_button_text)
)
Spacer(spacerModifier)
Text(
text = stringResource(R.string.hub_mode_editing_exit_button_text),
)
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
private fun AnimatedVisibilityScope.ButtonToEditWidgets(
onClick: () -> Unit,
Expand Down Expand Up @@ -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
private fun filledButtonColors(): ButtonColors {
val colors = LocalAndroidColorScheme.current
Expand Down

0 comments on commit b915c23

Please sign in to comment.