Apply transaction before calling onFinish

onFinish callback will be invoked before applying the start
transaction when performing the resize animation. It happens when
there is no need to play the animation. This CL adjusts the order
of execution to ensure apply the start transaction before calling
onFinish.

Bug: 273430199
Test: pass exist testing
Change-Id: I0aaed70a1e8cca1f39eb94c78d7e709c323dda77
This commit is contained in:
Jeff Chang
2023-04-13 16:43:58 +08:00
parent c58528f3f4
commit b113a52484
2 changed files with 13 additions and 9 deletions

View File

@@ -51,6 +51,8 @@ import com.android.wm.shell.R;
import com.android.wm.shell.common.ScreenshotUtils;
import com.android.wm.shell.common.SurfaceUtils;
import java.util.function.Consumer;
/**
* Handles split decor like showing resizing hint for a specific split.
*/
@@ -251,7 +253,7 @@ public class SplitDecorManager extends WindowlessWindowManager {
}
/** Stops showing resizing hint. */
public void onResized(SurfaceControl.Transaction t, Runnable animFinishedCallback) {
public void onResized(SurfaceControl.Transaction t, Consumer<Boolean> animFinishedCallback) {
if (mScreenshotAnimator != null && mScreenshotAnimator.isRunning()) {
mScreenshotAnimator.cancel();
}
@@ -281,7 +283,7 @@ public class SplitDecorManager extends WindowlessWindowManager {
mScreenshot = null;
if (mRunningAnimationCount == 0 && animFinishedCallback != null) {
animFinishedCallback.run();
animFinishedCallback.accept(true);
}
}
});
@@ -313,12 +315,12 @@ public class SplitDecorManager extends WindowlessWindowManager {
}
}
if (mShown) {
fadeOutDecor(animFinishedCallback);
fadeOutDecor(()-> animFinishedCallback.accept(true));
} else {
// Decor surface is hidden so release it directly.
releaseDecor(t);
if (mRunningAnimationCount == 0 && animFinishedCallback != null) {
animFinishedCallback.run();
animFinishedCallback.accept(false);
}
}
}

View File

@@ -237,11 +237,13 @@ class SplitScreenTransitions {
mAnimations.add(va);
decor.setScreenshotIfNeeded(change.getSnapshot(), startTransaction);
decor.onResized(startTransaction, () -> {
mTransitions.getMainExecutor().execute(() -> {
mAnimations.remove(va);
onFinish(null /* wct */, null /* wctCB */);
});
decor.onResized(startTransaction, animated -> {
mAnimations.remove(va);
if (animated) {
mTransitions.getMainExecutor().execute(() -> {
onFinish(null /* wct */, null /* wctCB */);
});
}
});
}
}