Skip to content

Commit da3ebb8

Browse files
Update accessibility snippets (#508)
* Add new and updated accessibility DAC snippets * Import hideFromAccessibility * Apply Spotless * Revert removal of some existing a11y snippets
1 parent 03e2b27 commit da3ebb8

File tree

5 files changed

+484
-9
lines changed

5 files changed

+484
-9
lines changed

compose/snippets/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ dependencies {
160160
debugImplementation(libs.androidx.compose.ui.tooling)
161161

162162
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
163+
androidTestImplementation(libs.androidx.compose.ui.test.junit4.accessibility)
163164
debugImplementation(libs.androidx.compose.ui.test.manifest)
164165

165166
}

compose/snippets/src/androidTest/java/com/example/compose/snippets/accessibility/AccessibilitySnippets.kt

Lines changed: 89 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,109 @@
1616

1717
package com.example.compose.snippets.accessibility
1818

19+
import androidx.activity.ComponentActivity
20+
import androidx.compose.foundation.background
21+
import androidx.compose.foundation.clickable
22+
import androidx.compose.foundation.layout.Box
23+
import androidx.compose.foundation.layout.fillMaxSize
24+
import androidx.compose.foundation.layout.size
25+
import androidx.compose.material3.Text
26+
import androidx.compose.ui.Alignment
27+
import androidx.compose.ui.Modifier
28+
import androidx.compose.ui.graphics.Color
1929
import androidx.compose.ui.semantics.SemanticsActions
30+
import androidx.compose.ui.semantics.contentDescription
2031
import androidx.compose.ui.semantics.getOrNull
32+
import androidx.compose.ui.semantics.semantics
2133
import androidx.compose.ui.test.SemanticsMatcher
2234
import androidx.compose.ui.test.assert
35+
import androidx.compose.ui.test.junit4.accessibility.enableAccessibilityChecks
2336
import androidx.compose.ui.test.junit4.createAndroidComposeRule
24-
import com.example.compose.snippets.MyActivity
37+
import androidx.compose.ui.test.onRoot
38+
import androidx.compose.ui.test.tryPerformAccessibilityChecks
39+
import androidx.compose.ui.unit.dp
40+
import com.google.android.apps.common.testing.accessibility.framework.AccessibilityCheckResult
41+
import com.google.android.apps.common.testing.accessibility.framework.integrations.espresso.AccessibilityValidator
2542
import org.junit.Ignore
2643
import org.junit.Rule
2744
import org.junit.Test
2845

29-
class AccessibilitySnippetsTest {
46+
class AccessibilityTest {
47+
48+
// [START android_compose_accessibility_testing_label]
3049
@Rule
3150
@JvmField
32-
val composeTestRule = createAndroidComposeRule<MyActivity>()
51+
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
52+
53+
@Test
54+
fun noAccessibilityLabel() {
55+
composeTestRule.setContent {
56+
Box(
57+
modifier = Modifier
58+
.size(50.dp, 50.dp)
59+
.background(color = Color.Gray)
60+
.clickable { }
61+
.semantics {
62+
contentDescription = ""
63+
}
64+
)
65+
}
3366

34-
private val nodeMatcher = SemanticsMatcher("DUMMY") { it.isRoot }
67+
composeTestRule.enableAccessibilityChecks()
3568

36-
@Ignore("Dummy test")
69+
// Any action (such as performClick) will perform accessibility checks too:
70+
composeTestRule.onRoot().tryPerformAccessibilityChecks()
71+
}
72+
// [END android_compose_accessibility_testing_label]
3773

74+
// [START android_compose_accessibility_testing_click]
75+
@Test
76+
fun smallClickTarget() {
77+
composeTestRule.setContent {
78+
Box(
79+
modifier = Modifier
80+
.size(20.dp, 20.dp)
81+
.background(color = Color(0xFFFAFBFC))
82+
.clickable { }
83+
)
84+
}
85+
86+
composeTestRule.enableAccessibilityChecks()
87+
88+
// Any action (such as performClick) will perform accessibility checks too:
89+
composeTestRule.onRoot().tryPerformAccessibilityChecks()
90+
}
91+
// [END android_compose_accessibility_testing_click]
92+
93+
// [START android_compose_accessibility_testing_validator]
94+
@Test
95+
fun lowContrastScreen() {
96+
composeTestRule.setContent {
97+
Box(
98+
modifier = Modifier
99+
.fillMaxSize()
100+
.background(color = Color(0xFFFAFBFC)),
101+
contentAlignment = Alignment.Center
102+
) {
103+
Text(text = "Hello", color = Color(0xFFB0B1B2))
104+
}
105+
}
106+
107+
// Optionally, set AccessibilityValidator manually
108+
val accessibilityValidator = AccessibilityValidator()
109+
.setThrowExceptionFor(
110+
AccessibilityCheckResult.AccessibilityCheckResultType.WARNING
111+
)
112+
113+
composeTestRule.enableAccessibilityChecks(accessibilityValidator)
114+
115+
composeTestRule.onRoot().tryPerformAccessibilityChecks()
116+
}
117+
// [END android_compose_accessibility_testing_validator]
118+
119+
private val nodeMatcher = SemanticsMatcher(description = "DUMMY") { it.isRoot }
120+
121+
@Ignore("Dummy test")
38122
// [START android_compose_accessibility_testing]
39123
@Test
40124
fun test() {

compose/snippets/src/androidTest/java/com/example/compose/snippets/semantics/SemanticsSnippets.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package com.example.compose.snippets.semantics
1818

19-
import androidx.compose.material3.Text
2019
import androidx.compose.runtime.Composable
2120
import androidx.compose.ui.semantics.Role
2221
import androidx.compose.ui.semantics.SemanticsProperties

0 commit comments

Comments
 (0)