diff options
| author | 2016-04-21 16:48:50 -0700 | |
|---|---|---|
| committer | 2016-04-22 22:39:14 +0000 | |
| commit | eca47ef813c49c8d8cee2cdc93c296bbc59ed73b (patch) | |
| tree | 1454a034d8e22570bab0ec969bd0e24a331fa574 | |
| parent | b6cd42a925136f6354555c9c1033d20fbaadd139 (diff) | |
Fixing issue with swipe-dismiss animation clobbering home animation.
- Finish all dismiss animations when a dismiss-to-home animation is
started, and prevent lingering deferred layout animation requests
from running as they will be overwritten anyways.
Bug: 28287904
Change-Id: Ie40c66c0f25705b56f6808607d2b7b8ae4e5a112
3 files changed, 19 insertions, 24 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 270d981734fb..fc7bba52907f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java @@ -416,7 +416,7 @@ public class TaskStackLayoutAlgorithm { int prevFocusState = mFocusState; mFocusState = focusState; updateFrontBackTransforms(); - if (mCb != null) { + if (mCb != null && (prevFocusState != focusState)) { mCb.onFocusStateChanged(prevFocusState, focusState); } } 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 48f9453e15fd..6732b171d2e7 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -647,7 +647,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal */ private void relayoutTaskViews(AnimationProps animation, boolean ignoreTaskOverrides) { // If we had a deferred animation, cancel that - mDeferredTaskViewLayoutAnimation = null; + cancelDeferredTaskViewLayoutAnimation(); // Synchronize the current set of TaskViews bindVisibleTaskViews(mStackScroller.getStackScroll(), @@ -739,23 +739,12 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal /** * Cancels all {@link TaskView} animations. - * - * @see #cancelAllTaskViewAnimations(ArraySet<Task.TaskKey>) */ void cancelAllTaskViewAnimations() { - cancelAllTaskViewAnimations(mIgnoreTasks); - } - - /** - * Cancels all {@link TaskView} animations. - * - * @param ignoreTasksSet The set of tasks to continue running their animations. - */ - void cancelAllTaskViewAnimations(ArraySet<Task.TaskKey> ignoreTasksSet) { List<TaskView> taskViews = getTaskViews(); for (int i = taskViews.size() - 1; i >= 0; i--) { final TaskView tv = taskViews.get(i); - if (!ignoreTasksSet.contains(tv.getTask().key)) { + if (!mIgnoreTasks.contains(tv.getTask().key)) { tv.cancelTransformAnimation(); } } @@ -1675,8 +1664,10 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) { // Stop any scrolling + cancelDeferredTaskViewLayoutAnimation(); mStackScroller.stopScroller(); mStackScroller.stopBoundScrollAnimation(); + mTouchHandler.finishAnimations(); // Start the task animations mAnimationHelper.startExitToHomeAnimation(event.animated, event.getAnimationTrigger()); 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 9edf9d6c66c4..81242fdd4e64 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java @@ -188,6 +188,18 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { return true; } + /** + * Finishes all scroll-fling and swipe animations currently running. + */ + public void finishAnimations() { + Utilities.cancelAnimationWithoutCallbacks(mScrollFlingAnimator); + ArrayMap<View, Animator> existingAnimators = new ArrayMap<>(mSwipeHelperAnimations); + for (int i = 0; i < existingAnimators.size(); i++) { + existingAnimators.get(existingAnimators.keyAt(i)).end(); + } + mSwipeHelperAnimations.clear(); + } + private boolean handleTouchEvent(MotionEvent ev) { // Short circuit if we have no children if (mSv.getTaskViews().size() == 0) { @@ -207,19 +219,11 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { mActiveTaskView = findViewAtPoint(mDownX, mDownY); // Stop the current scroll if it is still flinging + mSv.cancelDeferredTaskViewLayoutAnimation(); mScroller.stopScroller(); mScroller.stopBoundScrollAnimation(); mScroller.resetDeltaScroll(); - Utilities.cancelAnimationWithoutCallbacks(mScrollFlingAnimator); - - // Finish any existing task animations from the delete - mSv.cancelAllTaskViewAnimations(); - // Finish any of the swipe helper animations - ArrayMap<View, Animator> existingAnimators = new ArrayMap<>(mSwipeHelperAnimations); - for (int i = 0; i < existingAnimators.size(); i++) { - existingAnimators.get(existingAnimators.keyAt(i)).end(); - } - mSwipeHelperAnimations.clear(); + finishAnimations(); // Initialize the velocity tracker initOrResetVelocityTracker(); |