diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java index 1c5b39e8dc16c..702a8baf0f152 100644 --- a/core/java/android/window/TransitionInfo.java +++ b/core/java/android/window/TransitionInfo.java @@ -352,6 +352,7 @@ public final class TransitionInfo implements Parcelable { private final Rect mEndAbsBounds = new Rect(); private final Point mEndRelOffset = new Point(); private ActivityManager.RunningTaskInfo mTaskInfo = null; + private boolean mAllowEnterPip; private int mStartRotation = ROTATION_UNDEFINED; private int mEndRotation = ROTATION_UNDEFINED; private int mRotationAnimation = ROTATION_ANIMATION_UNSPECIFIED; @@ -372,6 +373,7 @@ public final class TransitionInfo implements Parcelable { mEndAbsBounds.readFromParcel(in); mEndRelOffset.readFromParcel(in); mTaskInfo = in.readTypedObject(ActivityManager.RunningTaskInfo.CREATOR); + mAllowEnterPip = in.readBoolean(); mStartRotation = in.readInt(); mEndRotation = in.readInt(); mRotationAnimation = in.readInt(); @@ -415,6 +417,11 @@ public final class TransitionInfo implements Parcelable { mTaskInfo = taskInfo; } + /** Sets the allowEnterPip flag which represents AppOpsManager check on PiP permission */ + public void setAllowEnterPip(boolean allowEnterPip) { + mAllowEnterPip = allowEnterPip; + } + /** Sets the start and end rotation of this container. */ public void setRotation(@Surface.Rotation int start, @Surface.Rotation int end) { mStartRotation = start; @@ -492,6 +499,10 @@ public final class TransitionInfo implements Parcelable { return mTaskInfo; } + public boolean getAllowEnterPip() { + return mAllowEnterPip; + } + public int getStartRotation() { return mStartRotation; } @@ -517,6 +528,7 @@ public final class TransitionInfo implements Parcelable { mEndAbsBounds.writeToParcel(dest, flags); mEndRelOffset.writeToParcel(dest, flags); dest.writeTypedObject(mTaskInfo, flags); + dest.writeBoolean(mAllowEnterPip); dest.writeInt(mStartRotation); dest.writeInt(mEndRotation); dest.writeInt(mRotationAnimation); diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java index 23a365a1acefb..68905f7955633 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java @@ -216,7 +216,7 @@ public class RemoteAnimationTargetCompat { activityType = ACTIVITY_TYPE_UNDEFINED; } taskInfo = change.getTaskInfo(); - allowEnterPip = false; /* always false in shell-transition case */ + allowEnterPip = change.getAllowEnterPip(); mStartLeash = null; rotationChange = change.getEndRotation() - change.getStartRotation(); windowType = INVALID_WINDOW_TYPE; diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index da16de7d0226f..5366bd42fa1a5 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1070,6 +1070,9 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe task.fillTaskInfo(tinfo); change.setTaskInfo(tinfo); change.setRotationAnimation(getTaskRotationAnimation(task)); + final ActivityRecord topMostActivity = task.getTopMostActivity(); + change.setAllowEnterPip(topMostActivity != null + && topMostActivity.checkEnterPictureInPictureAppOpsState()); } out.addChange(change); }