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

This commit is contained in:
TreeHugger Robot 2019-04-25 01:17:06 +00:00 committed by Android (Google) Code Review
commit c2b14d9fc8
3 changed files with 39 additions and 13 deletions

View File

@ -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.
*

View File

@ -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())

View File

@ -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);
}