Pass PictureInPictureParams in TaskInfo.
This way TaskOrganizerImplementations can use the parameters from
taskAppeared. We also wire up taskInfoChanged.
Bug: 146594635
Bug: 139371701
Test: TaskOrganizerTests
Change-Id: I5371af16177ebdf6e2187beb7184efd499c8f36d
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index a54f5d4..9b968cb 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7692,4 +7692,9 @@
}
win.getAnimationFrames(outFrame, outInsets, outStableInsets, outSurfaceInsets);
}
+
+ void setPictureInPictureParams(PictureInPictureParams p) {
+ pictureInPictureArgs.copyOnlySet(p);
+ getTask().getRootTask().setPictureInPictureParams(p);
+ }
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 5f3e3a3..80162fb 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -4153,7 +4153,7 @@
return;
}
// Only update the saved args from the args that are set
- r.pictureInPictureArgs.copyOnlySet(params);
+ r.setPictureInPictureParams(params);
final float aspectRatio = r.pictureInPictureArgs.getAspectRatio();
final List<RemoteAction> actions = r.pictureInPictureArgs.getActions();
// Adjust the source bounds by the insets for the transition down
@@ -4201,7 +4201,7 @@
"setPictureInPictureParams", token, params);
// Only update the saved args from the args that are set
- r.pictureInPictureArgs.copyOnlySet(params);
+ r.setPictureInPictureParams(params);
if (r.inPinnedWindowingMode()) {
// If the activity is already in picture-in-picture, update the pinned stack now
// if it is not already expanding to fullscreen. Otherwise, the arguments will
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index b1db9d7..028274a 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -99,6 +99,7 @@
import android.app.ActivityOptions;
import android.app.ActivityTaskManager;
import android.app.AppGlobals;
+import android.app.PictureInPictureParams;
import android.app.TaskInfo;
import android.app.WindowConfiguration;
import android.content.ComponentName;
@@ -461,6 +462,11 @@
*/
ITaskOrganizer mTaskOrganizer;
+ /**
+ * Last Picture-in-Picture params applicable to the task. Updated when the app
+ * enters Picture-in-Picture or when setPictureInPictureParams is called.
+ */
+ PictureInPictureParams mPictureInPictureParams = new PictureInPictureParams.Builder().build();
/**
* Don't use constructor directly. Use {@link #create(ActivityTaskManagerService, int,
@@ -3199,6 +3205,12 @@
// order changes.
final Task top = getTopMostTask();
info.resizeMode = top != null ? top.mResizeMode : mResizeMode;
+
+ if (mPictureInPictureParams.empty()) {
+ info.pictureInPictureParams = null;
+ } else {
+ info.pictureInPictureParams = mPictureInPictureParams;
+ }
}
/**
@@ -3929,4 +3941,10 @@
void onWindowFocusChanged(boolean hasFocus) {
updateShadowsRadius(hasFocus, getPendingTransaction());
}
+
+ void setPictureInPictureParams(PictureInPictureParams p) {
+ mPictureInPictureParams.copyOnlySet(p);
+ mAtmService.mTaskOrganizerController.dispatchTaskInfoChanged(
+ this, true /* force */);
+ }
}