diff options
| author | 2023-08-17 17:27:48 +0000 | |
|---|---|---|
| committer | 2023-08-17 17:27:48 +0000 | |
| commit | 32a09a1a47b0a2a08c510b79fe4aab126d415c2b (patch) | |
| tree | 688cd60301ea22fea7e3ad3a8941358fb4c0b255 | |
| parent | 62568af6ee2ab895f10ed945c59b11517d57b99f (diff) | |
| parent | e149f80bb5ce9a529525e9d1ff520e73aae28617 (diff) | |
Merge "CLI API to enable testing of QAS." into main
6 files changed, 57 insertions, 7 deletions
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index c5585afb143a..ea0f5ff2896e 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -304,6 +304,8 @@ interface IPackageManager { boolean isPackageSuspendedForUser(String packageName, int userId); + boolean isPackageQuarantinedForUser(String packageName, int userId); + Bundle getSuspendedPackageAppExtras(String packageName, int userId); /** diff --git a/services/core/java/com/android/server/pm/Computer.java b/services/core/java/com/android/server/pm/Computer.java index 6e7560563c8d..f9876299e8e0 100644 --- a/services/core/java/com/android/server/pm/Computer.java +++ b/services/core/java/com/android/server/pm/Computer.java @@ -487,6 +487,8 @@ public interface Computer extends PackageDataSnapshot { boolean isPackageSuspendedForUser(@NonNull String packageName, @UserIdInt int userId); + boolean isPackageQuarantinedForUser(@NonNull String packageName, @UserIdInt int userId); + boolean isSuspendingAnyPackages(@NonNull String suspendingPackage, @UserIdInt int userId); @NonNull diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 7d878ece3176..1cfc7d76919a 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -4925,8 +4925,8 @@ public class ComputerEngine implements Computer { } } - @Override - public boolean isPackageSuspendedForUser(@NonNull String packageName, int userId) { + private PackageUserStateInternal getUserStageOrDefaultForUser(@NonNull String packageName, + int userId) { final int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, false /* checkShell */, "isPackageSuspendedForUser for user " + userId); @@ -4934,7 +4934,17 @@ public class ComputerEngine implements Computer { if (ps == null || shouldFilterApplicationIncludingUninstalled(ps, callingUid, userId)) { throw new IllegalArgumentException("Unknown target package: " + packageName); } - return ps.getUserStateOrDefault(userId).isSuspended(); + return ps.getUserStateOrDefault(userId); + } + + @Override + public boolean isPackageSuspendedForUser(@NonNull String packageName, int userId) { + return getUserStageOrDefaultForUser(packageName, userId).isSuspended(); + } + + @Override + public boolean isPackageQuarantinedForUser(@NonNull String packageName, @UserIdInt int userId) { + return getUserStageOrDefaultForUser(packageName, userId).isQuarantined(); } @Override diff --git a/services/core/java/com/android/server/pm/IPackageManagerBase.java b/services/core/java/com/android/server/pm/IPackageManagerBase.java index fd47846af9ef..76203ac7650d 100644 --- a/services/core/java/com/android/server/pm/IPackageManagerBase.java +++ b/services/core/java/com/android/server/pm/IPackageManagerBase.java @@ -955,6 +955,13 @@ public abstract class IPackageManagerBase extends IPackageManager.Stub { @Override @Deprecated + public final boolean isPackageQuarantinedForUser(@NonNull String packageName, + @UserIdInt int userId) { + return snapshot().isPackageQuarantinedForUser(packageName, userId); + } + + @Override + @Deprecated public final boolean isSafeMode() { // allow instant applications return mService.getSafeMode(); diff --git a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java index 6efd06762678..651845e71924 100644 --- a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java +++ b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java @@ -755,9 +755,7 @@ abstract class PackageManagerInternalBase extends PackageManagerInternal { @Override public boolean isPackageQuarantined(@NonNull String packageName, @UserIdInt int userId) { - final PackageStateInternal packageState = getPackageStateInternal(packageName); - return (packageState == null) ? false - : packageState.getUserStateOrDefault(userId).isQuarantined(); + return snapshot().isPackageQuarantinedForUser(packageName, userId); } @NonNull diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index ceae1fe3bcb9..8bdbe04ec4e6 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -226,6 +226,8 @@ class PackageManagerShellCommand extends ShellCommand { return runPath(); case "dump": return runDump(); + case "dump-package": + return runDumpPackage(); case "list": return runList(); case "gc": @@ -978,6 +980,7 @@ class PackageManagerShellCommand extends ShellCommand { boolean listInstaller = false; boolean showUid = false; boolean showVersionCode = false; + boolean listQuarantinedOnly = false; boolean listApexOnly = false; boolean showStopped = false; int uid = -1; @@ -1008,6 +1011,9 @@ class PackageManagerShellCommand extends ShellCommand { case "-s": listSystem = true; break; + case "-q": + listQuarantinedOnly = true; + break; case "-U": showUid = true; break; @@ -1093,6 +1099,10 @@ class PackageManagerShellCommand extends ShellCommand { || (listApexOnly && !isApex)) { continue; } + if (listQuarantinedOnly && !mInterface.isPackageQuarantinedForUser(info.packageName, + translatedUserId)) { + continue; + } String name = null; if (showSdks) { @@ -3598,6 +3608,23 @@ class PackageManagerShellCommand extends ShellCommand { return 0; } + private int runDumpPackage() { + String pkg = getNextArg(); + if (pkg == null) { + getErrPrintWriter().println("Error: no package specified"); + return 1; + } + try { + ((IBinder) mInterface).dump(getOutFileDescriptor(), new String[]{pkg}); + } catch (Throwable e) { + PrintWriter pw = getErrPrintWriter(); + pw.println("Failure dumping service:"); + e.printStackTrace(pw); + pw.flush(); + } + return 0; + } + private int runSetHarmfulAppWarning() throws RemoteException { int userId = UserHandle.USER_CURRENT; @@ -4282,6 +4309,9 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" dump PACKAGE"); pw.println(" Print various system state associated with the given PACKAGE."); pw.println(""); + pw.println(" dump-package PACKAGE"); + pw.println(" Print package manager state associated with the given PACKAGE."); + pw.println(""); pw.println(" has-feature FEATURE_NAME [version]"); pw.println(" Prints true and returns exit status 0 when system has a FEATURE_NAME,"); pw.println(" otherwise prints false and returns exit status 1"); @@ -4299,7 +4329,7 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" Options:"); pw.println(" -v: shows the location of the library in the device's filesystem"); pw.println(""); - pw.println(" list packages [-f] [-d] [-e] [-s] [-3] [-i] [-l] [-u] [-U] "); + pw.println(" list packages [-f] [-d] [-e] [-s] [-q] [-3] [-i] [-l] [-u] [-U] "); pw.println(" [--show-versioncode] [--apex-only] [--factory-only]"); pw.println(" [--uid UID] [--user USER_ID] [FILTER]"); pw.println(" Prints all packages; optionally only those whose name contains"); @@ -4309,6 +4339,7 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" -d: filter to only show disabled packages"); pw.println(" -e: filter to only show enabled packages"); pw.println(" -s: filter to only show system packages"); + pw.println(" -q: filter to only show quarantined packages"); pw.println(" -3: filter to only show third party packages"); pw.println(" -i: see the installer for the packages"); pw.println(" -l: ignored (used for compatibility with older releases)"); |