Merge "Use the proper transaction when finishing a split screen transition" into tm-qpr-dev

This commit is contained in:
Jerry Chang
2022-08-08 04:04:12 +00:00
committed by Android (Google) Code Review
7 changed files with 31 additions and 26 deletions

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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);
}
}
}

View File

@@ -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);
}

View File

@@ -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.