Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eca47ef8 authored by Winson's avatar Winson Committed by Winson Chung
Browse files

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
parent b6cd42a9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
        }
    }
+4 −13
Original line number Diff line number Diff line
@@ -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());
+14 −10
Original line number Diff line number Diff line
@@ -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();