Deprecate MANAGE_ACTIVITY_STACKS permission
Adding MANAGE_ACTIVITY_TASKS permission as the replacement, but
still grant the deprecated MANAGE_ACTIVITY_STACKS permission for
app compatibility.
Bug: 157876448
Test: presubmit
Change-Id: I894ee66e058b1024a731d3be4b33b69626451f08
diff --git a/api/system-current.txt b/api/system-current.txt
index c932718..55041ec 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -109,7 +109,8 @@
field public static final String LOCK_DEVICE = "android.permission.LOCK_DEVICE";
field public static final String LOOP_RADIO = "android.permission.LOOP_RADIO";
field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY";
- field public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+ field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+ field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
field public static final String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS";
field public static final String MANAGE_APP_PREDICTIONS = "android.permission.MANAGE_APP_PREDICTIONS";
field public static final String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
diff --git a/api/test-current.txt b/api/test-current.txt
index 82838ea..6164e77 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -12,7 +12,8 @@
field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
field public static final String CONTROL_DEVICE_LIGHTS = "android.permission.CONTROL_DEVICE_LIGHTS";
field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES";
- field public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+ field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+ field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
field public static final String MANAGE_CRATES = "android.permission.MANAGE_CRATES";
field public static final String MANAGE_NOTIFICATION_LISTENERS = "android.permission.MANAGE_NOTIFICATION_LISTENERS";
field public static final String MANAGE_ROLLBACKS = "android.permission.MANAGE_ROLLBACKS";
@@ -128,19 +129,19 @@
}
public class ActivityTaskManager {
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void clearLaunchParamsForPackages(java.util.List<java.lang.String>);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void clearLaunchParamsForPackages(java.util.List<java.lang.String>);
method public static boolean currentUiModeSupportsErrorDialogs(@NonNull android.content.Context);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void moveTaskToRootTask(int, int, boolean);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean moveTopActivityToPinnedRootTask(int, @NonNull android.graphics.Rect);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void removeRootTasksInWindowingModes(@NonNull int[]);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void removeRootTasksWithActivityTypes(@NonNull int[]);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void requestPictureInPictureMode(@NonNull android.os.IBinder);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void resizePrimarySplitScreen(@NonNull android.graphics.Rect, @NonNull android.graphics.Rect);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void resizeTask(int, android.graphics.Rect);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean setTaskWindowingMode(int, int, boolean) throws java.lang.SecurityException;
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean setTaskWindowingModeSplitScreenPrimary(int, int, boolean, boolean, android.graphics.Rect, boolean) throws java.lang.SecurityException;
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void startSystemLockTaskMode(int);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void stopSystemLockTaskMode();
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void moveTaskToRootTask(int, int, boolean);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean moveTopActivityToPinnedRootTask(int, @NonNull android.graphics.Rect);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksInWindowingModes(@NonNull int[]);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksWithActivityTypes(@NonNull int[]);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void requestPictureInPictureMode(@NonNull android.os.IBinder);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void resizePrimarySplitScreen(@NonNull android.graphics.Rect, @NonNull android.graphics.Rect);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void resizeTask(int, android.graphics.Rect);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean setTaskWindowingMode(int, int, boolean) throws java.lang.SecurityException;
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean setTaskWindowingModeSplitScreenPrimary(int, int, boolean, boolean, android.graphics.Rect, boolean) throws java.lang.SecurityException;
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void startSystemLockTaskMode(int);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void stopSystemLockTaskMode();
method public static boolean supportsMultiWindow(android.content.Context);
method public static boolean supportsSplitScreenMultiWindow(android.content.Context);
field public static final int DEFAULT_MINIMAL_SPLIT_SCREEN_DISPLAY_SIZE_DP = 440; // 0x1b8
@@ -2353,7 +2354,7 @@
ctor public DisplayAreaOrganizer();
method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl);
method public void onDisplayAreaVanished(@NonNull android.window.DisplayAreaInfo);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void registerOrganizer(int);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void registerOrganizer(int);
field public static final int FEATURE_DEFAULT_TASK_CONTAINER = 1; // 0x1
field public static final int FEATURE_ONE_HANDED = 3; // 0x3
field public static final int FEATURE_ROOT = 0; // 0x0
@@ -2376,19 +2377,19 @@
public class TaskOrganizer extends android.window.WindowOrganizer {
ctor public TaskOrganizer();
- method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void createRootTask(int, int, @Nullable android.os.IBinder);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean deleteRootTask(@NonNull android.window.WindowContainerToken);
- method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
- method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.WindowContainerToken getImeTarget(int);
- method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]);
+ method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void createRootTask(int, int, @Nullable android.os.IBinder);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean deleteRootTask(@NonNull android.window.WindowContainerToken);
+ method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
+ method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public android.window.WindowContainerToken getImeTarget(int);
+ method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]);
method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo);
method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
- method @CallSuper @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public java.util.List<android.window.TaskAppearedInfo> registerOrganizer();
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setInterceptBackPressedOnTaskRoot(@NonNull android.window.WindowContainerToken, boolean);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void setLaunchRoot(int, @NonNull android.window.WindowContainerToken);
- method @CallSuper @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void unregisterOrganizer();
+ method @CallSuper @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.window.TaskAppearedInfo> registerOrganizer();
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void setInterceptBackPressedOnTaskRoot(@NonNull android.window.WindowContainerToken, boolean);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void setLaunchRoot(int, @NonNull android.window.WindowContainerToken);
+ method @CallSuper @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void unregisterOrganizer();
}
public final class WindowContainerToken implements android.os.Parcelable {
@@ -2423,8 +2424,8 @@
public class WindowOrganizer {
ctor public WindowOrganizer();
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public int applySyncTransaction(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.WindowContainerTransactionCallback);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void applyTransaction(@NonNull android.window.WindowContainerTransaction);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public int applySyncTransaction(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.WindowContainerTransactionCallback);
+ method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void applyTransaction(@NonNull android.window.WindowContainerTransaction);
}
}
diff --git a/core/java/android/app/ActivityTaskManager.java b/core/java/android/app/ActivityTaskManager.java
index 9edf81e..c9b009b 100644
--- a/core/java/android/app/ActivityTaskManager.java
+++ b/core/java/android/app/ActivityTaskManager.java
@@ -173,7 +173,7 @@
* @param toTop If the task should be moved to the top once the windowing mode changes.
* @return Whether the task was successfully put into the specified windowing mode.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public boolean setTaskWindowingMode(int taskId, int windowingMode, boolean toTop)
throws SecurityException {
try {
@@ -200,7 +200,7 @@
* going into split-screen mode.
* @return Whether the task was successfully put into splitscreen.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public boolean setTaskWindowingModeSplitScreenPrimary(int taskId, int createMode, boolean toTop,
boolean animate, Rect initialBounds, boolean showRecents) throws SecurityException {
try {
@@ -214,7 +214,7 @@
* Removes root tasks in the windowing modes from the system if they are of activity type
* ACTIVITY_TYPE_STANDARD or ACTIVITY_TYPE_UNDEFINED
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void removeRootTasksInWindowingModes(@NonNull int[] windowingModes) {
try {
getService().removeRootTasksInWindowingModes(windowingModes);
@@ -224,7 +224,7 @@
}
/** Removes root tasks of the activity types from the system. */
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void removeRootTasksWithActivityTypes(@NonNull int[] activityTypes) {
try {
getService().removeRootTasksWithActivityTypes(activityTypes);
@@ -315,7 +315,7 @@
* @param bounds Bounds to use for pinned root task.
* @return True if the top activity of root task was successfully moved to the pinned root task.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public boolean moveTopActivityToPinnedRootTask(int rootTaskId, @NonNull Rect bounds) {
try {
return getService().moveTopActivityToPinnedRootTask(rootTaskId, bounds);
@@ -328,7 +328,7 @@
* Start to enter lock task mode for given task by system(UI).
* @param taskId Id of task to lock.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void startSystemLockTaskMode(int taskId) {
try {
getService().startSystemLockTaskMode(taskId);
@@ -340,7 +340,7 @@
/**
* Stop lock task mode by system(UI).
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void stopSystemLockTaskMode() {
try {
getService().stopSystemLockTaskMode();
@@ -355,7 +355,7 @@
* @param rootTaskId Id of the rootTask for task moving.
* @param toTop Whether the given task should shown to top of stack.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void moveTaskToRootTask(int taskId, int rootTaskId, boolean toTop) {
try {
getService().moveTaskToRootTask(taskId, rootTaskId, toTop);
@@ -369,7 +369,7 @@
* @param taskId Id of task to resize.
* @param bounds Bounds to resize task.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void resizeTask(int taskId, Rect bounds) {
try {
getService().resizeTask(taskId, bounds, RESIZE_MODE_SYSTEM);
@@ -383,7 +383,7 @@
* @param rootTaskBounds Bounds to resize stack.
* @param taskBounds Bounds to resize task.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void resizePrimarySplitScreen(@NonNull Rect rootTaskBounds, @NonNull Rect taskBounds) {
try {
getService().resizePrimarySplitScreen(rootTaskBounds, taskBounds, null, null, null);
@@ -396,7 +396,7 @@
* Clears launch params for the given package.
* @param packageNames the names of the packages of which the launch params are to be cleared
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void clearLaunchParamsForPackages(List<String> packageNames) {
try {
getService().clearLaunchParamsForPackages(packageNames);
@@ -410,7 +410,7 @@
* @hide
*/
@TestApi
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void requestPictureInPictureMode(@NonNull IBinder token) {
try {
getService().requestPictureInPictureMode(token);
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index d540059..d6c53d0 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -2154,7 +2154,7 @@
* {@link DragEvent#ACTION_DROP}) will be relinquished to the window.
* @hide
*/
- @RequiresPermission(permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(permission.MANAGE_ACTIVITY_TASKS)
public static final int PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP = 0x80000000;
/**
diff --git a/core/java/android/window/DisplayAreaOrganizer.java b/core/java/android/window/DisplayAreaOrganizer.java
index 78fa303..38b2190 100644
--- a/core/java/android/window/DisplayAreaOrganizer.java
+++ b/core/java/android/window/DisplayAreaOrganizer.java
@@ -84,7 +84,7 @@
*/
public static final int FEATURE_VENDOR_FIRST = FEATURE_SYSTEM_LAST + 1;
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void registerOrganizer(int displayAreaFeature) {
try {
getController().registerOrganizer(mInterface, displayAreaFeature);
@@ -96,7 +96,7 @@
/**
* @hide
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void unregisterOrganizer() {
try {
getController().unregisterOrganizer(mInterface);
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java
index ad48a9f..4e20920 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -62,7 +62,7 @@
* @return a list of the tasks that should be managed by the organizer, not including tasks
* created via {@link #createRootTask}.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
@CallSuper
@NonNull
public List<TaskAppearedInfo> registerOrganizer() {
@@ -74,7 +74,7 @@
}
/** Unregisters a previously registered task organizer. */
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
@CallSuper
public void unregisterOrganizer() {
try {
@@ -109,7 +109,7 @@
* @param launchCookie Launch cookie to associate with the task so that is can be identified
* when the {@link ITaskOrganizer#onTaskAppeared} callback is called.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
@Nullable
public void createRootTask(int displayId, int windowingMode, @Nullable IBinder launchCookie) {
try {
@@ -120,7 +120,7 @@
}
/** Deletes a persistent root task in WM */
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public boolean deleteRootTask(@NonNull WindowContainerToken task) {
try {
return mTaskOrganizerController.deleteRootTask(task);
@@ -130,7 +130,7 @@
}
/** Gets direct child tasks (ordered from top-to-bottom) */
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
@Nullable
public List<ActivityManager.RunningTaskInfo> getChildTasks(
@NonNull WindowContainerToken parent, @NonNull int[] activityTypes) {
@@ -142,7 +142,7 @@
}
/** Gets all root tasks on a display (ordered from top-to-bottom) */
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
@Nullable
public List<ActivityManager.RunningTaskInfo> getRootTasks(
int displayId, @NonNull int[] activityTypes) {
@@ -154,7 +154,7 @@
}
/** Get the root task which contains the current ime target */
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
@Nullable
public WindowContainerToken getImeTarget(int display) {
try {
@@ -168,7 +168,7 @@
* Set's the root task to launch new tasks into on a display. {@code null} means no launch
* root and thus new tasks just end up directly on the display.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void setLaunchRoot(int displayId, @NonNull WindowContainerToken root) {
try {
mTaskOrganizerController.setLaunchRoot(displayId, root);
@@ -181,7 +181,7 @@
* Requests that the given task organizer is notified when back is pressed on the root activity
* of one of its controlled tasks.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void setInterceptBackPressedOnTaskRoot(@NonNull WindowContainerToken task,
boolean interceptBackPressed) {
try {
diff --git a/core/java/android/window/WindowOrganizer.java b/core/java/android/window/WindowOrganizer.java
index 5ac19fa..bb03e28 100644
--- a/core/java/android/window/WindowOrganizer.java
+++ b/core/java/android/window/WindowOrganizer.java
@@ -39,7 +39,7 @@
* Apply multiple WindowContainer operations at once.
* @param t The transaction to apply.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void applyTransaction(@NonNull WindowContainerTransaction t) {
try {
getWindowOrganizerController().applyTransaction(t);
@@ -57,7 +57,7 @@
* @return An ID for the sync operation which will later be passed to transactionReady callback.
* This lets the caller differentiate overlapping sync operations.
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public int applySyncTransaction(@NonNull WindowContainerTransaction t,
@NonNull WindowContainerTransactionCallback callback) {
try {
@@ -76,7 +76,7 @@
* was provided.
* @hide
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
@NonNull
public IBinder startTransition(int type, @Nullable IBinder transitionToken,
@Nullable WindowContainerTransaction t) {
@@ -97,7 +97,7 @@
* @hide
*/
@SuppressLint("ExecutorRegistration")
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public int finishTransition(@NonNull IBinder transitionToken,
@Nullable WindowContainerTransaction t,
@Nullable WindowContainerTransactionCallback callback) {
@@ -135,7 +135,7 @@
* Register an ITransitionPlayer to handle transition animations.
* @hide
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
public void registerTransitionPlayer(@Nullable ITransitionPlayer player) {
try {
getWindowOrganizerController().registerTransitionPlayer(player);
@@ -144,7 +144,7 @@
}
}
- @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
+ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
IWindowOrganizerController getWindowOrganizerController() {
return IWindowOrganizerControllerSingleton.get();
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 95a7414..0d76e56 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -2535,10 +2535,15 @@
<permission android:name="android.permission.REMOVE_TASKS"
android:protectionLevel="signature|documenter" />
- <!-- @SystemApi @TestApi @hide Allows an application to create/manage/remove stacks -->
+ <!-- @deprecated Use MANAGE_ACTIVITY_TASKS instead.
+ @SystemApi @TestApi @hide Allows an application to create/manage/remove stacks -->
<permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"
android:protectionLevel="signature" />
+ <!-- @SystemApi @TestApi @hide Allows an application to create/manage/remove tasks -->
+ <permission android:name="android.permission.MANAGE_ACTIVITY_TASKS"
+ android:protectionLevel="signature" />
+
<!-- @SystemApi @TestApi @hide Allows an application to embed other activities -->
<permission android:name="android.permission.ACTIVITY_EMBEDDING"
android:protectionLevel="signature|privileged" />
diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt
index b2d13f9..0b78b64 100644
--- a/non-updatable-api/system-current.txt
+++ b/non-updatable-api/system-current.txt
@@ -109,7 +109,8 @@
field public static final String LOCK_DEVICE = "android.permission.LOCK_DEVICE";
field public static final String LOOP_RADIO = "android.permission.LOOP_RADIO";
field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY";
- field public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+ field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+ field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
field public static final String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS";
field public static final String MANAGE_APP_PREDICTIONS = "android.permission.MANAGE_APP_PREDICTIONS";
field public static final String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 5f018a0..ba4bda9 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -143,7 +143,7 @@
<uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_VIBRATOR_STATE" />
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS" />
<uses-permission android:name="android.permission.START_TASKS_FROM_RECENTS" />
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<uses-permission android:name="android.permission.ACTIVITY_EMBEDDING" />
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index ddd0dac..f9268eec 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -99,7 +99,7 @@
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.GET_TOP_ACTIVITY_INFO" />
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS" />
<uses-permission android:name="android.permission.START_ACTIVITY_AS_CALLER" />
<uses-permission android:name="android.permission.START_TASKS_FROM_RECENTS" />
<uses-permission android:name="android.permission.GET_INTENT_SENDER_INTENT" />
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index d541c8f..e5847b0 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -46,7 +46,7 @@
<uses-permission android:name="android.permission.DEVICE_POWER" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.STATUS_BAR" />
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS" />
<uses-permission android:name="android.permission.REAL_GET_TASKS" />
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
<uses-permission android:name="android.permission.NETWORK_SETTINGS" />
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 6e5c041..4a338b3 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -1970,7 +1970,7 @@
}
if ((flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) {
- mAm.enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS,
+ mAm.enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS,
"BIND_TREAT_LIKE_ACTIVITY");
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 6749cdf..61b672d 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -23,6 +23,7 @@
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS;
+import static android.Manifest.permission.MANAGE_ACTIVITY_TASKS;
import static android.Manifest.permission.READ_FRAME_BUFFER;
import static android.Manifest.permission.REMOVE_TASKS;
import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
@@ -1604,7 +1605,7 @@
@Override
public void startRecentsActivity(Intent intent, long eventTime,
@Nullable IRecentsAnimationRunner recentsAnimationRunner) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "startRecentsActivity()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "startRecentsActivity()");
final int callingPid = Binder.getCallingPid();
final int callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
@@ -2190,7 +2191,7 @@
@Override
public RootTaskInfo getFocusedRootTaskInfo() throws RemoteException {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getFocusedRootTaskInfo()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "getFocusedRootTaskInfo()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -2207,7 +2208,7 @@
@Override
public void setFocusedRootTask(int taskId) {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "setFocusedRootTask()");
+ enforceTaskPermission("setFocusedRootTask()");
ProtoLog.d(WM_DEBUG_FOCUS, "setFocusedRootTask: taskId=%d", taskId);
final long callingId = Binder.clearCallingIdentity();
try {
@@ -2229,7 +2230,7 @@
@Override
public void setFocusedTask(int taskId) {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "setFocusedTask()");
+ enforceTaskPermission("setFocusedTask()");
ProtoLog.d(WM_DEBUG_FOCUS, "setFocusedTask: taskId=%d", taskId);
final long callingId = Binder.clearCallingIdentity();
try {
@@ -2251,7 +2252,7 @@
@Override
public void restartActivityProcessIfVisible(IBinder activityToken) {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "restartActivityProcess()");
+ enforceTaskPermission("restartActivityProcess()");
final long callingId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -2375,7 +2376,7 @@
@Override
public Rect getTaskBounds(int taskId) {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "getTaskBounds()");
+ enforceTaskPermission("getTaskBounds()");
final long ident = Binder.clearCallingIdentity();
Rect rect = new Rect();
try {
@@ -2402,7 +2403,7 @@
public ActivityManager.TaskDescription getTaskDescription(int id) {
synchronized (mGlobalLock) {
enforceCallerIsRecentsOrHasPermission(
- MANAGE_ACTIVITY_STACKS, "getTaskDescription()");
+ MANAGE_ACTIVITY_TASKS, "getTaskDescription()");
final Task tr = mRootWindowContainer.anyTaskForId(id,
MATCH_TASK_IN_STACKS_OR_RECENT_TASKS);
if (tr != null) {
@@ -2417,7 +2418,7 @@
if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
return setTaskWindowingModeSplitScreenPrimary(taskId, toTop);
}
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "setTaskWindowingMode()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "setTaskWindowingMode()");
synchronized (mGlobalLock) {
final long ident = Binder.clearCallingIdentity();
try {
@@ -2801,7 +2802,7 @@
@Override
public void moveTaskToRootTask(int taskId, int rootTaskId, boolean toTop) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "moveTaskToRootTask()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "moveTaskToRootTask()");
synchronized (mGlobalLock) {
final long ident = Binder.clearCallingIdentity();
try {
@@ -2840,7 +2841,7 @@
*/
@Override
public boolean setTaskWindowingModeSplitScreenPrimary(int taskId, boolean toTop) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"setTaskWindowingModeSplitScreenPrimary()");
synchronized (mGlobalLock) {
final long ident = Binder.clearCallingIdentity();
@@ -2917,7 +2918,7 @@
*/
@Override
public void removeRootTasksInWindowingModes(int[] windowingModes) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"removeRootTasksInWindowingModes()");
synchronized (mGlobalLock) {
@@ -2932,7 +2933,7 @@
@Override
public void removeRootTasksWithActivityTypes(int[] activityTypes) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"removeRootTasksWithActivityTypes()");
synchronized (mGlobalLock) {
@@ -2959,7 +2960,7 @@
@Override
public List<RootTaskInfo> getAllRootTaskInfos() {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllRootTaskInfos()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "getAllRootTaskInfos()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -2972,7 +2973,7 @@
@Override
public RootTaskInfo getRootTaskInfo(int windowingMode, int activityType) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getRootTaskInfo()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "getRootTaskInfo()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -2985,7 +2986,7 @@
@Override
public List<RootTaskInfo> getAllRootTaskInfosOnDisplay(int displayId) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"getAllRootTaskInfosOnDisplay()");
final long ident = Binder.clearCallingIdentity();
try {
@@ -3000,7 +3001,7 @@
@Override
public RootTaskInfo getRootTaskInfoOnDisplay(int windowingMode, int activityType,
int displayId) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getRootTaskInfoOnDisplay()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "getRootTaskInfoOnDisplay()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -3013,7 +3014,7 @@
@Override
public void cancelRecentsAnimation(boolean restoreHomeRootTaskPosition) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "cancelRecentsAnimation()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "cancelRecentsAnimation()");
final long callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
@@ -3041,7 +3042,7 @@
@Override
public void startSystemLockTaskMode(int taskId) {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "startSystemLockTaskMode");
+ enforceTaskPermission("startSystemLockTaskMode");
// This makes inner call to look as if it was initiated by system.
final long ident = Binder.clearCallingIdentity();
try {
@@ -3072,7 +3073,7 @@
*/
@Override
public void stopSystemLockTaskMode() throws RemoteException {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "stopSystemLockTaskMode");
+ enforceTaskPermission("stopSystemLockTaskMode");
stopLockTaskModeInternal(null, true /* isSystemCaller */);
}
@@ -3406,7 +3407,7 @@
@Override
public boolean resizeTask(int taskId, Rect bounds, int resizeMode) {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "resizeTask()");
+ enforceTaskPermission("resizeTask()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -3580,7 +3581,7 @@
/** Sets the task stack listener that gets callbacks when a task stack changes. */
@Override
public void registerTaskStackListener(ITaskStackListener listener) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"registerTaskStackListener()");
mTaskChangeNotificationController.registerTaskStackListener(listener);
}
@@ -3588,7 +3589,7 @@
/** Unregister a task stack listener so that it stops receiving callbacks. */
@Override
public void unregisterTaskStackListener(ITaskStackListener listener) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"unregisterTaskStackListener()");
mTaskChangeNotificationController.unregisterTaskStackListener(listener);
}
@@ -3644,11 +3645,34 @@
/** This can be called with or without the global lock held. */
void enforceCallerIsRecentsOrHasPermission(String permission, String func) {
- if (!getRecentTasks().isCallerRecents(Binder.getCallingUid())) {
+ if (getRecentTasks().isCallerRecents(Binder.getCallingUid())) {
+ return;
+ }
+
+ if (permission.equals(MANAGE_ACTIVITY_TASKS) || permission.equals(MANAGE_ACTIVITY_STACKS)) {
+ enforceTaskPermission(func);
+ } else {
mAmInternal.enforceCallingPermission(permission, func);
}
}
+ static void enforceTaskPermission(String func) {
+ if (checkCallingPermission(MANAGE_ACTIVITY_TASKS) == PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+
+ if (checkCallingPermission(MANAGE_ACTIVITY_STACKS) == PackageManager.PERMISSION_GRANTED) {
+ Slog.w(TAG, "MANAGE_ACTIVITY_STACKS is deprecated, "
+ + "please use alternative permission: MANAGE_ACTIVITY_TASKS");
+ return;
+ }
+
+ String msg = "Permission Denial: " + func + " from pid=" + Binder.getCallingPid() + ", uid="
+ + Binder.getCallingUid() + " requires android.permission.MANAGE_ACTIVITY_TASKS";
+ Slog.w(TAG, msg);
+ throw new SecurityException(msg);
+ }
+
@VisibleForTesting
int checkGetTasksPermission(String permission, int pid, int uid) {
return checkPermission(permission, pid, uid);
@@ -4013,7 +4037,7 @@
@Override
public void suppressResizeConfigChanges(boolean suppress) throws RemoteException {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS,
+ mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_TASKS,
"suppressResizeConfigChanges()");
synchronized (mGlobalLock) {
mSuppressResizeConfigChanges = suppress;
@@ -4030,7 +4054,7 @@
*/
@Override
public boolean moveTopActivityToPinnedRootTask(int rootTaskId, Rect bounds) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"moveTopActivityToPinnedRootTask()");
synchronized (mGlobalLock) {
if (!mSupportsPictureInPicture) {
@@ -4215,7 +4239,7 @@
public void resizePrimarySplitScreen(Rect dockedBounds, Rect tempDockedTaskBounds,
Rect tempDockedTaskInsetBounds,
Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "resizePrimarySplitScreen()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "resizePrimarySplitScreen()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -4253,7 +4277,7 @@
@Override
public void setSplitScreenResizing(boolean resizing) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "setSplitScreenResizing()");
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "setSplitScreenResizing()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -4266,8 +4290,7 @@
@Override
public IWindowOrganizerController getWindowOrganizerController() {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS,
- "getWindowOrganizerController()");
+ enforceTaskPermission("getWindowOrganizerController()");
return mWindowOrganizerController;
}
@@ -4408,7 +4431,7 @@
@Override
public void cancelTaskWindowTransition(int taskId) {
- enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS,
+ enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS,
"cancelTaskWindowTransition()");
final long ident = Binder.clearCallingIdentity();
try {
@@ -4812,8 +4835,7 @@
*/
@Override
public void clearLaunchParamsForPackages(List<String> packageNames) {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS,
- "clearLaunchParamsForPackages");
+ enforceTaskPermission("clearLaunchParamsForPackages");
synchronized (mGlobalLock) {
for (int i = 0; i < packageNames.size(); ++i) {
mStackSupervisor.mLaunchParamsPersister.removeRecordForPackage(packageNames.get(i));
@@ -4826,8 +4848,7 @@
*/
@Override
public void requestPictureInPictureMode(IBinder token) throws RemoteException {
- mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS,
- "requestPictureInPictureMode");
+ enforceTaskPermission("requestPictureInPictureMode");
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -6921,8 +6942,7 @@
@Override
public void startConfirmDeviceCredentialIntent(Intent intent, Bundle options) {
- mAmInternal.enforceCallingPermission(
- MANAGE_ACTIVITY_STACKS, "startConfirmDeviceCredentialIntent");
+ enforceTaskPermission("startConfirmDeviceCredentialIntent");
synchronized (mGlobalLock) {
final long ident = Binder.clearCallingIdentity();
diff --git a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
index dd92f507..667f3dc 100644
--- a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
+++ b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
@@ -16,9 +16,6 @@
package com.android.server.wm;
-import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS;
-
-
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_ORGANIZER;
import android.os.Binder;
@@ -62,13 +59,13 @@
mGlobalLock = atm.mGlobalLock;
}
- private void enforceStackPermission(String func) {
- mService.mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, func);
+ private void enforceTaskPermission(String func) {
+ mService.enforceTaskPermission(func);
}
@Override
public void registerOrganizer(IDisplayAreaOrganizer organizer, int feature) {
- enforceStackPermission("registerOrganizer()");
+ enforceTaskPermission("registerOrganizer()");
final long uid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
@@ -100,7 +97,7 @@
@Override
public void unregisterOrganizer(IDisplayAreaOrganizer organizer) {
- enforceStackPermission("unregisterTaskOrganizer()");
+ enforceTaskPermission("unregisterTaskOrganizer()");
final long uid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index baa26e6..7a42b0d 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -55,7 +55,6 @@
import static android.view.WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
import static android.view.WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;
-import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
@@ -991,9 +990,7 @@
"DisplayPolicy");
}
if ((attrs.privateFlags & PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP) != 0) {
- mContext.enforcePermission(
- android.Manifest.permission.MANAGE_ACTIVITY_STACKS, callingPid, callingUid,
- "DisplayPolicy");
+ ActivityTaskManagerService.enforceTaskPermission("DisplayPolicy");
}
switch (attrs.type) {
diff --git a/services/core/java/com/android/server/wm/LockTaskController.java b/services/core/java/com/android/server/wm/LockTaskController.java
index c496901..e90436e 100644
--- a/services/core/java/com/android/server/wm/LockTaskController.java
+++ b/services/core/java/com/android/server/wm/LockTaskController.java
@@ -430,7 +430,7 @@
// instead of the app calling startLockTaskMode. In this case
// {@link Task.mLockTaskUid} will be 0, so we compare the callingUid to the
// {@link Task.effectiveUid} instead. Also caller with
- // {@link MANAGE_ACTIVITY_STACKS} can stop any lock task.
+ // {@link MANAGE_ACTIVITY_TASKS} can stop any lock task.
if (callingUid != task.mLockTaskUid
&& (task.mLockTaskUid != 0 || callingUid != task.effectiveUid)) {
throw new SecurityException("Invalid uid, expected " + task.mLockTaskUid
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index a70efbc..2c39c2b 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -16,7 +16,6 @@
package com.android.server.wm;
-import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
@@ -293,8 +292,8 @@
mGlobalLock = atm.mGlobalLock;
}
- private void enforceStackPermission(String func) {
- mService.mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, func);
+ private void enforceTaskPermission(String func) {
+ mService.enforceTaskPermission(func);
}
/**
@@ -310,7 +309,7 @@
*/
@Override
public ParceledListSlice<TaskAppearedInfo> registerTaskOrganizer(ITaskOrganizer organizer) {
- enforceStackPermission("registerTaskOrganizer()");
+ enforceTaskPermission("registerTaskOrganizer()");
final int uid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
@@ -355,7 +354,7 @@
@Override
public void unregisterTaskOrganizer(ITaskOrganizer organizer) {
- enforceStackPermission("unregisterTaskOrganizer()");
+ enforceTaskPermission("unregisterTaskOrganizer()");
final int uid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
@@ -401,7 +400,7 @@
@Override
public void createRootTask(int displayId, int windowingMode, @Nullable IBinder launchCookie) {
- enforceStackPermission("createRootTask()");
+ enforceTaskPermission("createRootTask()");
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -435,7 +434,7 @@
@Override
public boolean deleteRootTask(WindowContainerToken token) {
- enforceStackPermission("deleteRootTask()");
+ enforceTaskPermission("deleteRootTask()");
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -529,7 +528,7 @@
@Override
public WindowContainerToken getImeTarget(int displayId) {
- enforceStackPermission("getImeTarget()");
+ enforceTaskPermission("getImeTarget()");
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -552,7 +551,7 @@
@Override
public void setLaunchRoot(int displayId, @Nullable WindowContainerToken token) {
- enforceStackPermission("setLaunchRoot()");
+ enforceTaskPermission("setLaunchRoot()");
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -586,7 +585,7 @@
@Override
public List<RunningTaskInfo> getChildTasks(WindowContainerToken parent,
@Nullable int[] activityTypes) {
- enforceStackPermission("getChildTasks()");
+ enforceTaskPermission("getChildTasks()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -627,7 +626,7 @@
@Override
public List<RunningTaskInfo> getRootTasks(int displayId, @Nullable int[] activityTypes) {
- enforceStackPermission("getRootTasks()");
+ enforceTaskPermission("getRootTasks()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -657,7 +656,7 @@
@Override
public void setInterceptBackPressedOnTaskRoot(WindowContainerToken token,
boolean interceptBackPressed) {
- enforceStackPermission("setInterceptBackPressedOnTaskRoot()");
+ enforceTaskPermission("setInterceptBackPressedOnTaskRoot()");
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 0eadbf2..e92140a 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -19,7 +19,6 @@
import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS;
import static android.Manifest.permission.INPUT_CONSUMER;
import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
-import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS;
import static android.Manifest.permission.MANAGE_APP_TOKENS;
import static android.Manifest.permission.READ_FRAME_BUFFER;
import static android.Manifest.permission.REGISTER_WINDOW_MANAGER_LISTENERS;
@@ -3956,10 +3955,7 @@
@Override
public void setDisplayWindowRotationController(IDisplayWindowRotationController controller) {
- if (mContext.checkCallingOrSelfPermission(MANAGE_ACTIVITY_STACKS)
- != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Must hold permission " + MANAGE_ACTIVITY_STACKS);
- }
+ mAtmService.enforceTaskPermission("setDisplayWindowRotationController");
try {
synchronized (mGlobalLock) {
if (mDisplayRotationController != null) {
@@ -4228,10 +4224,7 @@
/** Registers a hierarchy listener that gets callbacks when the hierarchy changes. */
@Override
public void registerDisplayWindowListener(IDisplayWindowListener listener) {
- if (mContext.checkCallingOrSelfPermission(MANAGE_ACTIVITY_STACKS)
- != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Must hold permission " + MANAGE_ACTIVITY_STACKS);
- }
+ mAtmService.enforceTaskPermission("registerDisplayWindowListener");
final long ident = Binder.clearCallingIdentity();
try {
mDisplayNotificationController.registerListener(listener);
@@ -4243,10 +4236,7 @@
/** Unregister a hierarchy listener so that it stops receiving callbacks. */
@Override
public void unregisterDisplayWindowListener(IDisplayWindowListener listener) {
- if (mContext.checkCallingOrSelfPermission(MANAGE_ACTIVITY_STACKS)
- != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Must hold permission " + MANAGE_ACTIVITY_STACKS);
- }
+ mAtmService.enforceTaskPermission("unregisterDisplayWindowListener");
mDisplayNotificationController.unregisterListener(listener);
}
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index ae152d2..51857dc 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -16,7 +16,6 @@
package com.android.server.wm;
-import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS;
import static android.Manifest.permission.READ_FRAME_BUFFER;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_ORGANIZER;
@@ -117,7 +116,7 @@
@Override
public IBinder startTransition(int type, @Nullable IBinder transitionToken,
@Nullable WindowContainerTransaction t) {
- enforceStackPermission("startTransition()");
+ enforceTaskPermission("startTransition()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -144,7 +143,7 @@
public int finishTransition(@NonNull IBinder transitionToken,
@Nullable WindowContainerTransaction t,
@Nullable IWindowContainerTransactionCallback callback) {
- enforceStackPermission("finishTransition()");
+ enforceTaskPermission("finishTransition()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -168,7 +167,7 @@
private int applyTransaction(@NonNull WindowContainerTransaction t,
@Nullable IWindowContainerTransactionCallback callback,
@Nullable Transition transition) {
- enforceStackPermission("applySyncTransaction()");
+ enforceTaskPermission("applySyncTransaction()");
int syncId = -1;
if (t == null) {
throw new IllegalArgumentException(
@@ -491,13 +490,13 @@
@Override
public ITaskOrganizerController getTaskOrganizerController() {
- enforceStackPermission("getTaskOrganizerController()");
+ enforceTaskPermission("getTaskOrganizerController()");
return mTaskOrganizerController;
}
@Override
public IDisplayAreaOrganizerController getDisplayAreaOrganizerController() {
- enforceStackPermission("getDisplayAreaOrganizerController()");
+ enforceTaskPermission("getDisplayAreaOrganizerController()");
return mDisplayAreaOrganizerController;
}
@@ -573,7 +572,7 @@
@Override
public void registerTransitionPlayer(ITransitionPlayer player) {
- enforceStackPermission("registerTransitionPlayer()");
+ enforceTaskPermission("registerTransitionPlayer()");
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -584,7 +583,7 @@
}
}
- private void enforceStackPermission(String func) {
- mService.mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, func);
+ private void enforceTaskPermission(String func) {
+ mService.enforceTaskPermission(func);
}
}
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index 79936ce..26fd0a2 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -45,7 +45,7 @@
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.PACKET_KEEPALIVE_OFFLOAD"/>
<uses-permission android:name="android.permission.GET_INTENT_SENDER_INTENT"/>
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"/>
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml
index 9099272..7f4f3dd 100644
--- a/services/tests/wmtests/AndroidManifest.xml
+++ b/services/tests/wmtests/AndroidManifest.xml
@@ -24,7 +24,7 @@
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS" />
<uses-permission android:name="android.permission.GET_TOP_ACTIVITY_INFO" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
<uses-permission android:name="android.permission.STORAGE_INTERNAL" />
diff --git a/services/tests/wmtests/src/com/android/server/wm/DragDropControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/DragDropControllerTests.java
index 747fb89..823aef0 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DragDropControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DragDropControllerTests.java
@@ -27,7 +27,6 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
@@ -35,7 +34,6 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.verify;
import android.app.PendingIntent;
@@ -199,8 +197,7 @@
attrs.privateFlags |= PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP;
policy.validateAddingWindowLw(attrs, Binder.getCallingPid(), Binder.getCallingUid());
- verify(mWm.mContext).enforcePermission(
- eq(android.Manifest.permission.MANAGE_ACTIVITY_STACKS), anyInt(), anyInt(), any());
+ verify(mWm.mAtmService).enforceTaskPermission(any());
}
@Test
diff --git a/tests/ActivityViewTest/AndroidManifest.xml b/tests/ActivityViewTest/AndroidManifest.xml
index c84b7d9..7563a25 100644
--- a/tests/ActivityViewTest/AndroidManifest.xml
+++ b/tests/ActivityViewTest/AndroidManifest.xml
@@ -17,7 +17,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.test.activityview">
<uses-permission android:name="android.permission.INJECT_EVENTS"/>
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"/>
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS"/>
<uses-permission android:name="android.permission.ACTIVITY_EMBEDDING"/>
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
diff --git a/tests/TaskOrganizerTest/AndroidManifest.xml b/tests/TaskOrganizerTest/AndroidManifest.xml
index f0ba71a..451a55f 100644
--- a/tests/TaskOrganizerTest/AndroidManifest.xml
+++ b/tests/TaskOrganizerTest/AndroidManifest.xml
@@ -14,7 +14,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.test.taskembed">
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"/>
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS"/>
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
<application>
<service android:name=".TaskOrganizerPipTest"
diff --git a/tests/net/AndroidManifest.xml b/tests/net/AndroidManifest.xml
index 009f817..6bed5a8 100644
--- a/tests/net/AndroidManifest.xml
+++ b/tests/net/AndroidManifest.xml
@@ -42,7 +42,7 @@
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.PACKET_KEEPALIVE_OFFLOAD" />
<uses-permission android:name="android.permission.GET_INTENT_SENDER_INTENT" />
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.NETWORK_STACK" />
<uses-permission android:name="android.permission.OBSERVE_NETWORK_POLICY" />