summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHai Zhang <zhanghai@google.com>2021-01-23 00:38:22 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-01-23 00:38:22 +0000
commitbbb9b5b5b1e0c107da0e349b47dd29cb87eb8b31 (patch)
treec283532210aa06a3e3370d1908b3276c1cde7d33
parent484fd8330a7f475e52c8f20f59fa2c4479440160 (diff)
parent84705c4ae303b97e9529325439239dc84a7c73c7 (diff)
Merge "Add necessary system APIs for moving role into module."
-rw-r--r--core/api/module-lib-current.txt16
-rw-r--r--core/api/test-current.txt4
-rw-r--r--core/java/android/content/Context.java7
-rw-r--r--core/java/android/content/pm/PackageManager.java10
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java12
-rw-r--r--test-mock/api/test-current.txt1
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();
}