From 3f51631b806fb81e2b76a626edcb78f1b46118d1 Mon Sep 17 00:00:00 2001 From: Vadim Tryshev Date: Wed, 16 May 2018 11:26:17 -0700 Subject: [PATCH] Adding Clear All to accessibility chevron on Recents For motivation, see email thread "Tweaks to for the reverted order of accessibility swiping" This doesn't add the action to the fallback Recents, so it will require more work. Bug: 79165501 Test: Manual Change-Id: I99d608ccc13cc1742dc4d427e763125788e8edd2 --- .../quickstep/views/ShelfScrimView.java | 43 +++++++++++++++++++ .../android/launcher3/views/ScrimView.java | 13 +++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java index 69b77b4538..24afd4868e 100644 --- a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java +++ b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java @@ -28,6 +28,9 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.Path.Direction; import android.graphics.Path.Op; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.util.AttributeSet; import com.android.launcher3.DeviceProfile; @@ -48,6 +51,7 @@ public class ShelfScrimView extends ScrimView { private static final int THRESHOLD_ALPHA_DARK = 102; private static final int THRESHOLD_ALPHA_LIGHT = 46; private static final int THRESHOLD_ALPHA_SUPER_LIGHT = 128; + private static final int CLEAR_ALL_TASKS = R.string.recents_clear_all; // In transposed layout, we simply draw a flat color. private boolean mDrawingFlatColor; @@ -213,4 +217,43 @@ public class ShelfScrimView extends ScrimView { mRadius, mRadius, mPaint); return minTop - mDragHandleSize - top; } + + @NonNull + @Override + protected AccessibilityHelper createAccessibilityHelper() { + return new ShelfScrimAccessibilityHelper(); + } + + protected class ShelfScrimAccessibilityHelper extends AccessibilityHelper { + @Override + protected void onPopulateNodeForVirtualView(int virtualViewId, + AccessibilityNodeInfoCompat node) { + super.onPopulateNodeForVirtualView(virtualViewId, node); + + if (mLauncher.isInState(OVERVIEW)) { + final RecentsView overviewPanel = mLauncher.getOverviewPanel(); + if (overviewPanel.getChildCount() != 0) { + node.addAction( + new AccessibilityNodeInfoCompat.AccessibilityActionCompat( + CLEAR_ALL_TASKS, + getContext().getText(CLEAR_ALL_TASKS))); + } + } + } + + @Override + protected boolean onPerformActionForVirtualView( + int virtualViewId, int action, Bundle arguments) { + if (super.onPerformActionForVirtualView(virtualViewId, action, arguments)) return true; + + if (action == CLEAR_ALL_TASKS) { + if (mLauncher.isInState(OVERVIEW)) { + mLauncher.getOverviewPanel().dismissAllTasks(); + } + return true; + } + + return false; + } + } } diff --git a/src/com/android/launcher3/views/ScrimView.java b/src/com/android/launcher3/views/ScrimView.java index 5dcfe4a708..49e96be6ed 100644 --- a/src/com/android/launcher3/views/ScrimView.java +++ b/src/com/android/launcher3/views/ScrimView.java @@ -38,6 +38,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.ViewCompat; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; @@ -113,12 +114,17 @@ public class ScrimView extends View implements Insettable, OnChangeListener, .getDimensionPixelSize(R.dimen.vertical_drag_handle_size); mDragHandleBounds = new Rect(0, 0, mDragHandleSize, mDragHandleSize); - mAccessibilityHelper = new AccessibilityHelper(); + mAccessibilityHelper = createAccessibilityHelper(); ViewCompat.setAccessibilityDelegate(this, mAccessibilityHelper); mAM = (AccessibilityManager) context.getSystemService(ACCESSIBILITY_SERVICE); } + @NonNull + protected AccessibilityHelper createAccessibilityHelper() { + return new AccessibilityHelper(); + } + @Override public void setInsets(Rect insets) { updateDragHandleBounds(); @@ -190,6 +196,9 @@ public class ScrimView extends View implements Insettable, OnChangeListener, if (mCurrentFlatColor != 0) { canvas.drawColor(mCurrentFlatColor); } + if (mDragHandle != null) { + mDragHandle.draw(canvas); + } } @Override @@ -323,7 +332,7 @@ public class ScrimView extends View implements Insettable, OnChangeListener, : IMPORTANT_FOR_ACCESSIBILITY_AUTO); } - private class AccessibilityHelper extends ExploreByTouchHelper { + protected class AccessibilityHelper extends ExploreByTouchHelper { private static final int DRAG_HANDLE_ID = 1;