diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 7bd3b3253614a..fe754691314de 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -954,6 +954,13 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { // to the transient activity. ar.supportsEnterPipOnTaskSwitch = true; } + // Make sure this activity can enter pip under the current circumstances. + // `enterPictureInPicture` internally checks, but with beforeStopping=false which + // is specifically for non-auto-enter. + if (!ar.checkEnterPictureInPictureState("enterPictureInPictureMode", + true /* beforeStopping */)) { + return false; + } return mController.mAtm.enterPictureInPictureMode(ar, ar.pictureInPictureArgs, false /* fromClient */); } diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index 7cb6b46666f91..c9316bf6e9721 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -813,6 +813,10 @@ class TransitionController { } ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Finish Transition: %s", record); mPlayingTransitions.remove(record); + if (!inTransition()) { + // reset track-count now since shell-side is idle. + mTrackCount = 0; + } updateRunningRemoteAnimation(record, false /* isPlaying */); record.finishTransition(); for (int i = mAnimatingExitWindows.size() - 1; i >= 0; i--) { @@ -825,10 +829,9 @@ class TransitionController { } } mRunningLock.doNotifyLocked(); - // Run state-validation checks when no transitions are active anymore. + // Run state-validation checks when no transitions are active anymore (Note: sometimes + // finish can start a transition, so check afterwards -- eg. pip). if (!inTransition()) { - // Can reset track-count now that everything is idle. - mTrackCount = 0; validateStates(); mAtm.mWindowManager.onAnimationFinished(); }