From f8597b2aef7c52f8bbf3715f42b33f70cee0b81e Mon Sep 17 00:00:00 2001 From: Winson Date: Wed, 23 Mar 2016 18:44:26 -0700 Subject: [PATCH] Tweaking scroll-to-launch task animation. - Always scroll so that the launch task is focused Change-Id: I84516d0799ad0b308cfa458f4ce79c82acc48f51 --- .../views/TaskStackLayoutAlgorithm.java | 4 ++-- .../systemui/recents/views/TaskStackView.java | 18 ++++++++---------- .../views/TaskStackViewTouchHandler.java | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java index a6d55a3263ec5..93c5fc9d56abb 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java @@ -921,8 +921,8 @@ public class TaskStackLayoutAlgorithm { float getStackScrollForTaskAtInitialOffset(Task t) { float normX = getNormalizedXFromUnfocusedY(mInitialTopOffset, FROM_TOP); mUnfocusedRange.offset(0f); - return (float) mTaskIndexMap.get(t.key.id, 0) - Math.max(0, - mUnfocusedRange.getAbsoluteX(normX)); + return Utilities.clamp((float) mTaskIndexMap.get(t.key.id, 0) - Math.max(0, + mUnfocusedRange.getAbsoluteX(normX)), mMinScrollP, mMaxScrollP); } /** 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 f018047c58d07..c9cc1e99977ed 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -111,7 +111,7 @@ 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_BASE_DURATION = 216; private static final int LAUNCH_NEXT_SCROLL_INCR_DURATION = 32; private static final ArraySet EMPTY_TASK_SET = new ArraySet<>(); @@ -1625,15 +1625,13 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal cancelAllTaskViewAnimations(); final Task launchTask = mStack.getStackTasks().get(launchTaskIndex); - if (getChildViewForTask(launchTask) == null) { - List 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), + float curScroll = mStackScroller.getStackScroll(); + float targetScroll = mLayoutAlgorithm.getStackScrollForTaskAtInitialOffset(launchTask); + float absScrollDiff = Math.abs(targetScroll - curScroll); + if (getChildViewForTask(launchTask) == null || absScrollDiff > 0.35f) { + int duration = (int) (LAUNCH_NEXT_SCROLL_BASE_DURATION + + absScrollDiff * LAUNCH_NEXT_SCROLL_INCR_DURATION); + mStackScroller.animateScroll(targetScroll, duration, new Runnable() { @Override public void run() { diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java index e7acc07b76be9..aed19c3e0b9a5 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java @@ -464,7 +464,7 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { if (layoutAlgorithm.getFocusState() != TaskStackLayoutAlgorithm.STATE_FOCUSED) { // If we are focused, we don't want the front task to move, but otherwise, we // allow the back task to move up, and the front task to move back - stackScrollOffset /= 2; + stackScrollOffset *= 0.75f; } newStackScroll = stackScroller.getBoundedStackScroll(stackScroller.getStackScroll() + stackScrollOffset);