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

Commit 0e782cb5 authored by Evan Chen's avatar Evan Chen
Browse files

Fix talkback when expand and collapse the permission list

1. Announce expand/collapse when double tap the permission item
2. Announce expanded/collapsed when single tap the permission item

Test: cts
Fix: 278486577, 278638141
Change-Id: Ia9b00a555a543aae6746bf12cf8b2d131f0c5aea
parent fce104fd
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -113,6 +113,18 @@
    <!-- Back button for the helper consent dialog [CHAR LIMIT=30] -->
    <string name="consent_back">Back</string>

    <!-- Action when permission list view is expanded CHAR LIMIT=30] -->
    <string name="permission_expanded">Expanded</string>

    <!-- Expand action permission list CHAR LIMIT=30] -->
    <string name="permission_expand">Expand</string>

    <!-- Action when permission list view is collapsed CHAR LIMIT=30] -->
    <string name="permission_collapsed">Collapsed</string>

    <!-- Collapse action permission list CHAR LIMIT=30] -->
    <string name="permission_collapse">Collapse</string>

    <!-- ================== System data transfer ==================== -->
    <!-- Title of the permission sync confirmation dialog. [CHAR LIMIT=NONE] -->
    <string name="permission_sync_confirmation_title">Give apps on &lt;strong&gt;<xliff:g id="companion_device_name" example="Galaxy Watch 5">%1$s</xliff:g>&lt;/strong&gt; the same permissions as on &lt;strong&gt;<xliff:g id="primary_device_name" example="Pixel 6">%2$s</xliff:g>&lt;/strong&gt;?</string>
+25 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.util.ArrayMap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
@@ -121,6 +122,10 @@ class PermissionListAdapter extends RecyclerView.Adapter<PermissionListAdapter.V
        if (viewHolder.mExpandButton.getTag() == null) {
            viewHolder.mExpandButton.setTag(R.drawable.btn_expand_more);
        }

        setAccessibility(view, viewType,
                AccessibilityNodeInfo.ACTION_CLICK, R.string.permission_expand);

        // Add expand buttons if the permissions are more than PERMISSION_SIZE in this list also
        // make the summary invisible by default.
        if (mPermissions.size() > PERMISSION_SIZE) {
@@ -132,10 +137,18 @@ class PermissionListAdapter extends RecyclerView.Adapter<PermissionListAdapter.V
                    viewHolder.mExpandButton.setImageResource(R.drawable.btn_expand_less);
                    viewHolder.mPermissionSummary.setVisibility(View.VISIBLE);
                    viewHolder.mExpandButton.setTag(R.drawable.btn_expand_less);
                    view.setContentDescription(mContext.getString(R.string.permission_expanded));
                    setAccessibility(view, viewType,
                            AccessibilityNodeInfo.ACTION_CLICK, R.string.permission_collapse);
                    viewHolder.mPermissionSummary.setFocusable(true);
                } else {
                    viewHolder.mExpandButton.setImageResource(R.drawable.btn_expand_more);
                    viewHolder.mPermissionSummary.setVisibility(View.GONE);
                    viewHolder.mExpandButton.setTag(R.drawable.btn_expand_more);
                    view.setContentDescription(mContext.getString(R.string.permission_collapsed));
                    setAccessibility(view, viewType,
                            AccessibilityNodeInfo.ACTION_CLICK, R.string.permission_expanded);
                    viewHolder.mPermissionSummary.setFocusable(false);
                }
            });
        } else {
@@ -187,6 +200,18 @@ class PermissionListAdapter extends RecyclerView.Adapter<PermissionListAdapter.V
        }
    }

    private void setAccessibility(View view, int viewType, int action, int resourceId) {
        final String actionString = mContext.getString(resourceId);
        final String permission = mContext.getString(sTitleMap.get(viewType));
        view.setAccessibilityDelegate(new View.AccessibilityDelegate() {
            public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
                super.onInitializeAccessibilityNodeInfo(host, info);
                info.addAction(new AccessibilityNodeInfo.AccessibilityAction(action,
                        actionString + permission));
            }
        });
    }

    void setPermissionType(List<Integer> permissions) {
        mPermissions = permissions;
    }