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

Commit b113a524 authored by Jeff Chang's avatar Jeff Chang
Browse files

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
parent c58528f3
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }
+7 −5
Original line number Diff line number Diff line
@@ -237,11 +237,13 @@ class SplitScreenTransitions {
                mAnimations.add(va);

                decor.setScreenshotIfNeeded(change.getSnapshot(), startTransaction);
                decor.onResized(startTransaction, () -> {
                    mTransitions.getMainExecutor().execute(() -> {
                decor.onResized(startTransaction, animated -> {
                    mAnimations.remove(va);
                    if (animated) {
                        mTransitions.getMainExecutor().execute(() -> {
                            onFinish(null /* wct */, null /* wctCB */);
                        });
                    }
                });
            }
        }