diff options
| author | 2023-11-23 18:49:00 +0000 | |
|---|---|---|
| committer | 2023-11-23 18:49:00 +0000 | |
| commit | d2e10e10cef04607bf09327138e0406f42cab24f (patch) | |
| tree | bcf6266da8e7a4f2a16475b2087786f2cd0d37eb | |
| parent | 6247b5636742752134a3108584dd46e90657c109 (diff) | |
| parent | 5aa4106f5e5abe32af416e24cfeb62c9521d7118 (diff) | |
Merge "Helper API for: QAS/suspension precedence validation." into main
4 files changed, 38 insertions, 0 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index a4c3bb824502..87c86df6140d 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -2934,6 +2934,15 @@ public class ApplicationPackageManager extends PackageManager { } @Override + public String getSuspendingPackage(String suspendedPackage) { + try { + return mPM.getSuspendingPackage(suspendedPackage, getUserId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + @Override public boolean isPackageSuspendedForUser(String packageName, int userId) { try { return mPM.isPackageSuspendedForUser(packageName, userId); diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index babfba13afcd..98623de810c4 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -312,6 +312,8 @@ interface IPackageManager { Bundle getSuspendedPackageAppExtras(String packageName, int userId); + String getSuspendingPackage(String packageName, int userId); + /** * Backup/restore support - only the system uid may use these. */ diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index fe31c9dbf27d..6775f9b8d84d 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -9965,6 +9965,21 @@ public abstract class PackageManager { } /** + * Get the name of the package that suspended the given package. Packages can be suspended by + * device administrators or apps holding {@link android.Manifest.permission#MANAGE_USERS} or + * {@link android.Manifest.permission#SUSPEND_APPS}. + * + * @param suspendedPackage The package that has been suspended. + * @return Name of the package that suspended the given package. Returns {@code null} if the + * given package is not currently suspended and the platform package name - i.e. + * {@code "android"} - if the package was suspended by a device admin. + * @hide + */ + public @Nullable String getSuspendingPackage(@NonNull String suspendedPackage) { + throw new UnsupportedOperationException("getSuspendingPackage not implemented"); + } + + /** * Query if an app is currently stopped. * * @return {@code true} if the given package is stopped, {@code false} otherwise diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index e557f09467d4..4e3851155057 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -5216,6 +5216,18 @@ public class PackageManagerService implements PackageSender, TestUtilityService } @Override + public String getSuspendingPackage(String packageName, int userId) { + final int callingUid = Binder.getCallingUid(); + final Computer snapshot = snapshot(); + // This will do visibility checks as well. + if (!snapshot.isPackageSuspendedForUser(packageName, userId)) { + return null; + } + return mSuspendPackageHelper.getSuspendingPackage(snapshot, packageName, userId, + callingUid); + } + + @Override public @NonNull ParceledListSlice<FeatureInfo> getSystemAvailableFeatures() { // allow instant applications ArrayList<FeatureInfo> res; |