summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Buynytskyy <alexbuy@google.com> 2023-08-17 17:27:48 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-08-17 17:27:48 +0000
commit32a09a1a47b0a2a08c510b79fe4aab126d415c2b (patch)
tree688cd60301ea22fea7e3ad3a8941358fb4c0b255
parent62568af6ee2ab895f10ed945c59b11517d57b99f (diff)
parente149f80bb5ce9a529525e9d1ff520e73aae28617 (diff)
Merge "CLI API to enable testing of QAS." into main
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl2
-rw-r--r--services/core/java/com/android/server/pm/Computer.java2
-rw-r--r--services/core/java/com/android/server/pm/ComputerEngine.java16
-rw-r--r--services/core/java/com/android/server/pm/IPackageManagerBase.java7
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerInternalBase.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java33
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)");