Improve Talkback for user select dialog

Before this fix,
Both the list item and button are focusable by Talkback, and the list
item one is ok ("Personal, one of two."), the button one is read as
"Unlabeled".

After this fix,
Only the button is focusable by Talkback, read as "Personal, in list, 2
items."

Also test to make sure Switch Access not break.

Bug: 174626616
Test: manual test when Talkback / Switch Access enabled
Change-Id: I72765c1bcbb75e544d5829b21c3e2baf4355be1f
This commit is contained in:
Chaohui Wang
2022-04-30 22:58:05 +08:00
parent a82a1ff84e
commit cf81f94e3b
2 changed files with 13 additions and 9 deletions

View File

@@ -15,9 +15,9 @@
-->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/widget_frame"
android:layout_width="120dp"
android:layout_height="112dp">
android:layout_height="112dp"
android:importantForAccessibility="no">
<FrameLayout
android:id="@+id/button"
@@ -41,7 +41,7 @@
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:labelFor="@android:id/icon"
android:textSize="14sp"
android:importantForAccessibility="no"
style="@style/TextAppearance.PreferenceTitle.SettingsLib"/>
</RelativeLayout>

View File

@@ -120,7 +120,7 @@ public class UserAdapter extends BaseAdapter {
private void bindViewHolder(ViewHolder holder, int position) {
UserDetails userDetails = getItem(position);
holder.getIconView().setImageDrawable(userDetails.mIcon);
holder.getTitleView().setText(userDetails.mTitle);
holder.setTitle(userDetails.mTitle);
}
@Override
@@ -206,18 +206,19 @@ public class UserAdapter extends BaseAdapter {
static class ViewHolder extends RecyclerView.ViewHolder {
private final ImageView mIconView;
private final TextView mTitleView;
private final View mButtonView;
private ViewHolder(View view) {
super(view);
mIconView = view.findViewById(android.R.id.icon);
mTitleView = view.findViewById(android.R.id.title);
mButtonView = view.findViewById(R.id.button);
}
private ViewHolder(View view, OnClickListener onClickListener) {
this(view);
View button = view.findViewById(R.id.button);
if (button != null) {
button.setOnClickListener(v -> onClickListener.onClick(getAdapterPosition()));
if (mButtonView != null) {
mButtonView.setOnClickListener(v -> onClickListener.onClick(getAdapterPosition()));
}
}
@@ -225,8 +226,11 @@ public class UserAdapter extends BaseAdapter {
return mIconView;
}
private TextView getTitleView() {
return mTitleView;
private void setTitle(CharSequence title) {
mTitleView.setText(title);
if (mButtonView != null) {
mButtonView.setContentDescription(title);
}
}
}