Merge "Fix overview cmd launching wrong task in landscape" into ub-launcher3-qt-dev
This commit is contained in:
commit
c2b14d9fc8
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue