Waiting until post draw before calling finish on the recent transition
Bug: 77695434
Change-Id: I7c3c668de7c3986760f26890fa062dee0ddb3805
diff --git a/quickstep/libs/sysui_shared.jar b/quickstep/libs/sysui_shared.jar
index f5c6149..fec7317 100644
--- a/quickstep/libs/sysui_shared.jar
+++ b/quickstep/libs/sysui_shared.jar
Binary files differ
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index fe9f0c3..06e6556 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -31,6 +31,7 @@
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
import android.content.res.Resources;
+import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Build;
@@ -73,6 +74,7 @@
import com.android.systemui.shared.system.RecentsAnimationControllerCompat;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import com.android.systemui.shared.system.TransactionCompat;
+import com.android.systemui.shared.system.WindowCallbacksCompat;
import com.android.systemui.shared.system.WindowManagerWrapper;
import java.util.StringJoiner;
@@ -645,24 +647,30 @@
synchronized (mRecentsAnimationWrapper) {
if (mRecentsAnimationWrapper.controller != null) {
- TransactionCompat transaction = new TransactionCompat();
for (RemoteAnimationTargetCompat app : mRecentsAnimationWrapper.targets) {
if (app.mode == MODE_CLOSING) {
// Update the screenshot of the task
ThumbnailData thumbnail =
mRecentsAnimationWrapper.controller.screenshotTask(app.taskId);
- TaskView taskView = mRecentsView.updateThumbnail(app.taskId, thumbnail);
+ final TaskView taskView =
+ mRecentsView.updateThumbnail(app.taskId, thumbnail);
if (taskView != null) {
taskView.setAlpha(1);
+
// Defer finishing the animation until the next launcher frame with the
// new thumbnail
- mActivityControlHelper.executeOnNextDraw(mActivity, taskView,
- finishTransitionRunnable);
- finishTransitionPosted = true;
+ finishTransitionPosted = new WindowCallbacksCompat(taskView) {
+
+ @Override
+ public void onPostDraw(Canvas canvas) {
+ finishTransitionRunnable.run();
+ detach();
+ }
+ }.attach();
+ break;
}
}
}
- transaction.apply();
}
}
if (!finishTransitionPosted) {