Loading cmds/am/src/com/android/commands/am/Am.java +14 −3 Original line number Diff line number Diff line Loading @@ -154,7 +154,7 @@ public class Am extends BaseCommand { " am switch-user <USER_ID>\n" + " am start-user <USER_ID>\n" + " am unlock-user <USER_ID> [TOKEN_HEX]\n" + " am stop-user [-w] <USER_ID>\n" + " am stop-user [-w] [-f] <USER_ID>\n" + " am stack start <DISPLAY_ID> <INTENT>\n" + " am stack movetask <TASK_ID> <STACK_ID> [true|false]\n" + " am stack resize <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM>\n" + Loading Loading @@ -290,6 +290,7 @@ public class Am extends BaseCommand { "am stop-user: stop execution of USER_ID, not allowing it to run any\n" + " code until a later explicit start or switch to it.\n" + " -w: wait for stop-user to complete.\n" + " -f: force stop even if there are related users that cannot be stopped.\n" + "\n" + "am stack start: start a new activity on <DISPLAY_ID> using <INTENT>.\n" + "\n" + Loading Loading @@ -1131,10 +1132,13 @@ public class Am extends BaseCommand { private void runStopUser() throws Exception { boolean wait = false; String opt = null; boolean force = false; String opt; while ((opt = nextOption()) != null) { if ("-w".equals(opt)) { wait = true; } else if ("-f".equals(opt)) { force = true; } else { System.err.println("Error: unknown option: " + opt); return; Loading @@ -1143,7 +1147,7 @@ public class Am extends BaseCommand { int user = Integer.parseInt(nextArgRequired()); StopUserCallback callback = wait ? new StopUserCallback() : null; int res = mAm.stopUser(user, callback); int res = mAm.stopUser(user, force, callback); if (res != ActivityManager.USER_OP_SUCCESS) { String txt = ""; switch (res) { Loading @@ -1153,6 +1157,13 @@ public class Am extends BaseCommand { case ActivityManager.USER_OP_UNKNOWN_USER: txt = " (Unknown user " + user + ")"; break; case ActivityManager.USER_OP_ERROR_IS_SYSTEM: txt = " (System user cannot be stopped)"; break; case ActivityManager.USER_OP_ERROR_RELATED_USERS_CANNOT_STOP: txt = " (Can't stop user " + user + " - one of its related users can't be stopped)"; break; } System.err.println("Switch failed: " + res + txt); } else if (callback != null) { Loading core/java/android/app/ActivityManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -265,6 +265,12 @@ public class ActivityManager { /** @hide User operation call: given user id is the current user, can't be stopped. */ public static final int USER_OP_IS_CURRENT = -2; /** @hide User operation call: system user can't be stopped. */ public static final int USER_OP_ERROR_IS_SYSTEM = -3; /** @hide User operation call: one of related users cannot be stopped. */ public static final int USER_OP_ERROR_RELATED_USERS_CANNOT_STOP = -4; /** @hide Process does not exist. */ public static final int PROCESS_STATE_NONEXISTENT = -1; Loading core/java/android/app/ActivityManagerNative.java +5 −2 Original line number Diff line number Diff line Loading @@ -1981,9 +1981,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case STOP_USER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int userid = data.readInt(); boolean force = data.readInt() != 0; IStopUserCallback callback = IStopUserCallback.Stub.asInterface( data.readStrongBinder()); int result = stopUser(userid, callback); int result = stopUser(userid, force, callback); reply.writeNoException(); reply.writeInt(result); return true; Loading Loading @@ -5287,11 +5288,13 @@ class ActivityManagerProxy implements IActivityManager return result; } public int stopUser(int userid, IStopUserCallback callback) throws RemoteException { public int stopUser(int userid, boolean force, IStopUserCallback callback) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(userid); data.writeInt(force ? 1 : 0); data.writeStrongInterface(callback); mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0); reply.readException(); Loading core/java/android/app/IActivityManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -391,7 +391,7 @@ public interface IActivityManager extends IInterface { public boolean switchUser(int userid) throws RemoteException; public boolean startUserInBackground(int userid) throws RemoteException; public boolean unlockUser(int userid, byte[] token) throws RemoteException; public int stopUser(int userid, IStopUserCallback callback) throws RemoteException; public int stopUser(int userid, boolean force, IStopUserCallback callback) throws RemoteException; public UserInfo getCurrentUser() throws RemoteException; public boolean isUserRunning(int userid, int flags) throws RemoteException; public int[] getRunningUserIds() throws RemoteException; Loading core/java/android/os/UserManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -486,6 +486,19 @@ public class UserManager { */ public static final String DISALLOW_RECORD_AUDIO = "no_record_audio"; /** * Specifies if a user is not allowed to run in the background and should be stopped during * user switch. The default value is <code>false</code>. * * <p>This restriction can be set by device owners and profile owners. * * @see DevicePolicyManager#addUserRestriction(ComponentName, String) * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) * @see #getUserRestrictions() * @hide */ public static final String DISALLOW_RUN_IN_BACKGROUND = "no_run_in_background"; /** * Specifies if a user is not allowed to use the camera. * Loading Loading
cmds/am/src/com/android/commands/am/Am.java +14 −3 Original line number Diff line number Diff line Loading @@ -154,7 +154,7 @@ public class Am extends BaseCommand { " am switch-user <USER_ID>\n" + " am start-user <USER_ID>\n" + " am unlock-user <USER_ID> [TOKEN_HEX]\n" + " am stop-user [-w] <USER_ID>\n" + " am stop-user [-w] [-f] <USER_ID>\n" + " am stack start <DISPLAY_ID> <INTENT>\n" + " am stack movetask <TASK_ID> <STACK_ID> [true|false]\n" + " am stack resize <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM>\n" + Loading Loading @@ -290,6 +290,7 @@ public class Am extends BaseCommand { "am stop-user: stop execution of USER_ID, not allowing it to run any\n" + " code until a later explicit start or switch to it.\n" + " -w: wait for stop-user to complete.\n" + " -f: force stop even if there are related users that cannot be stopped.\n" + "\n" + "am stack start: start a new activity on <DISPLAY_ID> using <INTENT>.\n" + "\n" + Loading Loading @@ -1131,10 +1132,13 @@ public class Am extends BaseCommand { private void runStopUser() throws Exception { boolean wait = false; String opt = null; boolean force = false; String opt; while ((opt = nextOption()) != null) { if ("-w".equals(opt)) { wait = true; } else if ("-f".equals(opt)) { force = true; } else { System.err.println("Error: unknown option: " + opt); return; Loading @@ -1143,7 +1147,7 @@ public class Am extends BaseCommand { int user = Integer.parseInt(nextArgRequired()); StopUserCallback callback = wait ? new StopUserCallback() : null; int res = mAm.stopUser(user, callback); int res = mAm.stopUser(user, force, callback); if (res != ActivityManager.USER_OP_SUCCESS) { String txt = ""; switch (res) { Loading @@ -1153,6 +1157,13 @@ public class Am extends BaseCommand { case ActivityManager.USER_OP_UNKNOWN_USER: txt = " (Unknown user " + user + ")"; break; case ActivityManager.USER_OP_ERROR_IS_SYSTEM: txt = " (System user cannot be stopped)"; break; case ActivityManager.USER_OP_ERROR_RELATED_USERS_CANNOT_STOP: txt = " (Can't stop user " + user + " - one of its related users can't be stopped)"; break; } System.err.println("Switch failed: " + res + txt); } else if (callback != null) { Loading
core/java/android/app/ActivityManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -265,6 +265,12 @@ public class ActivityManager { /** @hide User operation call: given user id is the current user, can't be stopped. */ public static final int USER_OP_IS_CURRENT = -2; /** @hide User operation call: system user can't be stopped. */ public static final int USER_OP_ERROR_IS_SYSTEM = -3; /** @hide User operation call: one of related users cannot be stopped. */ public static final int USER_OP_ERROR_RELATED_USERS_CANNOT_STOP = -4; /** @hide Process does not exist. */ public static final int PROCESS_STATE_NONEXISTENT = -1; Loading
core/java/android/app/ActivityManagerNative.java +5 −2 Original line number Diff line number Diff line Loading @@ -1981,9 +1981,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case STOP_USER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int userid = data.readInt(); boolean force = data.readInt() != 0; IStopUserCallback callback = IStopUserCallback.Stub.asInterface( data.readStrongBinder()); int result = stopUser(userid, callback); int result = stopUser(userid, force, callback); reply.writeNoException(); reply.writeInt(result); return true; Loading Loading @@ -5287,11 +5288,13 @@ class ActivityManagerProxy implements IActivityManager return result; } public int stopUser(int userid, IStopUserCallback callback) throws RemoteException { public int stopUser(int userid, boolean force, IStopUserCallback callback) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(userid); data.writeInt(force ? 1 : 0); data.writeStrongInterface(callback); mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0); reply.readException(); Loading
core/java/android/app/IActivityManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -391,7 +391,7 @@ public interface IActivityManager extends IInterface { public boolean switchUser(int userid) throws RemoteException; public boolean startUserInBackground(int userid) throws RemoteException; public boolean unlockUser(int userid, byte[] token) throws RemoteException; public int stopUser(int userid, IStopUserCallback callback) throws RemoteException; public int stopUser(int userid, boolean force, IStopUserCallback callback) throws RemoteException; public UserInfo getCurrentUser() throws RemoteException; public boolean isUserRunning(int userid, int flags) throws RemoteException; public int[] getRunningUserIds() throws RemoteException; Loading
core/java/android/os/UserManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -486,6 +486,19 @@ public class UserManager { */ public static final String DISALLOW_RECORD_AUDIO = "no_record_audio"; /** * Specifies if a user is not allowed to run in the background and should be stopped during * user switch. The default value is <code>false</code>. * * <p>This restriction can be set by device owners and profile owners. * * @see DevicePolicyManager#addUserRestriction(ComponentName, String) * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) * @see #getUserRestrictions() * @hide */ public static final String DISALLOW_RUN_IN_BACKGROUND = "no_run_in_background"; /** * Specifies if a user is not allowed to use the camera. * Loading