diff options
author | Louis Chang <louischang@google.com> | 2020-10-14 13:06:13 +0800 |
---|---|---|
committer | Louis Chang <louischang@google.com> | 2020-10-28 09:20:00 +0800 |
commit | 5510ecdfa94976819be97de8b57796ef20360cf7 (patch) | |
tree | faf166e79d5cad1532284d63b5cf949c01a5a7a5 | |
parent | a2e329105b47e7714b51b5e3ae5269c2c0d517d2 (diff) |
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
26 files changed, 160 insertions, 153 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index c932718bc55c..55041ec8214e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -109,7 +109,8 @@ package android { 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 82838ea605ff..6164e776a79f 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -12,7 +12,8 @@ package android { 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 @@ package android.app { } 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 @@ package android.window { 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 @@ package android.window { 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 @@ package android.window { 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 9edf81e8f651..c9b009becac4 100644 --- a/core/java/android/app/ActivityTaskManager.java +++ b/core/java/android/app/ActivityTaskManager.java @@ -173,7 +173,7 @@ public class ActivityTaskManager { * @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 @@ public class ActivityTaskManager { * 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 @@ public class ActivityTaskManager { * 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 @@ public class ActivityTaskManager { } /** 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 @@ public class ActivityTaskManager { * @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 @@ public class ActivityTaskManager { * 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 @@ public class ActivityTaskManager { /** * 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 @@ public class ActivityTaskManager { * @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 @@ public class ActivityTaskManager { * @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 @@ public class ActivityTaskManager { * @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 @@ public class ActivityTaskManager { * 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 @@ public class ActivityTaskManager { * @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 d540059f993a..d6c53d0979a0 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -2154,7 +2154,7 @@ public interface WindowManager extends ViewManager { * {@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 78fa30358d74..38b2190a57f3 100644 --- a/core/java/android/window/DisplayAreaOrganizer.java +++ b/core/java/android/window/DisplayAreaOrganizer.java @@ -84,7 +84,7 @@ public class DisplayAreaOrganizer extends WindowOrganizer { */ 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 @@ public class DisplayAreaOrganizer extends WindowOrganizer { /** * @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 ad48a9f9f776..4e209206f233 100644 --- a/core/java/android/window/TaskOrganizer.java +++ b/core/java/android/window/TaskOrganizer.java @@ -62,7 +62,7 @@ public class TaskOrganizer extends WindowOrganizer { * @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 @@ public class TaskOrganizer extends WindowOrganizer { } /** 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 @@ public class TaskOrganizer extends WindowOrganizer { * @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 @@ public class TaskOrganizer extends WindowOrganizer { } /** 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 @@ public class TaskOrganizer extends WindowOrganizer { } /** 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 @@ public class TaskOrganizer extends WindowOrganizer { } /** 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 @@ public class TaskOrganizer extends WindowOrganizer { } /** 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 @@ public class TaskOrganizer extends WindowOrganizer { * 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 @@ public class TaskOrganizer extends WindowOrganizer { * 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 5ac19fa685d7..bb03e2829715 100644 --- a/core/java/android/window/WindowOrganizer.java +++ b/core/java/android/window/WindowOrganizer.java @@ -39,7 +39,7 @@ public class WindowOrganizer { * 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 @@ public class WindowOrganizer { * @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 @@ public class WindowOrganizer { * 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 @@ public class WindowOrganizer { * @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 @@ public class WindowOrganizer { * 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 @@ public class WindowOrganizer { } } - @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 95a7414e12ea..0d76e56dada5 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 b2d13f908b61..0b78b64b5d86 100644 --- a/non-updatable-api/system-current.txt +++ b/non-updatable-api/system-current.txt @@ -109,7 +109,8 @@ package android { 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 5f018a0322a3..ba4bda9f25e4 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 ddd0dac0e9db..f9268eece293 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 d541c8fbdff1..e5847b08a4c5 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 6e5c0412985c..4a338b37e41f 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 @@ public final class ActiveServices { } 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 6749cdf6fe7d..61b672d6777c 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; 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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 class ActivityTaskManagerService extends IActivityTaskManager.Stub { 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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { 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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { */ @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { */ @Override public void removeRootTasksInWindowingModes(int[] windowingModes) { - enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, + enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "removeRootTasksInWindowingModes()"); synchronized (mGlobalLock) { @@ -2932,7 +2933,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override public void removeRootTasksWithActivityTypes(int[] activityTypes) { - enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, + enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_TASKS, "removeRootTasksWithActivityTypes()"); synchronized (mGlobalLock) { @@ -2959,7 +2960,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { */ @Override public void stopSystemLockTaskMode() throws RemoteException { - mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "stopSystemLockTaskMode"); + enforceTaskPermission("stopSystemLockTaskMode"); stopLockTaskModeInternal(null, true /* isSystemCaller */); } @@ -3406,7 +3407,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { /** 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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { /** 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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { /** 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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { */ @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 class ActivityTaskManagerService extends IActivityTaskManager.Stub { 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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override public IWindowOrganizerController getWindowOrganizerController() { - mAmInternal.enforceCallingPermission(MANAGE_ACTIVITY_STACKS, - "getWindowOrganizerController()"); + enforceTaskPermission("getWindowOrganizerController()"); return mWindowOrganizerController; } @@ -4408,7 +4431,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { */ @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { */ @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 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @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 dd92f507a33d..667f3dc9d8d3 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 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl 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 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl @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 baa26e62b3b5..7a42b0db0c52 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.FIRST_SYSTEM_WINDOW; 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 @@ public class DisplayPolicy { "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 c49690157c08..e90436ef3b91 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 @@ public class LockTaskController { // 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 a70efbcf5500..2c39c2b4a98e 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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { 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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { */ @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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @Override public boolean deleteRootTask(WindowContainerToken token) { - enforceStackPermission("deleteRootTask()"); + enforceTaskPermission("deleteRootTask()"); final long origId = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { @@ -529,7 +528,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @Override public WindowContainerToken getImeTarget(int displayId) { - enforceStackPermission("getImeTarget()"); + enforceTaskPermission("getImeTarget()"); final long origId = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { @@ -552,7 +551,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @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 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { @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 0eadbf296323..e92140af6d6f 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 @@ package com.android.server.wm; 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 @@ public class WindowManagerService extends IWindowManager.Stub @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 @@ public class WindowManagerService extends IWindowManager.Stub /** 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 @@ public class WindowManagerService extends IWindowManager.Stub /** 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 ae152d253d17..51857dcd323b 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 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub @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 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub 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 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub 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 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub @Override public ITaskOrganizerController getTaskOrganizerController() { - enforceStackPermission("getTaskOrganizerController()"); + enforceTaskPermission("getTaskOrganizerController()"); return mTaskOrganizerController; } @Override public IDisplayAreaOrganizerController getDisplayAreaOrganizerController() { - enforceStackPermission("getDisplayAreaOrganizerController()"); + enforceTaskPermission("getDisplayAreaOrganizerController()"); return mDisplayAreaOrganizerController; } @@ -573,7 +572,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub @Override public void registerTransitionPlayer(ITransitionPlayer player) { - enforceStackPermission("registerTransitionPlayer()"); + enforceTaskPermission("registerTransitionPlayer()"); final long ident = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { @@ -584,7 +583,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub } } - 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 79936ce6d623..26fd0a21f10f 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 9099272a0fd6..7f4f3dd58812 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 747fb8999276..823aef095831 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 android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; 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 com.android.dx.mockito.inline.extended.ExtendedMockito.when; 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 @@ public class DragDropControllerTests extends WindowTestsBase { 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 c84b7d904f0a..7563a25424ad 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 f0ba71a47d7e..451a55f13d8f 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 009f817af407..6bed5a80d129 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" /> |