Merge "Update ButtonGroup following API feedback" into androidx-main
diff --git a/wear/compose/compose-material3/api/current.txt b/wear/compose/compose-material3/api/current.txt
index df002aa..1fb47dc 100644
--- a/wear/compose/compose-material3/api/current.txt
+++ b/wear/compose/compose-material3/api/current.txt
@@ -156,8 +156,10 @@
public final class ButtonGroupDefaults {
method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues fullWidthPaddings();
method public float getExpansionWidth();
+ method public float getMinWidth();
method public float getSpacing();
property public final float ExpansionWidth;
+ property public final float MinWidth;
property public final float Spacing;
field public static final androidx.wear.compose.material3.ButtonGroupDefaults INSTANCE;
}
@@ -167,7 +169,7 @@
}
public interface ButtonGroupScope {
- method public androidx.compose.ui.Modifier enlargeOnPress(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+ method public androidx.compose.ui.Modifier animateWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.InteractionSource interactionSource);
method public androidx.compose.ui.Modifier minWidth(androidx.compose.ui.Modifier, optional float minWidth);
method public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, @FloatRange(from=0.0, fromInclusive=false) float weight);
}
diff --git a/wear/compose/compose-material3/api/restricted_current.txt b/wear/compose/compose-material3/api/restricted_current.txt
index df002aa..1fb47dc 100644
--- a/wear/compose/compose-material3/api/restricted_current.txt
+++ b/wear/compose/compose-material3/api/restricted_current.txt
@@ -156,8 +156,10 @@
public final class ButtonGroupDefaults {
method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues fullWidthPaddings();
method public float getExpansionWidth();
+ method public float getMinWidth();
method public float getSpacing();
property public final float ExpansionWidth;
+ property public final float MinWidth;
property public final float Spacing;
field public static final androidx.wear.compose.material3.ButtonGroupDefaults INSTANCE;
}
@@ -167,7 +169,7 @@
}
public interface ButtonGroupScope {
- method public androidx.compose.ui.Modifier enlargeOnPress(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+ method public androidx.compose.ui.Modifier animateWidth(androidx.compose.ui.Modifier, androidx.compose.foundation.interaction.InteractionSource interactionSource);
method public androidx.compose.ui.Modifier minWidth(androidx.compose.ui.Modifier, optional float minWidth);
method public androidx.compose.ui.Modifier weight(androidx.compose.ui.Modifier, @FloatRange(from=0.0, fromInclusive=false) float weight);
}
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonGroupDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonGroupDemo.kt
index 76c8ba5..2832ea1 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonGroupDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonGroupDemo.kt
@@ -59,14 +59,14 @@
ButtonGroup(Modifier.fillMaxWidth()) {
Button(
onClick = {},
- Modifier.enlargeOnPress(interactionSource1),
+ Modifier.animateWidth(interactionSource1),
interactionSource = interactionSource1
) {
Text("<", modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center)
}
FilledIconButton(
onClick = {},
- Modifier.enlargeOnPress(interactionSource2),
+ Modifier.animateWidth(interactionSource2),
interactionSource = interactionSource2
) {
Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
@@ -79,7 +79,7 @@
}
Button(
onClick = {},
- Modifier.enlargeOnPress(interactionSource3),
+ Modifier.animateWidth(interactionSource3),
interactionSource = interactionSource3
) {
Text(">", modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center)
@@ -145,7 +145,7 @@
modifier
.height(IconToggleButtonDefaults.SmallButtonSize)
.fillMaxWidth()
- .enlargeOnPress(interactionSource),
+ .animateWidth(interactionSource),
onCheckedChange = { checked = !checked },
shapes = shapes,
interactionSource = interactionSource
@@ -168,7 +168,7 @@
modifier
.height(TextToggleButtonDefaults.DefaultButtonSize)
.fillMaxWidth()
- .enlargeOnPress(interactionSource),
+ .animateWidth(interactionSource),
onCheckedChange = { checked = !checked },
shapes = shapes,
interactionSource = interactionSource
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TransformingLazyColumnDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TransformingLazyColumnDemo.kt
index 4b6646b..7fd48eb 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TransformingLazyColumnDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TransformingLazyColumnDemo.kt
@@ -159,7 +159,7 @@
ButtonGroup(Modifier.scrollTransform(this@item)) {
Button(
onClick = {},
- Modifier.enlargeOnPress(interactionSource1),
+ Modifier.animateWidth(interactionSource1),
interactionSource = interactionSource1
) {
Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
@@ -168,7 +168,7 @@
}
Button(
onClick = {},
- Modifier.enlargeOnPress(interactionSource2),
+ Modifier.animateWidth(interactionSource2),
interactionSource = interactionSource2
) {
Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/ButtonGroupSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/ButtonGroupSample.kt
index 9b6d145..19240bb 100644
--- a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/ButtonGroupSample.kt
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/ButtonGroupSample.kt
@@ -19,7 +19,6 @@
import androidx.annotation.Sampled
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
@@ -41,17 +40,17 @@
ButtonGroup(Modifier.fillMaxWidth()) {
Button(
onClick = {},
- modifier = Modifier.enlargeOnPress(interactionSource1),
+ modifier = Modifier.animateWidth(interactionSource1),
interactionSource = interactionSource1
) {
- Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Text("L") }
+ Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { Text("L") }
}
Button(
onClick = {},
- modifier = Modifier.enlargeOnPress(interactionSource2),
+ modifier = Modifier.animateWidth(interactionSource2),
interactionSource = interactionSource2
) {
- Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Text("R") }
+ Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { Text("R") }
}
}
}
@@ -68,24 +67,24 @@
ButtonGroup(Modifier.fillMaxWidth()) {
Button(
onClick = {},
- modifier = Modifier.enlargeOnPress(interactionSource1),
+ modifier = Modifier.animateWidth(interactionSource1),
interactionSource = interactionSource1
) {
- Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Text("A") }
+ Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { Text("A") }
}
Button(
onClick = {},
- modifier = Modifier.weight(1.5f).enlargeOnPress(interactionSource2),
+ modifier = Modifier.weight(1.5f).animateWidth(interactionSource2),
interactionSource = interactionSource2
) {
- Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Text("B") }
+ Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { Text("B") }
}
Button(
onClick = {},
- modifier = Modifier.enlargeOnPress(interactionSource3),
+ modifier = Modifier.animateWidth(interactionSource3),
interactionSource = interactionSource3
) {
- Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Text("C") }
+ Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { Text("C") }
}
}
}
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ButtonGroup.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ButtonGroup.kt
index ebfc393f..d42dcc10 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ButtonGroup.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ButtonGroup.kt
@@ -21,7 +21,7 @@
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.AnimationSpec
import androidx.compose.animation.core.AnimationVector1D
-import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.InteractionSource
import androidx.compose.foundation.interaction.PressInteraction
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
@@ -101,7 +101,7 @@
return this.then(ButtonGroupElement(minWidth = minWidth))
}
- override fun Modifier.enlargeOnPress(interactionSource: MutableInteractionSource) =
+ override fun Modifier.animateWidth(interactionSource: InteractionSource) =
this.then(
EnlargeOnPressElement(
interactionSource = interactionSource,
@@ -206,13 +206,13 @@
* @param minWidth the minimum width. If none is specified, minimumInteractiveComponentSize is
* used.
*/
- public fun Modifier.minWidth(minWidth: Dp = minimumInteractiveComponentSize): Modifier
+ public fun Modifier.minWidth(minWidth: Dp = ButtonGroupDefaults.MinWidth): Modifier
/**
* Specifies the interaction source to use with this item. This is used to listen to events and
- * grow/shrink the buttons in reaction.
+ * animate growing the pressed button and shrink the neighbor(s).
*/
- public fun Modifier.enlargeOnPress(interactionSource: MutableInteractionSource): Modifier
+ public fun Modifier.animateWidth(interactionSource: InteractionSource): Modifier
}
/** Contains the default values used by [ButtonGroup] */
@@ -236,6 +236,9 @@
/** Spacing between buttons. */
public val Spacing: Dp = 4.dp
+ /** Default for the minimum width of buttons in a ButtonGroup */
+ public val MinWidth: Dp = minimumInteractiveComponentSize
+
/** Padding at each side of the [ButtonGroup], as a percentage of the available space. */
private const val FullWidthHorizontalPaddingPercentage: Float = 5.2f
}
@@ -303,7 +306,7 @@
}
internal class EnlargeOnPressElement(
- val interactionSource: MutableInteractionSource,
+ val interactionSource: InteractionSource,
val downAnimSpec: AnimationSpec<Float>,
val upAnimSpec: AnimationSpec<Float>,
) : ModifierNodeElement<EnlargeOnPressNode>() {
@@ -341,7 +344,7 @@
}
internal class EnlargeOnPressNode(
- var interactionSource: MutableInteractionSource,
+ var interactionSource: InteractionSource,
var downAnimSpec: AnimationSpec<Float>,
var upAnimSpec: AnimationSpec<Float>,
) : ParentDataModifierNode, Modifier.Node() {