Skip to content

Commit db0dfe0

Browse files
committed
Adds Card
Ensures semantic components are not duplicated
1 parent 6c29f06 commit db0dfe0

File tree

3 files changed

+33
-3
lines changed
  • compose-material/src

3 files changed

+33
-3
lines changed

compose-material/src/main/java/com/google/android/horologist/compose/material/Button.kt

+9-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ import androidx.compose.ui.Modifier
3333
import androidx.compose.ui.draw.clip
3434
import androidx.compose.ui.graphics.vector.ImageVector
3535
import androidx.compose.ui.semantics.Role
36+
import androidx.compose.ui.semantics.clearAndSetSemantics
37+
import androidx.compose.ui.semantics.contentDescription
38+
import androidx.compose.ui.semantics.role
3639
import androidx.compose.ui.unit.Dp
3740
import androidx.wear.compose.material.Button
3841
import androidx.wear.compose.material.ButtonColors
@@ -131,7 +134,12 @@ internal fun Button(
131134
val interactionSource = remember { MutableInteractionSource() }
132135
Button(
133136
onClick = onClick,
134-
modifier = modifier.size(buttonSize.tapTargetSize),
137+
modifier = modifier
138+
.size(buttonSize.tapTargetSize)
139+
.clearAndSetSemantics {
140+
role = Role.Button
141+
this.contentDescription = contentDescription
142+
},
135143
enabled = enabled,
136144
colors = colors,
137145
interactionSource = interactionSource,

compose-material/src/main/java/com/google/android/horologist/compose/material/Card.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import androidx.compose.ui.graphics.Color
3131
import androidx.compose.ui.graphics.Shape
3232
import androidx.compose.ui.graphics.painter.Painter
3333
import androidx.compose.ui.semantics.Role
34+
import androidx.compose.ui.semantics.semantics
3435
import androidx.wear.compose.material.CardDefaults
3536
import androidx.wear.compose.material.MaterialTheme
3637
import com.google.android.horologist.annotations.ExperimentalHorologistApi
@@ -56,7 +57,7 @@ public fun Card(
5657
val interactionSource = remember { MutableInteractionSource() }
5758
androidx.wear.compose.material.Card(
5859
onClick = onClick,
59-
modifier = modifier,
60+
modifier = modifier.semantics(mergeDescendants = true) {},
6061
backgroundPainter = backgroundPainter,
6162
contentColor = contentColor,
6263
enabled = enabled,
@@ -75,7 +76,7 @@ public fun Card(
7576
onClick = onClick,
7677
onLongClick = onLongClick,
7778
onDoubleClick = onDoubleClick,
78-
role = Role.Button,
79+
role = role,
7980
),
8081
) {
8182
content()

compose-material/src/test/java/com/google/android/horologist/compose/material/ButtonA11yTest.kt

+21
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@ import androidx.compose.material.icons.Icons
2222
import androidx.compose.material.icons.filled.Check
2323
import androidx.compose.ui.Alignment
2424
import androidx.compose.ui.Modifier
25+
import androidx.compose.ui.test.onRoot
26+
import androidx.compose.ui.test.printToString
2527
import com.google.android.horologist.screenshots.ScreenshotBaseTest
2628
import com.google.android.horologist.screenshots.ScreenshotTestRule.Companion.screenshotTestRuleParams
29+
import org.junit.Assert
2730
import org.junit.Test
2831

2932
class ButtonA11yTest : ScreenshotBaseTest(
@@ -44,6 +47,15 @@ class ButtonA11yTest : ScreenshotBaseTest(
4447
)
4548
}
4649
}
50+
51+
screenshotTestRule.interact {
52+
val logEntries = onRoot().printToString()
53+
.split("\n")
54+
.map { it.trim() }
55+
56+
Assert.assertEquals(1, logEntries.filter { it.startsWith("Role")}.size)
57+
Assert.assertEquals(1, logEntries.filter { it.startsWith("ContentDescription")}.size)
58+
}
4759
}
4860

4961
@Test
@@ -58,5 +70,14 @@ class ButtonA11yTest : ScreenshotBaseTest(
5870
)
5971
}
6072
}
73+
74+
screenshotTestRule.interact {
75+
val logEntries = onRoot().printToString()
76+
.split("\n")
77+
.map { it.trim() }
78+
79+
Assert.assertEquals(1, logEntries.filter { it.startsWith("Role")}.size)
80+
Assert.assertEquals(1, logEntries.filter { it.startsWith("ContentDescription")}.size)
81+
}
6182
}
6283
}

0 commit comments

Comments
 (0)