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

Commit a3e48d80 authored by Vadim Tryshev's avatar Vadim Tryshev
Browse files

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
parent a845e150
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -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
+42 −2
Original line number Diff line number Diff line
@@ -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);
        }
    }
@@ -1284,8 +1291,31 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
        scrollTo(mIsRtl ? 0 : computeMaxScrollX(), 0);
    }

    @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);
+5 −0
Original line number Diff line number Diff line
@@ -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