diff options
-rw-r--r-- | core/api/module-lib-current.txt | 16 | ||||
-rw-r--r-- | core/api/test-current.txt | 4 | ||||
-rw-r--r-- | core/java/android/content/Context.java | 7 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 10 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 12 | ||||
-rw-r--r-- | test-mock/api/test-current.txt | 1 |
6 files changed, 41 insertions, 9 deletions
diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt index 061dc872ab1e..5d61aca0a123 100644 --- a/core/api/module-lib-current.txt +++ b/core/api/module-lib-current.txt @@ -40,6 +40,22 @@ package android.app.role { } +package android.content { + + public abstract class Context { + method @NonNull public android.os.UserHandle getUser(); + } + +} + +package android.content.pm { + + public abstract class PackageManager { + method @NonNull public String getPermissionControllerPackageName(); + } + +} + package android.content.rollback { public class RollbackManagerFrameworkInitializer { diff --git a/core/api/test-current.txt b/core/api/test-current.txt index a11ee066c0c5..4a1d21903085 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -630,7 +630,7 @@ package android.content { public abstract class Context { method @NonNull public java.io.File getCrateDir(@NonNull String); method public abstract int getDisplayId(); - method public android.os.UserHandle getUser(); + method @NonNull public android.os.UserHandle getUser(); method public int getUserId(); method public void setAutofillOptions(@Nullable android.content.AutofillOptions); method public void setContentCaptureOptions(@Nullable android.content.ContentCaptureOptions); @@ -685,7 +685,7 @@ package android.content.pm { method public abstract int getInstallReason(@NonNull String, @NonNull android.os.UserHandle); method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int); method @Nullable public abstract String[] getNamesForUids(int[]); - method @NonNull public abstract String getPermissionControllerPackageName(); + method @NonNull public String getPermissionControllerPackageName(); method @NonNull public abstract String getServicesSystemSharedLibraryPackageName(); method @NonNull public abstract String getSharedSystemSharedLibraryPackageName(); method @Nullable public String getSystemTextClassifierPackageName(); diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index e4a81cfadfe0..3f7479b86494 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -5919,9 +5919,14 @@ public abstract class Context { throws PackageManager.NameNotFoundException; /** - * Get the user associated with this context + * Get the user associated with this context. + * + * @return the user associated with this context + * * @hide */ + @NonNull + @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @TestApi public UserHandle getUser() { return android.os.Process.myUserHandle(); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 0433db451d4b..8243dc67027c 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -4829,15 +4829,17 @@ public abstract class PackageManager { /** * Gets the package name of the component controlling runtime permissions. * - * @return The package name. + * @return the package name of the component controlling runtime permissions * * @hide */ - @SuppressWarnings("HiddenAbstractMethod") - @UnsupportedAppUsage @NonNull + @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @TestApi - public abstract String getPermissionControllerPackageName(); + @UnsupportedAppUsage + public String getPermissionControllerPackageName() { + throw new RuntimeException("Not implemented. Must override in a subclass."); + } /** * Add a new dynamic permission to the system. For this to work, your diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index bdff19bbd7bc..2eeb56e41b5b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -8802,7 +8802,17 @@ public class PackageManagerService extends IPackageManager.Stub @Override public String getPermissionControllerPackageName() { synchronized (mLock) { - return mRequiredPermissionControllerPackage; + if (mRequiredPermissionControllerPackage != null) { + final PackageSetting ps = getPackageSetting(mRequiredPermissionControllerPackage); + if (ps != null) { + final int callingUid = Binder.getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); + if (!shouldFilterApplicationLocked(ps, callingUid, callingUserId)) { + return mRequiredPermissionControllerPackage; + } + } + } + throw new IllegalStateException("PermissionController is not found"); } } diff --git a/test-mock/api/test-current.txt b/test-mock/api/test-current.txt index 79d746a57cc5..531dd7c008fe 100644 --- a/test-mock/api/test-current.txt +++ b/test-mock/api/test-current.txt @@ -9,7 +9,6 @@ package android.test.mock { method public int getInstallReason(String, android.os.UserHandle); method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int); method public String[] getNamesForUids(int[]); - method public String getPermissionControllerPackageName(); method @NonNull public String getServicesSystemSharedLibraryPackageName(); method @NonNull public String getSharedSystemSharedLibraryPackageName(); } |