Loading services/core/java/com/android/server/am/ActivityManagerService.java +9 −18 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS; import static android.Manifest.permission.READ_FRAME_BUFFER; import static android.Manifest.permission.REMOVE_TASKS; import static android.Manifest.permission.START_TASKS_FROM_RECENTS; import static android.Manifest.permission.STOP_APP_SWITCHES; import static android.app.ActivityManager.LOCK_TASK_MODE_NONE; import static android.app.ActivityManager.RESIZE_MODE_PRESERVE_WINDOW; import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; Loading Loading @@ -13338,12 +13339,7 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public void stopAppSwitches() { if (checkCallingPermission(android.Manifest.permission.STOP_APP_SWITCHES) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("viewquires permission " + android.Manifest.permission.STOP_APP_SWITCHES); } enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "stopAppSwitches"); synchronized(this) { mAppSwitchesAllowedTime = SystemClock.uptimeMillis() + APP_SWITCH_DELAY_TIME; Loading @@ -13353,12 +13349,7 @@ public class ActivityManagerService extends IActivityManager.Stub } public void resumeAppSwitches() { if (checkCallingPermission(android.Manifest.permission.STOP_APP_SWITCHES) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires permission " + android.Manifest.permission.STOP_APP_SWITCHES); } enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "resumeAppSwitches"); synchronized(this) { // Note that we don't execute any pending app switches... we will // let those wait until either the timeout, or the next start Loading @@ -13385,9 +13376,11 @@ public class ActivityManagerService extends IActivityManager.Stub return true; } int perm = checkComponentPermission( android.Manifest.permission.STOP_APP_SWITCHES, sourcePid, sourceUid, -1, true); if (mRecentTasks.isCallerRecents(sourceUid)) { return true; } int perm = checkComponentPermission(STOP_APP_SWITCHES, sourcePid, sourceUid, -1, true); if (perm == PackageManager.PERMISSION_GRANTED) { return true; } Loading @@ -13398,9 +13391,7 @@ public class ActivityManagerService extends IActivityManager.Stub // If the actual IPC caller is different from the logical source, then // also see if they are allowed to control app switches. if (callingUid != -1 && callingUid != sourceUid) { perm = checkComponentPermission( android.Manifest.permission.STOP_APP_SWITCHES, callingPid, callingUid, -1, true); perm = checkComponentPermission(STOP_APP_SWITCHES, callingPid, callingUid, -1, true); if (perm == PackageManager.PERMISSION_GRANTED) { return true; } services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -650,6 +650,8 @@ public class RecentTasksTest extends ActivityTestsBase { assertSecurityException(expectCallable, () -> mService.startRecentsActivity(null, null, null)); assertSecurityException(expectCallable, () -> mService.cancelRecentsAnimation(true)); assertSecurityException(expectCallable, () -> mService.stopAppSwitches()); assertSecurityException(expectCallable, () -> mService.resumeAppSwitches()); } private void testGetTasksApis(boolean expectCallable) { Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +9 −18 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS; import static android.Manifest.permission.READ_FRAME_BUFFER; import static android.Manifest.permission.REMOVE_TASKS; import static android.Manifest.permission.START_TASKS_FROM_RECENTS; import static android.Manifest.permission.STOP_APP_SWITCHES; import static android.app.ActivityManager.LOCK_TASK_MODE_NONE; import static android.app.ActivityManager.RESIZE_MODE_PRESERVE_WINDOW; import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; Loading Loading @@ -13338,12 +13339,7 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public void stopAppSwitches() { if (checkCallingPermission(android.Manifest.permission.STOP_APP_SWITCHES) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("viewquires permission " + android.Manifest.permission.STOP_APP_SWITCHES); } enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "stopAppSwitches"); synchronized(this) { mAppSwitchesAllowedTime = SystemClock.uptimeMillis() + APP_SWITCH_DELAY_TIME; Loading @@ -13353,12 +13349,7 @@ public class ActivityManagerService extends IActivityManager.Stub } public void resumeAppSwitches() { if (checkCallingPermission(android.Manifest.permission.STOP_APP_SWITCHES) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires permission " + android.Manifest.permission.STOP_APP_SWITCHES); } enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "resumeAppSwitches"); synchronized(this) { // Note that we don't execute any pending app switches... we will // let those wait until either the timeout, or the next start Loading @@ -13385,9 +13376,11 @@ public class ActivityManagerService extends IActivityManager.Stub return true; } int perm = checkComponentPermission( android.Manifest.permission.STOP_APP_SWITCHES, sourcePid, sourceUid, -1, true); if (mRecentTasks.isCallerRecents(sourceUid)) { return true; } int perm = checkComponentPermission(STOP_APP_SWITCHES, sourcePid, sourceUid, -1, true); if (perm == PackageManager.PERMISSION_GRANTED) { return true; } Loading @@ -13398,9 +13391,7 @@ public class ActivityManagerService extends IActivityManager.Stub // If the actual IPC caller is different from the logical source, then // also see if they are allowed to control app switches. if (callingUid != -1 && callingUid != sourceUid) { perm = checkComponentPermission( android.Manifest.permission.STOP_APP_SWITCHES, callingPid, callingUid, -1, true); perm = checkComponentPermission(STOP_APP_SWITCHES, callingPid, callingUid, -1, true); if (perm == PackageManager.PERMISSION_GRANTED) { return true; }
services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -650,6 +650,8 @@ public class RecentTasksTest extends ActivityTestsBase { assertSecurityException(expectCallable, () -> mService.startRecentsActivity(null, null, null)); assertSecurityException(expectCallable, () -> mService.cancelRecentsAnimation(true)); assertSecurityException(expectCallable, () -> mService.stopAppSwitches()); assertSecurityException(expectCallable, () -> mService.resumeAppSwitches()); } private void testGetTasksApis(boolean expectCallable) { Loading