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() {