From 4aa9369c5cc6286cddea831b95876c5c3fe15d8f Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Fri, 5 Feb 2021 11:16:28 -0800 Subject: [PATCH] `am compat reset --no-kill` shouldn't kill the process Bug: 179499460 Test: manual test with: `adb shell am compat reset --no-kill FGS_START_EXCEPTION_CHANGE_ID com.google.android.keep` Change-Id: I604ff9d04967082e464c721263c6c0695af22c94 --- .../java/com/android/internal/compat/IPlatformCompat.aidl | 3 ++- .../android/server/am/ActivityManagerShellCommand.java | 8 +++++++- .../java/com/android/server/compat/PlatformCompat.java | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/core/java/com/android/internal/compat/IPlatformCompat.aidl b/core/java/com/android/internal/compat/IPlatformCompat.aidl index a5eb5f607c129..7aca36af919d8 100644 --- a/core/java/com/android/internal/compat/IPlatformCompat.aidl +++ b/core/java/com/android/internal/compat/IPlatformCompat.aidl @@ -179,9 +179,10 @@ interface IPlatformCompat { * * @param changeId the ID of the change that was overridden * @param packageName the app package name that was overridden + * @return {@code true} if an override existed * @throws SecurityException if overriding changes is not permitted */ - void clearOverrideForTest(long changeId, String packageName); + boolean clearOverrideForTest(long changeId, String packageName); /** * Enables all compatibility changes that have enabledSinceTargetSdk == diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index fe71fbf79157a..c971bd2ab6d51 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -2984,7 +2984,13 @@ final class ActivityManagerShellCommand extends ShellCommand { pw.println("Reset all changes for " + packageName + " to default value."); return 0; } - if (platformCompat.clearOverride(changeId, packageName)) { + boolean existed; + if (killPackage) { + existed = platformCompat.clearOverride(changeId, packageName); + } else { + existed = platformCompat.clearOverrideForTest(changeId, packageName); + } + if (existed) { pw.println("Reset change " + changeId + " for " + packageName + " to default value."); } else { diff --git a/services/core/java/com/android/server/compat/PlatformCompat.java b/services/core/java/com/android/server/compat/PlatformCompat.java index 6b2a1c950e382..51ba5f7758804 100644 --- a/services/core/java/com/android/server/compat/PlatformCompat.java +++ b/services/core/java/com/android/server/compat/PlatformCompat.java @@ -211,9 +211,9 @@ public class PlatformCompat extends IPlatformCompat.Stub { } @Override - public void clearOverrideForTest(long changeId, String packageName) { + public boolean clearOverrideForTest(long changeId, String packageName) { checkCompatChangeOverridePermission(); - mCompatConfig.removeOverride(changeId, packageName); + return mCompatConfig.removeOverride(changeId, packageName); } @Override