summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ben Lin <linben@google.com> 2016-08-19 20:19:38 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-08-19 20:19:40 +0000
commitf4c5b344ae0845a80a05bd0a97906170fc552956 (patch)
treed6e1a7e3aa20d202e6dfd14f6ea45a1ceb0b7e29
parent4ecc9d2db400225b6f5e0d76d17b8f94354996a6 (diff)
parentd06893eb1075bfbe36532e488880c3ac12dcf897 (diff)
Merge "DO NOT MERGE: Enable switch access api to activate/open files in DocsUI." into nyc-mr1-dev
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java38
1 files changed, 37 insertions, 1 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
index b7c0a9c1be1b..8aa7f6e69458 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -53,10 +53,13 @@ import android.provider.DocumentsContract.Document;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v13.view.DragStartHelper;
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.OnItemTouchListener;
+import android.support.v7.widget.RecyclerView.Recycler;
import android.support.v7.widget.RecyclerView.RecyclerListener;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.text.BidiFormatter;
@@ -243,7 +246,40 @@ public class DirectoryFragment extends Fragment
mRecView.setAdapter(mAdapter);
- mLayout = new GridLayoutManager(getContext(), mColumnCount);
+ // Switch Access Accessibility API needs an {@link AccessibilityDelegate} to know the proper
+ // route when user selects an UI element. It usually guesses this if the element has an
+ // {@link OnClickListener}, but since we do not have one for itemView, we will need to
+ // manually route it to the right behavior. RecyclerView has its own AccessibilityDelegate,
+ // and routes it to its LayoutManager; so we must override the LayoutManager's accessibility
+ // methods to route clicks correctly.
+ mLayout = new GridLayoutManager(getContext(), mColumnCount) {
+ @Override
+ public void onInitializeAccessibilityNodeInfoForItem(
+ RecyclerView.Recycler recycler, RecyclerView.State state,
+ View host, AccessibilityNodeInfoCompat info) {
+ super.onInitializeAccessibilityNodeInfoForItem(recycler, state, host, info);
+ info.addAction(AccessibilityActionCompat.ACTION_CLICK);
+ }
+
+ @Override
+ public boolean performAccessibilityActionForItem(
+ RecyclerView.Recycler recycler, RecyclerView.State state, View view,
+ int action, Bundle args) {
+ // We are only handling click events; route all other to default implementation
+ if (action == AccessibilityNodeInfoCompat.ACTION_CLICK) {
+ RecyclerView.ViewHolder vh = mRecView.getChildViewHolder(view);
+ if (vh instanceof DocumentHolder) {
+ DocumentHolder dh = (DocumentHolder) vh;
+ if (dh.mEventListener != null) {
+ dh.mEventListener.onActivate(dh);
+ return true;
+ }
+ }
+ }
+ return super.performAccessibilityActionForItem(recycler, state, view, action,
+ args);
+ }
+ };
SpanSizeLookup lookup = mAdapter.createSpanSizeLookup();
if (lookup != null) {
mLayout.setSpanSizeLookup(lookup);