From cf81f94e3b9b46d63d20596b09772724cfde3a33 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Sat, 30 Apr 2022 22:58:05 +0800 Subject: [PATCH] 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 --- res/layout/user_select_item.xml | 6 +++--- .../dashboard/profileselector/UserAdapter.java | 16 ++++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/res/layout/user_select_item.xml b/res/layout/user_select_item.xml index fa0c91a4ab5..894f59a1ae5 100644 --- a/res/layout/user_select_item.xml +++ b/res/layout/user_select_item.xml @@ -15,9 +15,9 @@ --> + android:layout_height="112dp" + android:importantForAccessibility="no"> diff --git a/src/com/android/settings/dashboard/profileselector/UserAdapter.java b/src/com/android/settings/dashboard/profileselector/UserAdapter.java index 2573d11ce19..e88b9cb6c74 100644 --- a/src/com/android/settings/dashboard/profileselector/UserAdapter.java +++ b/src/com/android/settings/dashboard/profileselector/UserAdapter.java @@ -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); + } } }