Start collecting task dismiss CUJ on dismiss animation start.
Bug: 385698952
Bug: 389653070
Test: OverviewTaskDismiss#dismissTask (Functional & microbenchmark test)
Flag: EXEMPT adding CUJ for existing recents
Change-Id: I8f68d05d2b701291e17ece5b38d2267adcbabae4
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index b6c976d..248d7a3 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -4016,6 +4016,10 @@
dismissedTaskView.setTranslationZ(0.1f);
}
loadVisibleTaskData(TaskView.FLAG_UPDATE_ALL);
+ if (!dismissingForSplitSelection) {
+ anim.addStartListener(() -> InteractionJankMonitorWrapper.begin(this,
+ Cuj.CUJ_LAUNCHER_OVERVIEW_TASK_DISMISS));
+ }
mPendingAnimation = anim;
final TaskView finalNextFocusedTaskView = nextFocusedTaskView;
final boolean finalCloseGapBetweenClearAll = closeGapBetweenClearAll;
@@ -4540,7 +4544,6 @@
}
public void dismissTask(TaskView taskView, boolean animateTaskView, boolean removeTask) {
- InteractionJankMonitorWrapper.begin(this, Cuj.CUJ_LAUNCHER_OVERVIEW_TASK_DISMISS);
PendingAnimation pa = new PendingAnimation(DISMISS_TASK_DURATION);
createTaskDismissAnimation(pa, taskView, animateTaskView, removeTask, DISMISS_TASK_DURATION,
false /* dismissingForSplitSelection*/);
diff --git a/src/com/android/launcher3/anim/AnimatedPropertySetter.java b/src/com/android/launcher3/anim/AnimatedPropertySetter.java
index 82e645a..0f1b8ad 100644
--- a/src/com/android/launcher3/anim/AnimatedPropertySetter.java
+++ b/src/com/android/launcher3/anim/AnimatedPropertySetter.java
@@ -20,6 +20,7 @@
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
@@ -121,19 +122,31 @@
* Adds a listener to be run on every frame of the animation
*/
public void addOnFrameListener(ValueAnimator.AnimatorUpdateListener listener) {
- if (mProgressAnimator == null) {
- mProgressAnimator = ValueAnimator.ofFloat(0, 1);
- }
-
- mProgressAnimator.addUpdateListener(listener);
+ getProgressAnimator().addUpdateListener(listener);
}
@Override
public void addEndListener(Consumer<Boolean> listener) {
+ getProgressAnimator().addListener(AnimatorListeners.forEndCallback(listener));
+ }
+
+ /**
+ * Add a callback to run on progress start.
+ */
+ public void addStartListener(Runnable listener) {
+ getProgressAnimator().addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ listener.run();
+ }
+ });
+ }
+
+ private ValueAnimator getProgressAnimator() {
if (mProgressAnimator == null) {
mProgressAnimator = ValueAnimator.ofFloat(0, 1);
}
- mProgressAnimator.addListener(AnimatorListeners.forEndCallback(listener));
+ return mProgressAnimator;
}
/**