Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b915c239 authored by Coco Duan's avatar Coco Duan Committed by Android (Google) Code Review
Browse files

Merge "Keep Add and Done visible as secondary buttons when a widget is selected" into main

parents aab2d1c5 d9776f43
Loading
Loading
Loading
Loading
+97 −43
Original line number Original line Diff line number Diff line
@@ -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
@@ -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
@@ -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(),
@@ -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,
@@ -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