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

Commit 0e14209a authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clean up Split Decor on aborted resizing transition" into main

parents 71d44fb7 6814d301
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -667,7 +667,7 @@ public class SplitDecorManager extends WindowlessWindowManager {
    }
    }


    /** Release or hide decor hint. */
    /** Release or hide decor hint. */
    private void releaseDecor(SurfaceControl.Transaction t) {
    public void releaseDecor(SurfaceControl.Transaction t) {
        if (mBackgroundLeash != null) {
        if (mBackgroundLeash != null) {
            t.remove(mBackgroundLeash);
            t.remove(mBackgroundLeash);
            mBackgroundLeash = null;
            mBackgroundLeash = null;
+9 −16
Original line number Original line Diff line number Diff line
@@ -21,7 +21,6 @@ import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TRANSIT_TO_BACK;


import static com.android.wm.shell.Flags.enableFlexibleSplit;
import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN;
import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN;
import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TRANSITIONS;
import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TRANSITIONS;
import static com.android.wm.shell.shared.animation.Interpolators.ALPHA_IN;
import static com.android.wm.shell.shared.animation.Interpolators.ALPHA_IN;
@@ -446,7 +445,6 @@ class SplitScreenTransitions {
            Transitions.TransitionHandler handler,
            Transitions.TransitionHandler handler,
            @Nullable TransitionConsumedCallback consumedCallback,
            @Nullable TransitionConsumedCallback consumedCallback,
            @Nullable TransitionFinishedCallback finishCallback,
            @Nullable TransitionFinishedCallback finishCallback,
            @Nullable SplitDecorManager mainDecor, @Nullable SplitDecorManager sideDecor,
            @Nullable List<SplitDecorManager> decorManagers) {
            @Nullable List<SplitDecorManager> decorManagers) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
                "  splitTransition deduced Resize split screen.");
                "  splitTransition deduced Resize split screen.");
@@ -454,14 +452,9 @@ class SplitScreenTransitions {
                mPendingResize != null);
                mPendingResize != null);
        if (mPendingResize != null) {
        if (mPendingResize != null) {
            mPendingResize.cancel(null);
            mPendingResize.cancel(null);
            if (enableFlexibleSplit()) {
            for (SplitDecorManager stage : decorManagers) {
            for (SplitDecorManager stage : decorManagers) {
                stage.cancelRunningAnimations();
                stage.cancelRunningAnimations();
            }
            }
            } else {
                mainDecor.cancelRunningAnimations();
                sideDecor.cancelRunningAnimations();
            }
            mAnimations.clear();
            mAnimations.clear();
            onFinish(null /* wct */);
            onFinish(null /* wct */);
        }
        }
@@ -506,20 +499,20 @@ class SplitScreenTransitions {
                mStageCoordinator.finishEnterSplitScreen(finishT);
                mStageCoordinator.finishEnterSplitScreen(finishT);
            }
            }


            mPendingEnter.onConsumed(aborted);
            mPendingEnter.onConsumed(aborted, finishT);
            mPendingEnter = null;
            mPendingEnter = null;
            mStageCoordinator.notifySplitAnimationStatus(false /*animationRunning*/);
            mStageCoordinator.notifySplitAnimationStatus(false /*animationRunning*/);
            ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTransitionConsumed for enter transition");
            ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTransitionConsumed for enter transition");
        } else if (isPendingDismiss(transition)) {
        } else if (isPendingDismiss(transition)) {
            mPendingDismiss.onConsumed(aborted);
            mPendingDismiss.onConsumed(aborted, finishT);
            mPendingDismiss = null;
            mPendingDismiss = null;
            ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTransitionConsumed for dismiss transition");
            ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTransitionConsumed for dismiss transition");
        } else if (isPendingResize(transition)) {
        } else if (isPendingResize(transition)) {
            mPendingResize.onConsumed(aborted);
            mPendingResize.onConsumed(aborted, finishT);
            mPendingResize = null;
            mPendingResize = null;
            ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTransitionConsumed for resize transition");
            ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTransitionConsumed for resize transition");
        } else if (isPendingPassThrough(transition)) {
        } else if (isPendingPassThrough(transition)) {
            mPendingRemotePassthrough.onConsumed(aborted);
            mPendingRemotePassthrough.onConsumed(aborted, finishT);
            mPendingRemotePassthrough.mRemoteHandler.onTransitionConsumed(transition, aborted,
            mPendingRemotePassthrough.mRemoteHandler.onTransitionConsumed(transition, aborted,
                    finishT);
                    finishT);
            mPendingRemotePassthrough = null;
            mPendingRemotePassthrough = null;
@@ -602,7 +595,7 @@ class SplitScreenTransitions {


    /** Calls when the transition got consumed. */
    /** Calls when the transition got consumed. */
    interface TransitionConsumedCallback {
    interface TransitionConsumedCallback {
        void onConsumed(boolean aborted);
        void onConsumed(boolean aborted, SurfaceControl.Transaction t);
    }
    }


    /** Calls when the transition finished. */
    /** Calls when the transition finished. */
@@ -668,9 +661,9 @@ class SplitScreenTransitions {
            setFinishedCallback(finishedCb);
            setFinishedCallback(finishedCb);
        }
        }


        void onConsumed(boolean aborted) {
        void onConsumed(boolean aborted, SurfaceControl.Transaction finishT) {
            if (mConsumedCallback != null) {
            if (mConsumedCallback != null) {
                mConsumedCallback.onConsumed(aborted);
                mConsumedCallback.onConsumed(aborted, finishT);
            }
            }
        }
        }


+15 −7
Original line number Original line Diff line number Diff line
@@ -2906,25 +2906,33 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            mTransactionPool.release(t);
            mTransactionPool.release(t);
            return;
            return;
        }
        }
        List<SplitDecorManager> decorManagers = new ArrayList<>();
        final List<SplitDecorManager> decorManagers;
        SplitDecorManager mainDecor = null;
        SplitDecorManager sideDecor = null;
        if (enableFlexibleSplit()) {
        if (enableFlexibleSplit()) {
            decorManagers = mStageOrderOperator.getActiveStages().stream()
            decorManagers = mStageOrderOperator.getActiveStages().stream()
                    .map(StageTaskListener::getSplitDecorManager)
                    .map(StageTaskListener::getSplitDecorManager)
                    .toList();
                    .toList();
        } else {
        } else {
            mainDecor = mMainStage.getSplitDecorManager();
            decorManagers = new ArrayList<>();
            sideDecor = mSideStage.getSplitDecorManager();
            final SplitDecorManager mainDecor = mMainStage.getSplitDecorManager();
            final SplitDecorManager sideDecor = mSideStage.getSplitDecorManager();
            if (mainDecor != null) {
                decorManagers.add(mainDecor);
            }
            if (sideDecor != null) {
                decorManagers.add(sideDecor);
            }
        }
        }
        sendOnBoundsChanged();
        sendOnBoundsChanged();
        mSplitLayout.setDividerInteractive(false, false, "onSplitResizeStart");
        mSplitLayout.setDividerInteractive(false, false, "onSplitResizeStart");
        mSplitTransitions.startResizeTransition(wct, this, (aborted) -> {
        mSplitTransitions.startResizeTransition(wct, this, (aborted, finishT) -> {
            mSplitLayout.setDividerInteractive(true, false, "onSplitResizeConsumed");
            mSplitLayout.setDividerInteractive(true, false, "onSplitResizeConsumed");
            for (SplitDecorManager decor : decorManagers) {
                decor.releaseDecor(finishT);
            }
        }, (finishWct, t) -> {
        }, (finishWct, t) -> {
            mSplitLayout.setDividerInteractive(true, false, "onSplitResizeFinish");
            mSplitLayout.setDividerInteractive(true, false, "onSplitResizeFinish");
            mSplitLayout.populateTouchZones();
            mSplitLayout.populateTouchZones();
        }, mainDecor, sideDecor, decorManagers);
        }, decorManagers);


        if (enableFlexibleTwoAppSplit()) {
        if (enableFlexibleTwoAppSplit()) {
            switch (layout.calculateCurrentSnapPosition()) {
            switch (layout.calculateCurrentSnapPosition()) {