summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson <winsonc@google.com> 2016-04-21 16:48:50 -0700
committer Winson Chung <winsonc@google.com> 2016-04-22 22:39:14 +0000
commiteca47ef813c49c8d8cee2cdc93c296bbc59ed73b (patch)
tree1454a034d8e22570bab0ec969bd0e24a331fa574
parentb6cd42a925136f6354555c9c1033d20fbaadd139 (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
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java24
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();