diff options
| author | 2022-08-08 04:04:12 +0000 | |
|---|---|---|
| committer | 2022-08-08 04:04:12 +0000 | |
| commit | a2227ca9b081c0b1424109f6070b289577d57d34 (patch) | |
| tree | 6142ff66ca73aae0564a51cae6213664f44a5989 | |
| parent | fe1eba3a8866b8eb1363263577e8d825ff42f021 (diff) | |
| parent | b1e4053c45664d618c0852ab5499058bd37a6a65 (diff) | |
Merge "Use the proper transaction when finishing a split screen transition" into tm-qpr-dev
7 files changed, 31 insertions, 26 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index 40cf9a32d7a5..85c8ebf454c9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -1130,16 +1130,16 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange boolean adjusted = false; if (mYOffsetForIme != 0) { if (dividerLeash != null) { - mTempRect.set(mDividerBounds); + getRefDividerBounds(mTempRect); mTempRect.offset(0, mYOffsetForIme); t.setPosition(dividerLeash, mTempRect.left, mTempRect.top); } - mTempRect.set(mBounds1); + getRefBounds1(mTempRect); mTempRect.offset(0, mYOffsetForIme); t.setPosition(leash1, mTempRect.left, mTempRect.top); - mTempRect.set(mBounds2); + getRefBounds2(mTempRect); mTempRect.offset(0, mYOffsetForIme); t.setPosition(leash2, mTempRect.left, mTempRect.top); adjusted = true; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java index 2858e874741c..33761d23379d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java @@ -317,7 +317,8 @@ public class PipTransition extends PipTransitionController { } @Override - public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) { + public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted, + @Nullable SurfaceControl.Transaction finishT) { if (transition != mExitTransition) { return; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java index 83bdf8bfb727..d7ca791e3863 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java @@ -94,6 +94,7 @@ class SplitScreenTransitions { @NonNull WindowContainerToken topRoot) { mFinishCallback = finishCallback; mAnimatingTransition = transition; + mFinishTransaction = finishTransaction; if (mPendingRemoteHandler != null) { mPendingRemoteHandler.startAnimation(transition, info, startTransaction, finishTransaction, mRemoteFinishCB); @@ -107,8 +108,6 @@ class SplitScreenTransitions { private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) { - mFinishTransaction = mTransactionPool.acquire(); - // Play some place-holder fade animations for (int i = info.getChanges().size() - 1; i >= 0; --i) { final TransitionInfo.Change change = info.getChanges().get(i); @@ -287,16 +286,14 @@ class SplitScreenTransitions { return true; } - void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) { + void onTransitionConsumed(@NonNull IBinder transition, boolean aborted, + @Nullable SurfaceControl.Transaction finishT) { if (isPendingEnter(transition)) { if (!aborted) { // An enter transition got merged, appends the rest operations to finish entering // split screen. - // TODO (b/238856352): Passed-in the proper finish transition to merge instead. - if (mFinishTransaction == null) { - mFinishTransaction = mTransactionPool.acquire(); - } - mStageCoordinator.finishEnterSplitScreen(mFinishTransaction); + mStageCoordinator.finishEnterSplitScreen(finishT); + mPendingRemoteHandler = null; } mPendingEnter.mCallback.onTransitionConsumed(aborted); @@ -339,11 +336,6 @@ class SplitScreenTransitions { 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; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index f2340d531168..80ef74e63940 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -233,6 +233,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, if (op.getType() == HIERARCHY_OP_TYPE_REORDER && op.getToTop() && (mMainStage.containsContainer(container) || mSideStage.containsContainer(container))) { + updateSurfaceBounds(mSplitLayout, finishT, false /* applyResizingOffset */); setDividerVisibility(true, finishT); return; } @@ -1742,8 +1743,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, } @Override - public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) { - mSplitTransitions.onTransitionConsumed(transition, aborted); + public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted, + @Nullable SurfaceControl.Transaction finishT) { + mSplitTransitions.onTransitionConsumed(transition, aborted, finishT); } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java index 11b453cb24a2..5cce6b99fb11 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java @@ -274,7 +274,8 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler { } @Override - public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) { + public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted, + @Nullable SurfaceControl.Transaction finishT) { MixedTransition mixed = null; for (int i = mActiveTransitions.size() - 1; i >= 0; --i) { if (mActiveTransitions.get(i).mTransition != transition) continue; @@ -283,7 +284,7 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler { } if (mixed == null) return; if (mixed.mType == MixedTransition.TYPE_ENTER_PIP_FROM_SPLIT) { - mPipHandler.onTransitionConsumed(transition, aborted); + mPipHandler.onTransitionConsumed(transition, aborted, finishT); } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java index cedb340816ae..9469529de8f1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java @@ -82,7 +82,8 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler { } @Override - public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) { + public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted, + @Nullable SurfaceControl.Transaction finishT) { mRequestedRemotes.remove(transition); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java index d3fd10bf233c..279d57a23e6e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java @@ -543,7 +543,8 @@ public class Transitions implements RemoteCallable<Transitions> { active.mMerged = true; active.mAborted = abort; if (active.mHandler != null) { - active.mHandler.onTransitionConsumed(active.mToken, abort); + active.mHandler.onTransitionConsumed( + active.mToken, abort, abort ? null : active.mFinishT); } return; } @@ -551,7 +552,8 @@ public class Transitions implements RemoteCallable<Transitions> { active.mAborted = abort; if (active.mAborted && active.mHandler != null) { // Notifies to clean-up the aborted transition. - active.mHandler.onTransitionConsumed(transition, true /* aborted */); + active.mHandler.onTransitionConsumed( + transition, true /* aborted */, null /* finishTransaction */); } ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Transition animation finished (abort=%b), notifying core %s", abort, transition); @@ -587,7 +589,8 @@ public class Transitions implements RemoteCallable<Transitions> { ActiveTransition aborted = mActiveTransitions.remove(activeIdx); // Notifies to clean-up the aborted transition. if (aborted.mHandler != null) { - aborted.mHandler.onTransitionConsumed(transition, true /* aborted */); + aborted.mHandler.onTransitionConsumed( + transition, true /* aborted */, null /* finishTransaction */); } mOrganizer.finishTransition(aborted.mToken, null /* wct */, null /* wctCB */); } @@ -773,8 +776,13 @@ public class Transitions implements RemoteCallable<Transitions> { * Called when a transition which was already "claimed" by this handler has been merged * into another animation or has been aborted. Gives this handler a chance to clean-up any * expectations. + * + * @param transition The transition been consumed. + * @param aborted Whether the transition is aborted or not. + * @param finishTransaction The transaction to be applied after the transition animated. */ - default void onTransitionConsumed(@NonNull IBinder transition, boolean aborted) { } + default void onTransitionConsumed(@NonNull IBinder transition, boolean aborted, + @Nullable SurfaceControl.Transaction finishTransaction) { } /** * Sets transition animation scale settings value to handler. |