From 3664426dcf3a603a52d630a74f3caef9da682457 Mon Sep 17 00:00:00 2001 From: Winson Date: Mon, 18 Apr 2016 12:57:56 -0700 Subject: [PATCH] Fixing animation spec animation problem. - We were always using the stack layout to get the task transforms, but when we are animating to a given task position (ie. hitting recents while the home->recents transition is happening), we would start the animation with the final task rect, instead of the current task rect. Instead, use the current transform of the task view, and transform that to screen coordinates and use it. Bug: 27154882 Change-Id: I25af8fad97ee78669c952dd81708e6cee5dfab05 --- .../recents/views/RecentsTransitionHelper.java | 15 +++++++-------- .../recents/views/TaskStackLayoutAlgorithm.java | 13 ++++++++++--- .../systemui/recents/views/TaskStackView.java | 1 - 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java index db5413f85c241..04f10ef8e8930 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java @@ -286,10 +286,9 @@ public class RecentsTransitionHelper { // Calculate the offscreen task rect (for tasks that are not backed by views) float stackScroll = stackView.getScroller().getStackScroll(); TaskView taskView = stackView.getChildViewForTask(task); - TaskStackLayoutAlgorithm layoutAlgorithm = stackView.getStackAlgorithm(); - Rect offscreenTaskRect = new Rect(layoutAlgorithm.mTaskRect); - offscreenTaskRect.offsetTo(offscreenTaskRect.left, - layoutAlgorithm.mStackRect.bottom); + TaskStackLayoutAlgorithm stackLayout = stackView.getStackAlgorithm(); + Rect offscreenTaskRect = new Rect(); + stackLayout.getFrontOfStackTransform().rect.round(offscreenTaskRect); // If this is a full screen stack, the transition will be towards the single, full screen // task. We only need the transition spec for this task. @@ -302,8 +301,8 @@ public class RecentsTransitionHelper { if (taskView == null) { specs.add(composeOffscreenAnimationSpec(task, offscreenTaskRect)); } else { - layoutAlgorithm.getStackTransformScreenCoordinates(task, stackScroll, mTmpTransform, - null); + mTmpTransform.fillIn(taskView); + stackLayout.transformToScreenCoordinates(mTmpTransform); specs.add(composeAnimationSpec(stackView, taskView, mTmpTransform, true /* addHeaderBitmap */)); } @@ -324,8 +323,8 @@ public class RecentsTransitionHelper { // never happen) specs.add(composeOffscreenAnimationSpec(t, offscreenTaskRect)); } else { - layoutAlgorithm.getStackTransformScreenCoordinates(t, stackScroll, - mTmpTransform, null); + mTmpTransform.fillIn(taskView); + stackLayout.transformToScreenCoordinates(mTmpTransform); specs.add(composeAnimationSpec(stackView, tv, mTmpTransform, true /* addHeaderBitmap */)); } 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 ee3a9b9e3c7d3..bdc4c1a12117f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java @@ -831,12 +831,19 @@ public class TaskStackLayoutAlgorithm { */ public TaskViewTransform getStackTransformScreenCoordinates(Task task, float stackScroll, TaskViewTransform transformOut, TaskViewTransform frontTransform) { - Rect windowRect = Recents.getSystemServices().getWindowRect(); TaskViewTransform transform = getStackTransform(task, stackScroll, mFocusState, transformOut, frontTransform, true /* forceUpdate */, false /* ignoreTaskOverrides */); - transform.rect.offset(windowRect.left, windowRect.top); - return transform; + return transformToScreenCoordinates(transform); + } + + /** + * Transforms the given {@param transformOut} to the screen coordinates. + */ + public TaskViewTransform transformToScreenCoordinates(TaskViewTransform transformOut) { + Rect windowRect = Recents.getSystemServices().getWindowRect(); + transformOut.rect.offset(windowRect.left, windowRect.top); + return transformOut; } /** 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 068596bba54d2..6176d99a7c174 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -1618,7 +1618,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } if (launchTaskIndex != -1) { // Stop all animations - mUIDozeTrigger.stopDozing(); cancelAllTaskViewAnimations(); final Task launchTask = mStack.getStackTasks().get(launchTaskIndex);