Gracefully handle failed task launches during quick switch
When quick switching from home or overview, go to OverviewState if the task launch failed. Otherwise we get stuck in BackgroundAppState. Bug: 135038270 Change-Id: I42785c261cef0df95666bc106ec5ca6ef0553cc7
This commit is contained in:
parent
6129e4737c
commit
e8836dc082
|
@ -61,4 +61,9 @@ public abstract class GoActivityControlHelper<T extends BaseDraggingActivity> im
|
|||
// Go does not support live tiles.
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLaunchTaskFailed(T activity) {
|
||||
// Go does not support gestures from one task to another.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
*/
|
||||
package com.android.launcher3.uioverrides.states;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
|
@ -27,6 +30,8 @@ import com.android.quickstep.views.TaskView;
|
|||
*/
|
||||
public class QuickSwitchState extends BackgroundAppState {
|
||||
|
||||
private static final String TAG = "QuickSwitchState";
|
||||
|
||||
public QuickSwitchState(int id) {
|
||||
super(id, LauncherLogProto.ContainerType.APP);
|
||||
}
|
||||
|
@ -48,7 +53,12 @@ public class QuickSwitchState extends BackgroundAppState {
|
|||
public void onStateTransitionEnd(Launcher launcher) {
|
||||
TaskView tasktolaunch = launcher.<RecentsView>getOverviewPanel().getTaskViewAt(0);
|
||||
if (tasktolaunch != null) {
|
||||
tasktolaunch.launchTask(false);
|
||||
tasktolaunch.launchTask(false, success -> {
|
||||
if (!success) {
|
||||
launcher.getStateManager().goToState(OVERVIEW);
|
||||
tasktolaunch.notifyTaskLaunchFailed(TAG);
|
||||
}
|
||||
}, new Handler(Looper.getMainLooper()));
|
||||
} else {
|
||||
launcher.getStateManager().goToState(NORMAL);
|
||||
}
|
||||
|
|
|
@ -224,4 +224,10 @@ public final class FallbackActivityControllerHelper implements
|
|||
public boolean isInLiveTileMode() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLaunchTaskFailed(RecentsActivity activity) {
|
||||
// TODO: probably go back to overview instead.
|
||||
activity.<RecentsView>getOverviewPanel().startHome();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -512,4 +512,9 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
|
|||
return launcher != null && launcher.getStateManager().getState() == OVERVIEW &&
|
||||
launcher.isStarted();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLaunchTaskFailed(Launcher launcher) {
|
||||
launcher.getStateManager().goToState(OVERVIEW);
|
||||
}
|
||||
}
|
|
@ -746,6 +746,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
|||
? 0 : (progress - mShiftAtGestureStart) / (1 - mShiftAtGestureStart));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param windowProgress 0 == app, 1 == overview
|
||||
*/
|
||||
private void updateSysUiFlags(float windowProgress) {
|
||||
if (mRecentsView != null) {
|
||||
TaskView centermostTask = mRecentsView.getTaskViewAt(mRecentsView
|
||||
|
@ -1249,7 +1252,17 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
|||
if (!mCanceled) {
|
||||
TaskView nextTask = mRecentsView.getTaskView(taskId);
|
||||
if (nextTask != null) {
|
||||
nextTask.launchTask(false /* animate */, true /* freezeTaskList */);
|
||||
nextTask.launchTask(false /* animate */, true /* freezeTaskList */,
|
||||
success -> {
|
||||
if (!success) {
|
||||
// We couldn't launch the task, so take user to overview so they can
|
||||
// decide what to do instead of staying in this broken state.
|
||||
endLauncherTransitionController();
|
||||
mActivityControlHelper.onLaunchTaskFailed(mActivity);
|
||||
nextTask.notifyTaskLaunchFailed(TAG);
|
||||
updateSysUiFlags(1 /* windowProgress == overview */);
|
||||
}
|
||||
}, mMainThreadHandler);
|
||||
doLogGesture(NEW_TASK);
|
||||
}
|
||||
reset();
|
||||
|
|
|
@ -93,6 +93,8 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
|
|||
|
||||
boolean isInLiveTileMode();
|
||||
|
||||
void onLaunchTaskFailed(T activity);
|
||||
|
||||
interface ActivityInitListener {
|
||||
|
||||
void register();
|
||||
|
|
Loading…
Reference in New Issue