Defer launching next task until after first layout.

Bug: 30192607
Change-Id: I04cd182a795ea9600c9782056dc0adbe9a288af6
This commit is contained in:
Winson
2016-09-21 12:13:32 -07:00
committed by Winson Chung
parent 6b87569b4c
commit bd53a314f4

View File

@@ -164,6 +164,8 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
@ViewDebug.ExportedProperty(category="recents")
private boolean mAwaitingFirstLayout = true;
@ViewDebug.ExportedProperty(category="recents")
private boolean mLaunchNextAfterFirstMeasure = false;
@ViewDebug.ExportedProperty(category="recents")
@InitialStateAction
private int mInitialState = INITIAL_STATE_UPDATE_ALL;
@ViewDebug.ExportedProperty(category="recents")
@@ -336,6 +338,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
// Since we always animate to the same place in (the initial state), always reset the stack
// to the initial state when resuming
mAwaitingFirstLayout = true;
mLaunchNextAfterFirstMeasure = false;
mInitialState = INITIAL_STATE_UPDATE_ALL;
requestLayout();
}
@@ -1223,6 +1226,12 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
mInitialState = INITIAL_STATE_UPDATE_NONE;
}
}
// If we got the launch-next event before the first layout pass, then re-send it after the
// initial state has been updated
if (mLaunchNextAfterFirstMeasure) {
mLaunchNextAfterFirstMeasure = false;
EventBus.getDefault().post(new LaunchNextTaskRequestEvent());
}
// Rebind all the views, including the ignore ones
bindVisibleTaskViews(mStackScroller.getStackScroll(), false /* ignoreTaskOverrides */);
@@ -1665,6 +1674,11 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
}
public final void onBusEvent(LaunchNextTaskRequestEvent event) {
if (mAwaitingFirstLayout) {
mLaunchNextAfterFirstMeasure = true;
return;
}
int launchTaskIndex = mStack.indexOfStackTask(mStack.getLaunchTarget());
if (launchTaskIndex != -1) {
launchTaskIndex = Math.max(0, launchTaskIndex - 1);