diff options
| author | 2019-10-03 03:06:01 -0700 | |
|---|---|---|
| committer | 2019-10-03 03:06:01 -0700 | |
| commit | 32b5ded82a9e55cdae7a00b956c76473d7fcba96 (patch) | |
| tree | 1efc5a61a8a4f45bc367ac4290716566102641de | |
| parent | b14c5166149192f090f2fe079843dc06499aae23 (diff) | |
| parent | a22d2ff7e902f84cae1711baf9d9ae2ab70c2a82 (diff) | |
Merge "Kill the app once a compat change override is changed." am: 9ff2a6a098 am: 0f2b207397 am: b8eac07194
am: a22d2ff7e9
Change-Id: I47b693448da20cc6439c3d83d736258b84860ce1
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerShellCommand.java | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 058afd3b4d68..8be2438b4f2f 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -2859,7 +2859,21 @@ final class ActivityManagerShellCommand extends ShellCommand { return 0; } - private int runCompat(PrintWriter pw) { + private void killPackage(String packageName, PrintWriter pw) throws RemoteException { + int uid = mPm.getPackageUid(packageName, 0, mUserId); + if (uid < 0) { + // uid is negative if the package wasn't found. + pw.println("Didn't find package " + packageName + " on device."); + } else { + pw.println("Killing package " + packageName + " (UID " + uid + ")."); + final long origId = Binder.clearCallingIdentity(); + mInterface.killUid(UserHandle.getAppId(uid), + UserHandle.USER_ALL, "killPackage"); + Binder.restoreCallingIdentity(origId); + } + } + + private int runCompat(PrintWriter pw) throws RemoteException { final CompatConfig config = CompatConfig.get(); String toggleValue = getNextArgRequired(); long changeId; @@ -2873,13 +2887,14 @@ final class ActivityManagerShellCommand extends ShellCommand { pw.println("Unknown or invalid change: '" + changeIdString + "'."); } String packageName = getNextArgRequired(); - switch(toggleValue) { + switch (toggleValue) { case "enable": if (!config.addOverride(changeId, packageName, true)) { pw.println("Warning! Change " + changeId + " is not known yet. Enabling it" + " could have no effect."); } pw.println("Enabled change " + changeId + " for " + packageName + "."); + killPackage(packageName, pw); return 0; case "disable": if (!config.addOverride(changeId, packageName, false)) { @@ -2887,11 +2902,13 @@ final class ActivityManagerShellCommand extends ShellCommand { + " could have no effect."); } pw.println("Disabled change " + changeId + " for " + packageName + "."); + killPackage(packageName, pw); return 0; case "reset": if (config.removeOverride(changeId, packageName)) { pw.println("Reset change " + changeId + " for " + packageName + " to default value."); + killPackage(packageName, pw); } else { pw.println("No override exists for changeId " + changeId + "."); } @@ -3210,6 +3227,7 @@ final class ActivityManagerShellCommand extends ShellCommand { pw.println(" Write all pending state to storage."); pw.println(" compat enable|disable|reset <CHANGE_ID|CHANGE_NAME> <PACKAGE_NAME>"); pw.println(" Toggles a change either by id or by name for <PACKAGE_NAME>."); + pw.println(" It kills <PACKAGE_NAME> (to allow the toggle to take effect)."); pw.println(); Intent.printIntentArgsHelp(pw, ""); } |