Merge "Fix pip finish-callback when enter animation runs in shell" into tm-dev
This commit is contained in:
@@ -166,8 +166,7 @@ public class PipTransition extends PipTransitionController {
|
|||||||
mExitTransition = null;
|
mExitTransition = null;
|
||||||
mHasFadeOut = false;
|
mHasFadeOut = false;
|
||||||
if (mFinishCallback != null) {
|
if (mFinishCallback != null) {
|
||||||
mFinishCallback.onTransitionFinished(null, null);
|
callFinishCallback(null /* wct */);
|
||||||
mFinishCallback = null;
|
|
||||||
mFinishTransaction = null;
|
mFinishTransaction = null;
|
||||||
throw new RuntimeException("Previous callback not called, aborting exit PIP.");
|
throw new RuntimeException("Previous callback not called, aborting exit PIP.");
|
||||||
}
|
}
|
||||||
@@ -232,6 +231,11 @@ public class PipTransition extends PipTransitionController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Helper to identify whether this handler is currently the one playing an animation */
|
||||||
|
private boolean isAnimatingLocally() {
|
||||||
|
return mFinishTransaction != null;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
|
public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
|
||||||
@@ -282,9 +286,11 @@ public class PipTransition extends PipTransitionController {
|
|||||||
if (enteringPip) {
|
if (enteringPip) {
|
||||||
mPipTransitionState.setTransitionState(ENTERED_PIP);
|
mPipTransitionState.setTransitionState(ENTERED_PIP);
|
||||||
}
|
}
|
||||||
// If there is an expected exit transition, then the exit will be "merged" into this
|
// If we have an exit transition, but aren't playing a transition locally, it
|
||||||
// transition so don't fire the finish-callback in that case.
|
// means we're expecting the exit transition will be "merged" into another transition
|
||||||
if (mExitTransition == null && mFinishCallback != null) {
|
// (likely a remote like launcher), so don't fire the finish-callback here -- wait until
|
||||||
|
// the exit transition is merged.
|
||||||
|
if ((mExitTransition == null || isAnimatingLocally()) && mFinishCallback != null) {
|
||||||
WindowContainerTransaction wct = new WindowContainerTransaction();
|
WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||||
prepareFinishResizeTransaction(taskInfo, destinationBounds,
|
prepareFinishResizeTransaction(taskInfo, destinationBounds,
|
||||||
direction, wct);
|
direction, wct);
|
||||||
@@ -305,12 +311,19 @@ public class PipTransition extends PipTransitionController {
|
|||||||
mSurfaceTransactionHelper.crop(mFinishTransaction, leash, finishBounds);
|
mSurfaceTransactionHelper.crop(mFinishTransaction, leash, finishBounds);
|
||||||
}
|
}
|
||||||
mFinishTransaction = null;
|
mFinishTransaction = null;
|
||||||
mFinishCallback.onTransitionFinished(wct, null /* callback */);
|
callFinishCallback(wct);
|
||||||
mFinishCallback = null;
|
|
||||||
}
|
}
|
||||||
finishResizeForMenu(destinationBounds);
|
finishResizeForMenu(destinationBounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void callFinishCallback(WindowContainerTransaction wct) {
|
||||||
|
// Need to unset mFinishCallback first because onTransitionFinished can re-enter this
|
||||||
|
// handler if there is a pending PiP animation.
|
||||||
|
final Transitions.TransitionFinishCallback finishCallback = mFinishCallback;
|
||||||
|
mFinishCallback = null;
|
||||||
|
finishCallback.onTransitionFinished(wct, null /* callback */);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void forceFinishTransition() {
|
public void forceFinishTransition() {
|
||||||
if (mFinishCallback == null) return;
|
if (mFinishCallback == null) return;
|
||||||
@@ -572,8 +585,7 @@ public class PipTransition extends PipTransitionController {
|
|||||||
mHasFadeOut = false;
|
mHasFadeOut = false;
|
||||||
|
|
||||||
if (mFinishCallback != null) {
|
if (mFinishCallback != null) {
|
||||||
mFinishCallback.onTransitionFinished(null /* wct */, null /* callback */);
|
callFinishCallback(null /* wct */);
|
||||||
mFinishCallback = null;
|
|
||||||
mFinishTransaction = null;
|
mFinishTransaction = null;
|
||||||
throw new RuntimeException("Previous callback not called, aborting entering PIP.");
|
throw new RuntimeException("Previous callback not called, aborting entering PIP.");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user