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

Commit a58f1649 authored by Jerry Chang's avatar Jerry Chang Committed by Automerger Merge Worker
Browse files

Merge "Make sure to release split layout when returning to home" into tm-dev am: c3cd94f7

parents 3370fe43 c3cd94f7
Loading
Loading
Loading
Loading
+18 −14
Original line number Diff line number Diff line
@@ -231,16 +231,6 @@ class SplitScreenTransitions {

    void onFinish(WindowContainerTransaction wct, WindowContainerTransactionCallback wctCB) {
        if (!mAnimations.isEmpty()) return;
        mOnFinish.run();
        if (mFinishTransaction != null) {
            mFinishTransaction.apply();
            mTransactionPool.release(mFinishTransaction);
            mFinishTransaction = null;
        }
        if (mFinishCallback != null) {
            mFinishCallback.onTransitionFinished(wct /* wct */, wctCB /* wctCB */);
            mFinishCallback = null;
        }
        if (mAnimatingTransition == mPendingEnter) {
            mPendingEnter = null;
        }
@@ -248,15 +238,29 @@ class SplitScreenTransitions {
            mPendingDismiss = null;
        }
        if (mAnimatingTransition == mPendingRecent) {
            // If the wct is not null while finishing recent transition, it indicates it's not
            // dismissing split and thus need to reorder split task so they can be on top again.
            final boolean dismissSplit = wct == null;
            mStageCoordinator.finishRecentAnimation(dismissSplit);
            // If the clean-up wct is null when finishing recent transition, it indicates it's
            // returning to home and thus no need to reorder tasks.
            final boolean returnToHome = wct == null;
            if (returnToHome) {
                wct = new WindowContainerTransaction();
            }
            mStageCoordinator.onRecentTransitionFinished(returnToHome, wct, mFinishTransaction);
            mPendingRecent = null;
        }
        mPendingRemoteHandler = null;
        mActiveRemoteHandler = null;
        mAnimatingTransition = null;

        mOnFinish.run();
        if (mFinishTransaction != null) {
            mFinishTransaction.apply();
            mTransactionPool.release(mFinishTransaction);
            mFinishTransaction = null;
        }
        if (mFinishCallback != null) {
            mFinishCallback.onTransitionFinished(wct /* wct */, wctCB /* wctCB */);
            mFinishCallback = null;
        }
    }

    // TODO(shell-transitions): real animations
+9 −8
Original line number Diff line number Diff line
@@ -1568,8 +1568,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            logExit(dismissTransition.mReason);
            // TODO: Have a proper remote for this. Until then, though, reset state and use the
            //       normal animation stuff (which falls back to the normal launcher remote).
            setDividerVisibility(false, t);
            mSplitLayout.release();
            mSplitLayout.release(t);
            mSplitTransitions.mPendingDismiss = null;
            return false;
        } else {
@@ -1595,7 +1594,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        return true;
    }

    void finishRecentAnimation(boolean dismissSplit) {
    void onRecentTransitionFinished(boolean returnToHome, WindowContainerTransaction wct,
            SurfaceControl.Transaction finishT) {
        // Exclude the case that the split screen has been dismissed already.
        if (!mMainStage.isActive()) {
            // The latest split dismissing transition might be a no-op transition and thus won't
@@ -1605,13 +1605,14 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            return;
        }

        if (dismissSplit) {
            final WindowContainerTransaction wct = new WindowContainerTransaction();
        if (returnToHome) {
            // When returning to home from recent apps, the splitting tasks are already hidden, so
            // append the reset of dismissing operations into the clean-up wct.
            prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, wct);
            mSplitTransitions.startDismissTransition(null /* transition */, wct, this,
                    STAGE_TYPE_UNDEFINED, EXIT_REASON_RETURN_HOME);
            setSplitsVisible(false);
            logExit(EXIT_REASON_RETURN_HOME);
        } else {
            setDividerVisibility(true, null /* t */);
            setDividerVisibility(true, finishT);
        }
    }