diff options
author | Hai Zhang <zhanghai@google.com> | 2019-04-10 20:13:20 +0800 |
---|---|---|
committer | Hai Zhang <zhanghai@google.com> | 2019-04-10 20:23:38 +0800 |
commit | d76b792fb4c0928da2f8820b964635fefa0138fb (patch) | |
tree | a4cff74b1d32e23b57f2e7ae1d4fbbf1122baecd | |
parent | 6ebb0d54f459ab709ca543d2fb98e4a80e16b0ce (diff) | |
download | android_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.xml | 2 | ||||
-rw-r--r-- | src/com/android/packageinstaller/role/ui/CheckableLinearLayout.java | 22 |
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); + } + } + } + } } |