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

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

Accessibility options for a task

The list is:
Close [task]
<items from the task’s popup menu>

Also making a current task in carousel get accessibility focus. This
prevents losing focus after closing a task, and makes sense generally.

Bug: 72409756
Test: Manual
Change-Id: I2cfdfd4693a255f63417d922cb6aa4841db1d3c3
parent 3a387897
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -28,5 +28,6 @@
        android:id="@+id/icon"
        android:layout_width="@dimen/task_thumbnail_icon_size"
        android:layout_height="@dimen/task_thumbnail_icon_size"
        android:importantForAccessibility="no"
        android:layout_gravity="top|center_horizontal" />
</com.android.quickstep.views.TaskView>
 No newline at end of file
+3 −0
Original line number Diff line number Diff line
@@ -35,4 +35,7 @@

    <!-- Recents: The empty recents string. [CHAR LIMIT=NONE] -->
    <string name="recents_empty_message">No recent items</string>

    <!-- Content description for the recent apps's accessibility option that closes it. [CHAR LIMIT=NONE] -->
    <string name="accessibility_close_task">Close</string>
</resources>
 No newline at end of file
+7 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewDebug;
import android.view.accessibility.AccessibilityEvent;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.DeviceProfile;
@@ -943,4 +944,10 @@ public abstract class RecentsView<T extends BaseActivity>
        });
        return mPendingAnimation;
    }

    @Override
    protected void notifyPageSwitchListener(int prevPage) {
        super.notifyPageSwitchListener(prevPage);
        getChildAt(mCurrentPage).sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ public class TaskMenuView extends AbstractFloatingView {
    private static final Rect sTempRect = new Rect();

    /** Note that these will be shown in order from top to bottom, if available for the task. */
    private static final TaskSystemShortcut[] MENU_OPTIONS = new TaskSystemShortcut[] {
    public static final TaskSystemShortcut[] MENU_OPTIONS = new TaskSystemShortcut[] {
            new TaskSystemShortcut.AppInfo(),
            new TaskSystemShortcut.SplitScreen(),
            new TaskSystemShortcut.Pin(),
+44 −0
Original line number Diff line number Diff line
@@ -22,10 +22,12 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.Outline;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewOutlineProvider;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout;
import android.widget.ImageView;

@@ -33,6 +35,7 @@ import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
import com.android.quickstep.RecentsAnimationInterpolator;
import com.android.quickstep.TaskSystemShortcut;
import com.android.quickstep.views.RecentsView.PageCallbacks;
import com.android.quickstep.views.RecentsView.ScrollState;
import com.android.systemui.shared.recents.model.Task;
@@ -219,4 +222,45 @@ public class TaskView extends FrameLayout implements TaskCallbacks, PageCallback
                    view.getHeight(), mRadius);
        }
    }

    @Override
    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
        super.onInitializeAccessibilityNodeInfo(info);

        info.addAction(
                new AccessibilityNodeInfo.AccessibilityAction(R.string.accessibility_close_task,
                        getContext().getText(R.string.accessibility_close_task)));

        final Context context = getContext();
        final BaseDraggingActivity activity = BaseDraggingActivity.fromContext(context);
        for (TaskSystemShortcut menuOption : TaskMenuView.MENU_OPTIONS) {
            OnClickListener onClickListener = menuOption.getOnClickListener(activity, this);
            if (onClickListener != null) {
                info.addAction(new AccessibilityNodeInfo.AccessibilityAction(menuOption.labelResId,
                        context.getText(menuOption.labelResId)));
            }
        }
    }

    @Override
    public boolean performAccessibilityAction(int action, Bundle arguments) {
        if (action == R.string.accessibility_close_task) {
            ((RecentsView) getParent()).dismissTask(this, true /*animateTaskView*/,
                    true /*removeTask*/);
            return true;
        }

        for (TaskSystemShortcut menuOption : TaskMenuView.MENU_OPTIONS) {
            if (action == menuOption.labelResId) {
                OnClickListener onClickListener = menuOption.getOnClickListener(
                        BaseDraggingActivity.fromContext(getContext()), this);
                if (onClickListener != null) {
                    onClickListener.onClick(this);
                }
                return true;
            }
        }

        return super.performAccessibilityAction(action, arguments);
    }
}