summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Tryshev <vadimt@google.com>2018-05-24 14:21:05 -0700
committerVadim Tryshev <vadimt@google.com>2018-05-29 18:51:57 +0000
commita3e48d8035c39f47e5dde30061adc0b53824e9e3 (patch)
treeee3696d94a07a028a713a0cf83a306bc101e64af
parenta845e1500ceba99c086f73be33230f3491981c52 (diff)
downloadLauncher3-a3e48d8035c39f47e5dde30061adc0b53824e9e3.tar.gz
Enable accessibility of Clear All button.
The button appears in the accessibility hierarchy as a child of RecentsView. This makes both Talkback and Switch access to work with it normally. Bug: 80156299 Test: Manual Change-Id: Ife2044b2ef78fb27b32f2d33fb17744662a2b054
-rw-r--r--quickstep/src/com/android/quickstep/views/ClearAllButton.java13
-rw-r--r--quickstep/src/com/android/quickstep/views/RecentsView.java44
-rw-r--r--quickstep/src/com/android/quickstep/views/RecentsViewContainer.java5
3 files changed, 51 insertions, 11 deletions
diff --git a/quickstep/src/com/android/quickstep/views/ClearAllButton.java b/quickstep/src/com/android/quickstep/views/ClearAllButton.java
index 25e3dc6c14..0025df136d 100644
--- a/quickstep/src/com/android/quickstep/views/ClearAllButton.java
+++ b/quickstep/src/com/android/quickstep/views/ClearAllButton.java
@@ -16,13 +16,11 @@
package com.android.quickstep.views;
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS;
-
import android.content.Context;
import android.graphics.Rect;
-import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Button;
public class ClearAllButton extends Button {
@@ -37,12 +35,9 @@ public class ClearAllButton extends Button {
}
@Override
- public boolean performAccessibilityAction(int action, Bundle arguments) {
- final boolean res = super.performAccessibilityAction(action, arguments);
- if (action == ACTION_ACCESSIBILITY_FOCUS) {
- mRecentsView.revealClearAllButton();
- }
- return res;
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ info.setParent(mRecentsView); // Pretend we are a part of the task carousel.
}
@Override
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 02cdd3a7c4..e98b16a449 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -39,6 +39,7 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.support.annotation.Nullable;
@@ -386,7 +387,13 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
private void updateClearAllButtonAlpha() {
if (mClearAllButton != null) {
final float alpha = calculateClearAllButtonAlpha();
- mIsClearAllButtonFullyRevealed = alpha == 1;
+ final boolean revealed = alpha == 1;
+ if (mIsClearAllButtonFullyRevealed != revealed) {
+ mIsClearAllButtonFullyRevealed = revealed;
+ mClearAllButton.setImportantForAccessibility(revealed ?
+ IMPORTANT_FOR_ACCESSIBILITY_YES :
+ IMPORTANT_FOR_ACCESSIBILITY_NO);
+ }
mClearAllButton.setAlpha(alpha * mContentAlpha);
}
}
@@ -1285,7 +1292,30 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
}
@Override
+ public boolean performAccessibilityAction(int action, Bundle arguments) {
+ if (getChildCount() > 0) {
+ switch (action) {
+ case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
+ if (!mIsClearAllButtonFullyRevealed && getCurrentPage() == getPageCount() - 1) {
+ revealClearAllButton();
+ return true;
+ }
+ }
+ case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
+ if (mIsClearAllButtonFullyRevealed) {
+ setCurrentPage(getChildCount() - 1);
+ return true;
+ }
+ }
+ break;
+ }
+ }
+ return super.performAccessibilityAction(action, arguments);
+ }
+
+ @Override
public void addChildrenForAccessibility(ArrayList<View> outChildren) {
+ outChildren.add(mClearAllButton);
for (int i = getChildCount() - 1; i >= 0; --i) {
outChildren.add(getChildAt(i));
}
@@ -1295,6 +1325,13 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
+ if (getChildCount() > 0) {
+ info.addAction(mIsClearAllButtonFullyRevealed ?
+ AccessibilityNodeInfo.ACTION_SCROLL_FORWARD :
+ AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
+ info.setScrollable(true);
+ }
+
final AccessibilityNodeInfo.CollectionInfo
collectionInfo = AccessibilityNodeInfo.CollectionInfo.obtain(
1, getChildCount(), false,
@@ -1306,7 +1343,10 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
+ event.setScrollable(getPageCount() > 0);
+
+ if (!mIsClearAllButtonFullyRevealed
+ && event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
final int childCount = getChildCount();
final int[] visibleTasks = getVisibleChildrenRange();
event.setFromIndex(childCount - visibleTasks[1] - 1);
diff --git a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java
index 31c8b64480..c6cd52769e 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java
@@ -124,4 +124,9 @@ public class RecentsViewContainer extends InsettableFrameLayout {
return mRecentsView.requestFocus(direction, previouslyFocusedRect) ||
super.requestFocus(direction, previouslyFocusedRect);
}
+
+ @Override
+ public void addChildrenForAccessibility(ArrayList<View> outChildren) {
+ outChildren.add(mRecentsView);
+ }
} \ No newline at end of file