summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Trostanetski <atrost@google.com>2019-10-03 09:23:31 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-10-03 09:23:31 +0000
commit9ff2a6a0980978cf447022c624387d6c9218bab0 (patch)
treebed284c0356e2d90bba93a4120a51600d498ae47
parent65e6a23e402baf609cd86dc04823e378c7107a1b (diff)
parent8851c3ccd34dcb3c33d119629c15c07fc6c34748 (diff)
Merge "Kill the app once a compat change override is changed."
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerShellCommand.java22
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 6db9702b8370..75419e12130d 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -2868,7 +2868,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;
@@ -2882,13 +2896,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)) {
@@ -2896,11 +2911,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 + ".");
}
@@ -3219,6 +3236,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, "");
}