Merge "Gracefully handle failed task launches during quick switch" into ub-launcher3-qt-dev

This commit is contained in:
Tony Wickham
2019-06-12 22:59:35 +00:00
committed by Android (Google) Code Review
6 changed files with 43 additions and 2 deletions
@@ -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();
}
}
@@ -506,4 +506,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
@@ -1247,7 +1250,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();