Fix NavigationDrawerItem with large font

The fixed-height constraint is loosened to a min-height
constraint to allow long/large labels to span multiple
lines without getting cut off.

Fixes: b/336381350
Test: added unit test
Change-Id: Id324aaf1266428b323b2b5247212987331a5e79c
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/DrawerSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/DrawerSamples.kt
index 6d07a51..8d8df43 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/DrawerSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/DrawerSamples.kt
@@ -104,7 +104,7 @@
                     items.forEach { item ->
                         NavigationDrawerItem(
                             icon = { Icon(item, contentDescription = null) },
-                            label = { Text(item.name) },
+                            label = { Text(item.name.substringAfterLast(".")) },
                             selected = item == selectedItem.value,
                             onClick = {
                                 scope.launch { drawerState.close() }
@@ -167,7 +167,7 @@
                     items.forEach { item ->
                         NavigationDrawerItem(
                             icon = { Icon(item, contentDescription = null) },
-                            label = { Text(item.name) },
+                            label = { Text(item.name.substringAfterLast(".")) },
                             selected = item == selectedItem.value,
                             onClick = {
                                 selectedItem.value = item
@@ -229,7 +229,7 @@
                     items.forEach { item ->
                         NavigationDrawerItem(
                             icon = { Icon(item, contentDescription = null) },
-                            label = { Text(item.name) },
+                            label = { Text(item.name.substringAfterLast(".")) },
                             selected = item == selectedItem.value,
                             onClick = {
                                 scope.launch { drawerState.close() }
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/NavigationDrawerItemTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/NavigationDrawerItemTest.kt
index 3ecd26f..af1eb3a 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/NavigationDrawerItemTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/NavigationDrawerItemTest.kt
@@ -29,18 +29,20 @@
 import androidx.compose.ui.test.SemanticsMatcher
 import androidx.compose.ui.test.assert
 import androidx.compose.ui.test.assertHasClickAction
-import androidx.compose.ui.test.assertHeightIsAtLeast
+import androidx.compose.ui.test.assertHeightIsEqualTo
 import androidx.compose.ui.test.assertIsEqualTo
 import androidx.compose.ui.test.assertIsNotSelected
 import androidx.compose.ui.test.assertIsSelected
 import androidx.compose.ui.test.assertLeftPositionInRootIsEqualTo
 import androidx.compose.ui.test.assertWidthIsEqualTo
 import androidx.compose.ui.test.getBoundsInRoot
+import androidx.compose.ui.test.getUnclippedBoundsInRoot
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onNodeWithText
 import androidx.compose.ui.test.onRoot
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth.assertThat
@@ -50,7 +52,6 @@
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
-@OptIn(ExperimentalMaterial3Api::class)
 class NavigationDrawerItemTest {
 
     @get:Rule
@@ -74,7 +75,27 @@
 
         rule.onNodeWithTag(DrawerItemTag)
             .assertWidthIsEqualTo(264.dp)
-            .assertHeightIsAtLeast(NavigationDrawerTokens.ActiveIndicatorHeight)
+            .assertHeightIsEqualTo(NavigationDrawerTokens.ActiveIndicatorHeight)
+    }
+
+    @Test
+    fun navigationDrawerItem_size_withLargeContent() {
+        rule.setMaterialContent(lightColorScheme()) {
+            Column(Modifier.width(264.dp)) {
+                NavigationDrawerItem(
+                    icon = {},
+                    label = { Text("Multi \nline \nlabel \nis \ntall") },
+                    selected = true,
+                    onClick = {},
+                    modifier = Modifier.testTag(DrawerItemTag)
+                )
+            }
+        }
+
+        rule.onNodeWithTag(DrawerItemTag).assertWidthIsEqualTo(264.dp)
+        rule.onNodeWithTag(DrawerItemTag).getUnclippedBoundsInRoot().let {
+            assertThat(it.height).isGreaterThan(NavigationDrawerTokens.ActiveIndicatorHeight)
+        }
     }
 
     @Test
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
index 88d5dd4..46dba83 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/NavigationDrawer.kt
@@ -35,7 +35,7 @@
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.heightIn
 import androidx.compose.foundation.layout.only
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.sizeIn
@@ -951,7 +951,7 @@
         onClick = onClick,
         modifier = modifier
             .semantics { role = Role.Tab }
-            .height(NavigationDrawerTokens.ActiveIndicatorHeight)
+            .heightIn(min = NavigationDrawerTokens.ActiveIndicatorHeight)
             .fillMaxWidth(),
         shape = shape,
         color = colors.containerColor(selected).value,