Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf81f94e authored by Chaohui Wang's avatar Chaohui Wang
Browse files

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
parent a82a1ff8
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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>
+10 −6
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }