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

Commit eba61c64 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Adding all-tasks dismiss animation" into ub-launcher3-edmonton

parents 2d18c688 e5a265b9
Loading
Loading
Loading
Loading
+57 −26
Original line number Diff line number Diff line
@@ -312,7 +312,7 @@ public abstract class RecentsView<T extends BaseActivity>
    }

    private float calculateClearAllButtonAlpha() {
        if (mClearAllButton.getVisibility() != View.VISIBLE) return 0;
        if (mClearAllButton.getVisibility() != View.VISIBLE || getChildCount() == 0) return 0;

        // Current visible coordinate of the right border of the rightmost task.
        final int carouselCurrentRight = getChildAt(getChildCount() - 1).getRight() - getScrollX();
@@ -725,8 +725,23 @@ public abstract class RecentsView<T extends BaseActivity>
        mIgnoreResetTaskViews.remove(taskView);
    }

    private void addDismissedTaskAnimations(View taskView, AnimatorSet anim, long duration) {
        addAnim(ObjectAnimator.ofFloat(taskView, ALPHA, 0), duration, ACCEL_2, anim);
        addAnim(ObjectAnimator.ofFloat(taskView, TRANSLATION_Y, -taskView.getHeight()),
                duration, LINEAR, anim);
    }

    private void removeTask(Task task, PendingAnimation.OnEndListener onEndListener) {
        if (task != null) {
            ActivityManagerWrapper.getInstance().removeTask(task.key.id);
            mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss(
                    onEndListener.logAction, Direction.UP,
                    TaskUtils.getComponentKeyForTask(task.key));
        }
    }

    public PendingAnimation createTaskDismissAnimation(TaskView taskView, boolean animateTaskView,
            boolean removeTask, long duration) {
            boolean shouldRemoveTask, long duration) {
        if (FeatureFlags.IS_DOGFOOD_BUILD && mPendingAnimation != null) {
            throw new IllegalStateException("Another pending animation is still running");
        }
@@ -758,9 +773,7 @@ public abstract class RecentsView<T extends BaseActivity>
            View child = getChildAt(i);
            if (child == taskView) {
                if (animateTaskView) {
                    addAnim(ObjectAnimator.ofFloat(taskView, ALPHA, 0), duration, ACCEL_2, anim);
                    addAnim(ObjectAnimator.ofFloat(taskView, TRANSLATION_Y, -taskView.getHeight()),
                            duration, LINEAR, anim);
                    addDismissedTaskAnimations(taskView, anim, duration);
                }
            } else {
                // If we just take newScroll - oldScroll, everything to the right of dragged task
@@ -805,14 +818,8 @@ public abstract class RecentsView<T extends BaseActivity>
        mPendingAnimation = pendingAnimation;
        mPendingAnimation.addEndListener((onEndListener) -> {
           if (onEndListener.isSuccess) {
               if (removeTask) {
                   Task task = taskView.getTask();
                   if (task != null) {
                       ActivityManagerWrapper.getInstance().removeTask(task.key.id);
                       mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss(
                               onEndListener.logAction, Direction.UP,
                               TaskUtils.getComponentKeyForTask(task.key));
                   }
               if (shouldRemoveTask) {
                   removeTask(taskView.getTask(), onEndListener);
               }
               int pageToSnapTo = mCurrentPage;
               if (draggedIndex < pageToSnapTo) {
@@ -831,6 +838,33 @@ public abstract class RecentsView<T extends BaseActivity>
        return pendingAnimation;
    }

    public PendingAnimation createAllTasksDismissAnimation(long duration) {
        if (FeatureFlags.IS_DOGFOOD_BUILD && mPendingAnimation != null) {
            throw new IllegalStateException("Another pending animation is still running");
        }
        AnimatorSet anim = new AnimatorSet();
        PendingAnimation pendingAnimation = new PendingAnimation(anim);

        int count = getChildCount();
        for (int i = 0; i < count; i++) {
            addDismissedTaskAnimations(getChildAt(i), anim, duration);
        }

        mPendingAnimation = pendingAnimation;
        mPendingAnimation.addEndListener((onEndListener) -> {
            if (onEndListener.isSuccess) {
                while (getChildCount() != 0) {
                    TaskView taskView = getPageAt(getChildCount() - 1);
                    removeTask(taskView.getTask(), onEndListener);
                    removeView(taskView);
                }
                onAllTasksRemoved();
            }
            mPendingAnimation = null;
        });
        return pendingAnimation;
    }

    private static void addAnim(ObjectAnimator anim, long duration,
            TimeInterpolator interpolator, AnimatorSet set) {
        anim.setDuration(duration).setInterpolator(interpolator);
@@ -854,9 +888,7 @@ public abstract class RecentsView<T extends BaseActivity>
        }
    }

    public void dismissTask(TaskView taskView, boolean animateTaskView, boolean removeTask) {
        PendingAnimation pendingAnim = createTaskDismissAnimation(taskView, animateTaskView,
                removeTask, DISMISS_TASK_DURATION);
    private void runDismissAnimation(PendingAnimation pendingAnim) {
        AnimatorPlaybackController controller = AnimatorPlaybackController.wrap(
                pendingAnim.anim, DISMISS_TASK_DURATION);
        controller.dispatchOnStart();
@@ -865,6 +897,15 @@ public abstract class RecentsView<T extends BaseActivity>
        controller.start();
    }

    public void dismissTask(TaskView taskView, boolean animateTaskView, boolean removeTask) {
        runDismissAnimation(createTaskDismissAnimation(taskView, animateTaskView, removeTask,
                DISMISS_TASK_DURATION));
    }

    public void dismissAllTasks() {
        runDismissAnimation(createAllTasksDismissAnimation(DISMISS_TASK_DURATION));
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
@@ -1171,16 +1212,6 @@ public abstract class RecentsView<T extends BaseActivity>
        return "";
    }

    public void dismissAllTasks() {
        for (int i = 0; i < getChildCount(); ++i) {
            Task task = getPageAt(i).getTask();
            if (task != null) {
                ActivityManagerWrapper.getInstance().removeTask(task.key.id);
            }
        }
        onAllTasksRemoved();
    }

    @Override
    protected int computeMaxScrollX() {
        if (!DEBUG_SHOW_CLEAR_ALL_BUTTON || getChildCount() == 0) {