Scroll to the launch-task when toggling overview.
Bug: 27680710
Change-Id: I3eba2cdbe0a92ef05dd6882a5e41db2a5875c98a
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 90e8b29..f33ef65 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -362,7 +362,8 @@
RecentsConfiguration config = Recents.getConfiguration();
RecentsActivityLaunchState launchState = config.getLaunchState();
if (!loadPlan.hasTasks()) {
- loader.preloadTasks(loadPlan, -1, launchState.launchedFromHome);
+ loader.preloadTasks(loadPlan, launchState.launchedToTaskId,
+ launchState.launchedFromHome);
}
RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options();
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index dc878e4..93b5b6c 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -114,6 +114,9 @@
private static final int DRAG_SCALE_DURATION = 175;
private static final float DRAG_SCALE_FACTOR = 1.05f;
+ private static final int LAUNCH_NEXT_SCROLL_BASE_DURATION = 200;
+ private static final int LAUNCH_NEXT_SCROLL_INCR_DURATION = 32;
+
private static final ArraySet<Task.TaskKey> EMPTY_TASK_SET = new ArraySet<>();
LayoutInflater mInflater;
@@ -1619,9 +1622,28 @@
mUIDozeTrigger.stopDozing();
cancelAllTaskViewAnimations();
- Task launchTask = mStack.getStackTasks().get(launchTaskIndex);
- EventBus.getDefault().send(new LaunchTaskEvent(getChildViewForTask(launchTask),
- launchTask, null, INVALID_STACK_ID, false /* screenPinningRequested */));
+ final Task launchTask = mStack.getStackTasks().get(launchTaskIndex);
+ if (getChildViewForTask(launchTask) == null) {
+ List<TaskView> taskViews = getTaskViews();
+ int lastTaskIndex = !taskViews.isEmpty()
+ ? mStack.indexOfStackTask(taskViews.get(taskViews.size() - 1).getTask())
+ : mStack.getTaskCount() - 1;
+ int duration = LAUNCH_NEXT_SCROLL_BASE_DURATION +
+ Math.abs(mStack.indexOfStackTask(launchTask) - lastTaskIndex)
+ * LAUNCH_NEXT_SCROLL_INCR_DURATION;
+ mStackScroller.animateScroll(mLayoutAlgorithm.getStackScrollForTask(launchTask),
+ duration, new Runnable() {
+ @Override
+ public void run() {
+ EventBus.getDefault().send(new LaunchTaskEvent(
+ getChildViewForTask(launchTask), launchTask, null,
+ INVALID_STACK_ID, false /* screenPinningRequested */));
+ }
+ });
+ } else {
+ EventBus.getDefault().send(new LaunchTaskEvent(getChildViewForTask(launchTask),
+ launchTask, null, INVALID_STACK_ID, false /* screenPinningRequested */));
+ }
MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_LAUNCH_PREVIOUS_TASK,
launchTask.key.getComponent().toString());
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
index ad46abd..9be3542 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
@@ -179,6 +179,13 @@
/** Animates the stack scroll */
void animateScroll(float newScroll, final Runnable postRunnable) {
+ int duration = mContext.getResources().getInteger(
+ R.integer.recents_animate_task_stack_scroll_duration);
+ animateScroll(newScroll, duration, postRunnable);
+ }
+
+ /** Animates the stack scroll */
+ void animateScroll(float newScroll, int duration, final Runnable postRunnable) {
// Finish any current scrolling animations
if (mScrollAnimator != null && mScrollAnimator.isRunning()) {
setStackScroll(mFinalAnimatedScroll);
@@ -190,8 +197,7 @@
if (Float.compare(mStackScrollP, newScroll) != 0) {
mFinalAnimatedScroll = newScroll;
mScrollAnimator = ObjectAnimator.ofFloat(this, STACK_SCROLL, getStackScroll(), newScroll);
- mScrollAnimator.setDuration(mContext.getResources().getInteger(
- R.integer.recents_animate_task_stack_scroll_duration));
+ mScrollAnimator.setDuration(duration);
mScrollAnimator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
mScrollAnimator.addListener(new AnimatorListenerAdapter() {
@Override