diff options
3 files changed, 35 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index 90e8b29f138f..f33ef654eaf7 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 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD 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 dc878e430cf4..93b5b6c12904 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 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal 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 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal 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 ad46abd74f7d..9be3542bf59e 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 @@ public class TaskStackViewScroller { /** 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 @@ public class TaskStackViewScroller { 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 |