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

Commit c2b14d9f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix overview cmd launching wrong task in landscape" into ub-launcher3-qt-dev

parents d0d39f17 71d3e30f
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static com.android.quickstep.TaskAdapter.TASKS_START_POSITION;
import android.app.ActivityOptions;
import android.view.View;

import androidx.annotation.NonNull;

import com.android.quickstep.views.TaskItemView;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@@ -39,11 +41,11 @@ public final class TaskActionController {
    }

    /**
     * Launch the task associated with the task holder, animating into the app.
     * Launch the task associated with the task holder, animating into the app from the task view.
     *
     * @param viewHolder the task view holder to launch
     */
    public void launchTask(TaskHolder viewHolder) {
    public void launchTaskFromView(@NonNull TaskHolder viewHolder) {
        if (!viewHolder.getTask().isPresent()) {
            return;
        }
@@ -60,6 +62,17 @@ public final class TaskActionController {
                null /* resultCallbackHandler */);
    }

    /**
     * Launch the task directly with a basic animation.
     *
     * @param task the task to launch
     */
    public void launchTask(@NonNull Task task) {
        ActivityOptions opts = ActivityOptions.makeBasic();
        ActivityManagerWrapper.getInstance().startActivityFromRecentsAsync(task.key, opts,
                null /* resultCallback */, null /* resultCallbackHandler */);
    }

    /**
     * Removes the task holder and the task, updating the model and the view.
     *
+2 −1
Original line number Diff line number Diff line
@@ -83,7 +83,8 @@ public final class TaskAdapter extends Adapter<ViewHolder> {
                TaskItemView itemView = (TaskItemView) LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.task_item_view, parent, false);
                TaskHolder taskHolder = new TaskHolder(itemView);
                itemView.setOnClickListener(view -> mTaskActionController.launchTask(taskHolder));
                itemView.setOnClickListener(
                        view -> mTaskActionController.launchTaskFromView(taskHolder));
                return taskHolder;
            case ITEM_TYPE_CLEAR_ALL:
                View clearView = LayoutInflater.from(parent.getContext())
+22 −10
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ import com.android.quickstep.TaskSwipeCallback;
import com.android.systemui.shared.recents.model.Task;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

/**
@@ -263,23 +265,33 @@ public final class IconRecentsView extends FrameLayout {
     * the app. In that case, we launch the next most recent.
     */
    public void handleOverviewCommand() {
        // TODO(130735711): Need to address case where most recent task is off screen/unattached.
        ArrayList<TaskItemView> taskViews = getTaskViews();
        int taskViewsSize = taskViews.size();
        if (taskViewsSize <= 1) {
        List<Task> tasks = mTaskLoader.getCurrentTaskList();
        int tasksSize = tasks.size();
        if (tasksSize == 0) {
            // Do nothing
            return;
        }
        TaskHolder taskToLaunch;
        if (mTransitionedFromApp && taskViewsSize > 1) {
        Task taskToLaunch;
        if (mTransitionedFromApp && tasksSize > 1) {
            // Launch the next most recent app
            TaskItemView itemView = taskViews.get(1);
            taskToLaunch = (TaskHolder) mTaskRecyclerView.getChildViewHolder(itemView);
            taskToLaunch = tasks.get(1);
        } else {
            // Launch the most recent app
            TaskItemView itemView = taskViews.get(0);
            taskToLaunch = (TaskHolder) mTaskRecyclerView.getChildViewHolder(itemView);
            taskToLaunch = tasks.get(0);
        }

        // See if view for this task is attached, and if so, animate launch from that view.
        ArrayList<TaskItemView> itemViews = getTaskViews();
        for (int i = 0, size = itemViews.size(); i < size; i++) {
            TaskItemView taskView = itemViews.get(i);
            TaskHolder holder = (TaskHolder) mTaskRecyclerView.getChildViewHolder(taskView);
            if (Objects.equals(holder.getTask(), Optional.of(taskToLaunch))) {
                mTaskActionController.launchTaskFromView(holder);
                return;
            }
        }

        // Otherwise, just use a basic launch animation.
        mTaskActionController.launchTask(taskToLaunch);
    }