Return to home when overview command fails.

Returning a runnable list that doesn't get run later causes the overview command to be added to the pending command queue, but never gets removed. This causes following overview (and home on tablets) commands not to respond.

Test: forcefully caused the error condition programmatically; checked the queue is cleared and the user is sent home.
Fixes: 255851262
Change-Id: I9d2f54960c54963b1e7480a597d05911201c152b
This commit is contained in:
Schneider Victor-tulias
2022-11-10 11:22:33 -08:00
parent 1d253ac8e0
commit 0844f2e8ef
3 changed files with 12 additions and 6 deletions

View File

@@ -116,7 +116,7 @@ public class OverviewCommandHelper {
*/
@BinderThread
public void addCommand(int type) {
if (mPendingCommands.size() > MAX_QUEUE_SIZE) {
if (mPendingCommands.size() >= MAX_QUEUE_SIZE) {
return;
}
CommandInfo cmd = new CommandInfo(type);

View File

@@ -288,7 +288,7 @@ public class DesktopTaskView extends TaskView {
public RunnableList launchTasks() {
SystemUiProxy.INSTANCE.get(getContext()).showDesktopApps();
getRecentsView().startHome();
return new RunnableList();
return null;
}
@Nullable

View File

@@ -725,13 +725,14 @@ public class TaskView extends FrameLayout implements Reusable {
/**
* Launch of the current task (both live and inactive tasks) with an animation.
*/
@Nullable
public RunnableList launchTasks() {
RecentsView recentsView = getRecentsView();
RemoteTargetHandle[] remoteTargetHandles = recentsView.mRemoteTargetHandles;
RunnableList runnableList = new RunnableList();
if (isRunningTask() && remoteTargetHandles != null) {
if (!mIsClickableAsLiveTile) {
return runnableList;
Log.e(TAG, "TaskView is not clickable as a live tile; returning to home.");
return null;
}
mIsClickableAsLiveTile = false;
@@ -756,11 +757,16 @@ public class TaskView extends FrameLayout implements Reusable {
if (targets == null) {
// If the recents animation is cancelled somehow between the parent if block and
// here, try to launch the task as a non live tile task.
launchTaskAnimated();
RunnableList runnableList = launchTaskAnimated();
if (runnableList == null) {
Log.e(TAG, "Recents animation cancelled and cannot launch task as non-live tile"
+ "; returning to home");
}
mIsClickableAsLiveTile = true;
return runnableList;
}
RunnableList runnableList = new RunnableList();
AnimatorSet anim = new AnimatorSet();
TaskViewUtils.composeRecentsLaunchAnimator(
anim, this, targets.apps,
@@ -797,10 +803,10 @@ public class TaskView extends FrameLayout implements Reusable {
});
anim.start();
recentsView.onTaskLaunchedInLiveTileMode();
return runnableList;
} else {
return launchTaskAnimated();
}
return runnableList;
}
/**