diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt index a32ebe490d69b..3d5232ba4f357 100644 --- a/core/api/module-lib-current.txt +++ b/core/api/module-lib-current.txt @@ -102,6 +102,7 @@ package android.content.pm { public abstract class PackageManager { method @NonNull public String getPermissionControllerPackageName(); method @NonNull public String getSdkSandboxPackageName(); + method @RequiresPermission("android.permission.MAKE_UID_VISIBLE") public void makeUidVisible(int, int); field public static final String EXTRA_VERIFICATION_ROOT_HASH = "android.content.pm.extra.VERIFICATION_ROOT_HASH"; field public static final int MATCH_STATIC_SHARED_AND_SDK_LIBRARIES = 67108864; // 0x4000000 } diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 2eb0f194887f3..77d8f98a2aac0 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -19,6 +19,7 @@ package android { field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES"; field public static final String INSTALL_TEST_ONLY_PACKAGE = "android.permission.INSTALL_TEST_ONLY_PACKAGE"; field public static final String KEEP_UNINSTALLED_PACKAGES = "android.permission.KEEP_UNINSTALLED_PACKAGES"; + field public static final String MAKE_UID_VISIBLE = "android.permission.MAKE_UID_VISIBLE"; field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS"; field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS"; field public static final String MANAGE_CRATES = "android.permission.MANAGE_CRATES"; @@ -836,6 +837,7 @@ package android.content.pm { method @Nullable public String getSystemTextClassifierPackageName(); method @Nullable public String getWellbeingPackageName(); method public void holdLock(android.os.IBinder, int); + method @RequiresPermission(android.Manifest.permission.MAKE_UID_VISIBLE) public void makeUidVisible(int, int); method @RequiresPermission(android.Manifest.permission.KEEP_UNINSTALLED_PACKAGES) public void setKeepUninstalledPackages(@NonNull java.util.List); field public static final String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage"; field public static final String FEATURE_COMMUNAL_MODE = "android.software.communal_mode"; diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index dca5c542af172..7ffa61be76046 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -3832,4 +3832,13 @@ public class ApplicationPackageManager extends PackageManager { throw re.rethrowAsRuntimeException(); } } + + @Override + public void makeUidVisible(int recipientUid, int visibleUid) { + try { + mPM.makeUidVisible(recipientUid, visibleUid); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 0f236dfe1a8bf..ca7d77b2c44a3 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -781,7 +781,11 @@ interface IPackageManager { boolean isAutoRevokeWhitelisted(String packageName); - void grantImplicitAccess(int queryingUid, String visibleAuthority); + void makeProviderVisible(int recipientAppId, String visibleAuthority); + + @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest" + + ".permission.MAKE_UID_VISIBLE)") + void makeUidVisible(int recipientAppId, int visibleUid); IBinder getHoldLockToken(); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index f9beaa7cd0e9c..81c941eedef0b 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -10281,19 +10281,38 @@ public abstract class PackageManager { } /** - * Grants implicit visibility of the package that provides an authority to a querying UID. + * Makes a package that provides an authority {@code visibleAuthority} become visible to the + * application {@code recipientUid}. * * @throws SecurityException when called by a package other than the contacts provider * @hide */ - public void grantImplicitAccess(int queryingUid, String visibleAuthority) { + public void makeProviderVisible(int recipientUid, String visibleAuthority) { try { - ActivityThread.getPackageManager().grantImplicitAccess(queryingUid, visibleAuthority); + ActivityThread.getPackageManager().makeProviderVisible(recipientUid, visibleAuthority); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } + /** + * Makes the package associated with the uid {@code visibleUid} become visible to the + * recipient uid application. + * + * @param recipientUid The uid of the application that is being given access to {@code + * visibleUid} + * @param visibleUid The uid of the application that is becoming accessible to {@code + * recipientAppId} + * @hide + */ + @RequiresPermission(android.Manifest.permission.MAKE_UID_VISIBLE) + @TestApi + @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + public void makeUidVisible(int recipientUid, int visibleUid) { + throw new UnsupportedOperationException( + "makeUidVisible not implemented in subclass"); + } + // Some of the flags don't affect the query result, but let's be conservative and cache // each combination of flags separately. diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index ddc37eed9f034..d652b2ff4f4a8 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -6420,6 +6420,12 @@ + + + diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index 523ccaf2cca98..e7765e6d01e9c 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -668,6 +668,9 @@ + + +