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

Commit 0ca6c30b authored by Vadim Tryshev's avatar Vadim Tryshev
Browse files

Enabling creating additional shortcuts by any launcher

Bug: 117888000
Test: manual test with a prototype
Change-Id: I4d678a6c35341e61c74ed295d2b2202c5eebe034
parent 6083c63e
Loading
Loading
Loading
Loading
+31 −4
Original line number Diff line number Diff line
@@ -20,21 +20,34 @@ import android.content.Context;
import android.graphics.Matrix;
import android.view.View;

import androidx.annotation.AnyThread;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.R;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.ResourceBasedOverride;
import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.ThumbnailData;

import androidx.annotation.AnyThread;
import java.util.ArrayList;
import java.util.List;

/**
 * Factory class to create and add an overlays on the TaskView
 */
public class TaskOverlayFactory implements ResourceBasedOverride {

    private static TaskOverlayFactory sInstance;

    /** 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[]{
            new TaskSystemShortcut.AppInfo(),
            new TaskSystemShortcut.SplitScreen(),
            new TaskSystemShortcut.Pin(),
            new TaskSystemShortcut.Install(),
    };

    public static TaskOverlayFactory get(Context context) {
        Preconditions.assertUIThread();
        if (sInstance == null) {
@@ -55,9 +68,23 @@ public class TaskOverlayFactory implements ResourceBasedOverride {

    public static class TaskOverlay {

        public void setTaskInfo(Task task, ThumbnailData thumbnail, Matrix matrix) { }
        public void setTaskInfo(Task task, ThumbnailData thumbnail, Matrix matrix) {
        }

        public void reset() { }
        public void reset() {
        }

        public List<TaskSystemShortcut> getEnabledShortcuts(TaskView taskView) {
            final ArrayList<TaskSystemShortcut> shortcuts = new ArrayList<>();
            final BaseDraggingActivity activity = BaseActivity.fromContext(taskView.getContext());
            for (TaskSystemShortcut menuOption : MENU_OPTIONS) {
                View.OnClickListener onClickListener =
                        menuOption.getOnClickListener(activity, taskView);
                if (onClickListener != null) {
                    shortcuts.add(menuOption);
                }
            }
            return shortcuts;
        }
    }
}
+9 −13
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import com.android.quickstep.TaskSystemShortcut;
import com.android.quickstep.TaskUtils;
import com.android.quickstep.views.IconView.OnScaleUpdateListener;

import java.util.List;

/**
 * Contains options for a recent task when long-pressing its icon.
 */
@@ -50,14 +52,6 @@ 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. */
    public static final TaskSystemShortcut[] MENU_OPTIONS = new TaskSystemShortcut[] {
            new TaskSystemShortcut.AppInfo(),
            new TaskSystemShortcut.SplitScreen(),
            new TaskSystemShortcut.Pin(),
            new TaskSystemShortcut.Install(),
    };

    private final OnScaleUpdateListener mTaskViewIconScaleListener = new OnScaleUpdateListener() {
        @Override
        public void onScaleUpdate(float scale) {
@@ -197,11 +191,13 @@ public class TaskMenuView extends AbstractFloatingView {
        params.topMargin = (int) -mThumbnailTopMargin;
        mTaskIcon.setLayoutParams(params);

        for (TaskSystemShortcut menuOption : MENU_OPTIONS) {
            OnClickListener onClickListener = menuOption.getOnClickListener(mActivity, taskView);
            if (onClickListener != null) {
                addMenuOption(menuOption, onClickListener);
            }
        final BaseDraggingActivity activity = BaseDraggingActivity.fromContext(getContext());
        final List<TaskSystemShortcut> shortcuts =
                taskView.getTaskOverlay().getEnabledShortcuts(taskView);
        final int count = shortcuts.size();
        for (int i = 0; i < count; ++i) {
            final TaskSystemShortcut menuOption = shortcuts.get(i);
            addMenuOption(menuOption, menuOption.getOnClickListener(activity, taskView));
        }
    }

+4 −0
Original line number Diff line number Diff line
@@ -173,6 +173,10 @@ public class TaskThumbnailView extends View {
        return 0;
    }

    public TaskOverlay getTaskOverlay() {
        return mOverlay;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        drawOnCanvas(canvas, 0, 0, getMeasuredWidth(), getMeasuredHeight(), mCornerRadius);
+17 −4
Original line number Diff line number Diff line
@@ -42,12 +42,12 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout;
import android.widget.Toast;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.quickstep.TaskOverlayFactory;
import com.android.quickstep.TaskSystemShortcut;
import com.android.quickstep.TaskUtils;
import com.android.quickstep.views.RecentsView.PageCallbacks;
@@ -56,8 +56,9 @@ import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.Task.TaskCallbacks;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.ActivityManagerWrapper;

import com.android.systemui.shared.system.ActivityOptionsCompat;

import java.util.List;
import java.util.function.Consumer;

/**
@@ -190,6 +191,10 @@ public class TaskView extends FrameLayout implements TaskCallbacks, PageCallback
        return mIconView;
    }

    public TaskOverlayFactory.TaskOverlay getTaskOverlay() {
        return mSnapshotView.getTaskOverlay();
    }

    public void launchTask(boolean animate) {
        launchTask(animate, (result) -> {
            if (!result) {
@@ -384,7 +389,11 @@ public class TaskView extends FrameLayout implements TaskCallbacks, PageCallback

        final Context context = getContext();
        final BaseDraggingActivity activity = fromContext(context);
        for (TaskSystemShortcut menuOption : TaskMenuView.MENU_OPTIONS) {
        final List<TaskSystemShortcut> shortcuts =
                mSnapshotView.getTaskOverlay().getEnabledShortcuts(this);
        final int count = shortcuts.size();
        for (int i = 0; i < count; ++i) {
            final TaskSystemShortcut menuOption = shortcuts.get(i);
            OnClickListener onClickListener = menuOption.getOnClickListener(activity, this);
            if (onClickListener != null) {
                info.addAction(menuOption.createAccessibilityAction(context));
@@ -407,7 +416,11 @@ public class TaskView extends FrameLayout implements TaskCallbacks, PageCallback
            return true;
        }

        for (TaskSystemShortcut menuOption : TaskMenuView.MENU_OPTIONS) {
        final List<TaskSystemShortcut> shortcuts =
                mSnapshotView.getTaskOverlay().getEnabledShortcuts(this);
        final int count = shortcuts.size();
        for (int i = 0; i < count; ++i) {
            final TaskSystemShortcut menuOption = shortcuts.get(i);
            if (menuOption.hasHandlerForAction(action)) {
                OnClickListener onClickListener = menuOption.getOnClickListener(
                        fromContext(getContext()), this);