From 283a0eeddc7ac995f873870dd0538c778f5824a7 Mon Sep 17 00:00:00 2001 From: Pat Manning Date: Wed, 31 Mar 2021 21:10:31 +0000 Subject: [PATCH] Animate overview grid task dismissal when shifting tasks. - Animate tasks from previous dismissal translations to current translations with staggered durations. Test: manual Bug: 182579190 Fix: 182579190 Change-Id: Ie0759b9896f6eb70bed1fc99961937dd314a4694 --- .../android/quickstep/views/RecentsView.java | 116 +++++++++++++++--- 1 file changed, 96 insertions(+), 20 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 790c6551cf..7012e87457 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -328,6 +328,8 @@ public abstract class RecentsView= dismissed index and in the + // same row as the dismissed index, or if the dismissed task was the focused task. Offset + // successive task dismissal durations for a staggered effect. + ArrayList gridTranslationAnimators = new ArrayList<>(); + boolean isFocusedTaskDismissed = + isTaskDismissal && dismissedTask.getTask().key.id == mFocusedTaskId; for (int i = 0; i < taskCount; i++) { TaskView taskView = getTaskViewAt(i); + if (isFocusedTaskDismissed || (i >= dismissedIndex && isSameGridRow(dismissedTask, + taskView))) { + Animator taskDismissAnimator = ObjectAnimator.ofFloat(taskView, + taskView.getPrimaryDismissTranslationProperty(), + mIsRtl ? -dismissedTaskWidth : dismissedTaskWidth, 0f); + int additionalTranslationDuration = + i >= dismissedIndex ? (ADDITIONAL_DISMISS_TASK_TRANSLATION_DURATION * ( + (i - dismissedIndex) / 2)) : 0; + taskDismissAnimator.setDuration( + DISMISS_TASK_TRANSLATION_DURATION + additionalTranslationDuration); + gridTranslationAnimators.add(taskDismissAnimator); + } taskView.setGridTranslationX(gridTranslations[i] - snappedTaskGridTranslationX); taskView.setNonFullscreenTranslationX(snappedTaskFullscreenScrollAdjustment); } + AnimatorSet gridTranslationAnimatorSet = new AnimatorSet(); + gridTranslationAnimatorSet.playTogether(gridTranslationAnimators); + gridTranslationAnimatorSet.addListener(new AnimatorListenerAdapter() { + @Override + // Allow the actions view to display again once in focus mode + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + if (getFocusedTaskView() == null) { + mActionsView.getScrollAlpha().setValue(1); + } + } - // Use the accumulated translation of the longer row. - float clearAllAccumulatedTranslation = mIsRtl ? Math.max(topAccumulatedTranslationX, - bottomAccumulatedTranslationX) : Math.min(topAccumulatedTranslationX, - bottomAccumulatedTranslationX); + @Override + // Hide the actions view if not in focus mode + public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); + if (getFocusedTaskView() == null) { + mActionsView.getScrollAlpha().setValue(0); + } + } + }); + gridTranslationAnimatorSet.start(); + + // Use the accumulated translation of the row containing the last task. + float clearAllAccumulatedTranslation = topSet.contains(taskCount - 1) + ? topAccumulatedTranslationX : bottomAccumulatedTranslationX; // If the last task is on the shorter row, ClearAllButton will embed into the shorter row // which is not what we want. Compensate the width difference of the 2 rows in that case. @@ -1982,13 +2038,14 @@ public abstract class RecentsView