summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHai Zhang <zhanghai@google.com>2019-04-10 20:13:20 +0800
committerHai Zhang <zhanghai@google.com>2019-04-10 20:23:38 +0800
commitd76b792fb4c0928da2f8820b964635fefa0138fb (patch)
treea4cff74b1d32e23b57f2e7ae1d4fbbf1122baecd
parent6ebb0d54f459ab709ca543d2fb98e4a80e16b0ce (diff)
downloadandroid_packages_apps_PackageInstaller-d76b792fb4c0928da2f8820b964635fefa0138fb.tar.gz
android_packages_apps_PackageInstaller-d76b792fb4c0928da2f8820b964635fefa0138fb.tar.bz2
android_packages_apps_PackageInstaller-d76b792fb4c0928da2f8820b964635fefa0138fb.zip
Improve a11y of role UI.
Call setChecked() for RadioButton so that it reports the correct checked state for a11y, and increse CheckBox touch target size. Bug: 128713569 Test: manual Change-Id: I4e24303d342be286af56ffe9026e493d35ba7319
-rw-r--r--res/values/styles.xml2
-rw-r--r--src/com/android/packageinstaller/role/ui/CheckableLinearLayout.java22
2 files changed, 23 insertions, 1 deletions
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 48504122..852d3e33 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -703,7 +703,7 @@
<style name="RequestRoleViewCheckbox">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
- <item name="android:minHeight">40dp</item>
+ <item name="android:minHeight">?android:listPreferredItemHeightSmall</item>
<item name="android:paddingStart">16dp</item>
<item name="android:textAppearance">@style/android:TextAppearance.Material.Subhead</item>
</style>
diff --git a/src/com/android/packageinstaller/role/ui/CheckableLinearLayout.java b/src/com/android/packageinstaller/role/ui/CheckableLinearLayout.java
index 19e770d0..507bef78 100644
--- a/src/com/android/packageinstaller/role/ui/CheckableLinearLayout.java
+++ b/src/com/android/packageinstaller/role/ui/CheckableLinearLayout.java
@@ -18,6 +18,8 @@ package com.android.packageinstaller.role.ui;
import android.content.Context;
import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
import android.widget.Checkable;
import android.widget.LinearLayout;
@@ -71,6 +73,7 @@ public class CheckableLinearLayout extends LinearLayout implements Checkable {
mChecked = checked;
refreshDrawableState();
+ updateChildrenChecked();
}
@Override
@@ -87,4 +90,23 @@ public class CheckableLinearLayout extends LinearLayout implements Checkable {
}
return state;
}
+
+ private void updateChildrenChecked() {
+ updateChildrenChecked(this, mChecked);
+ }
+
+ // We call setChecked() on checkable children so that accessibility can get the correct state.
+ private static void updateChildrenChecked(@NonNull ViewGroup viewGroup, boolean checked) {
+ int count = viewGroup.getChildCount();
+ for (int i = 0; i < count; i++) {
+ View child = viewGroup.getChildAt(i);
+ if (child.isDuplicateParentStateEnabled()) {
+ if (child instanceof Checkable) {
+ ((Checkable) child).setChecked(checked);
+ } else if (child instanceof ViewGroup) {
+ updateChildrenChecked((ViewGroup) child, checked);
+ }
+ }
+ }
+ }
}