diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index bf56f25132574..87511eed93e6f 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -441,7 +441,7 @@ public class ApplicationPackageManager extends PackageManager { /** @hide */ @Override - public @Nullable String getServicesSystemSharedLibraryPackageName() { + public @NonNull String getServicesSystemSharedLibraryPackageName() { try { return mPM.getServicesSystemSharedLibraryPackageName(); } catch (RemoteException e) { @@ -449,6 +449,17 @@ public class ApplicationPackageManager extends PackageManager { } } + /** + * @hide + */ + public @NonNull String getSharedSystemSharedLibraryPackageName() { + try { + return mPM.getSharedSystemSharedLibraryPackageName(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + @Override @SuppressWarnings("unchecked") public FeatureInfo[] getSystemAvailableFeatures() { diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 0e0be206971c3..0c793120d0a85 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -567,6 +567,7 @@ interface IPackageManager { boolean setRequiredForSystemUser(String packageName, boolean systemUserApp); String getServicesSystemSharedLibraryPackageName(); + String getSharedSystemSharedLibraryPackageName(); boolean isPackageDeviceAdminOnAnyUser(String packageName); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 3d2ab95b224aa..cf3e893d7d7a4 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3573,7 +3573,16 @@ public abstract class PackageManager { * * @hide */ - public abstract @Nullable String getServicesSystemSharedLibraryPackageName(); + public abstract @NonNull String getServicesSystemSharedLibraryPackageName(); + + /** + * Get the name of the package hosting the shared components shared library. + * + * @return The library host package. + * + * @hide + */ + public abstract @NonNull String getSharedSystemSharedLibraryPackageName(); /** * Get a list of features that are available on the diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index ca0b86a52e4f6..d98f1a4740ad4 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -20,6 +20,10 @@ import com.android.settingslib.drawable.UserIconDrawable; import java.text.NumberFormat; public class Utils { + private static Signature[] sSystemSignature; + private static String sPermissionControllerPackageName; + private static String sServicesSystemSharedLibPackageName; + private static String sSharedSystemSharedLibPackageName; /** * Return string resource that best describes combination of tethering @@ -161,15 +165,19 @@ public class Utils { if (sPermissionControllerPackageName == null) { sPermissionControllerPackageName = pm.getPermissionControllerPackageName(); } + if (sServicesSystemSharedLibPackageName == null) { + sServicesSystemSharedLibPackageName = pm.getServicesSystemSharedLibraryPackageName(); + } + if (sSharedSystemSharedLibPackageName == null) { + sSharedSystemSharedLibPackageName = pm.getSharedSystemSharedLibraryPackageName(); + } return (sSystemSignature[0] != null && sSystemSignature[0].equals(getFirstSignature(pkg))) - || (sPermissionControllerPackageName != null - && sPermissionControllerPackageName.equals(pkg.packageName)); + || pkg.packageName.equals(sPermissionControllerPackageName) + || pkg.packageName.equals(sServicesSystemSharedLibPackageName) + || pkg.packageName.equals(sSharedSystemSharedLibPackageName); } - private static Signature[] sSystemSignature; - private static String sPermissionControllerPackageName; - private static Signature getFirstSignature(PackageInfo pkg) { if (pkg != null && pkg.signatures != null && pkg.signatures.length > 0) { return pkg.signatures[0]; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 2a4d2b2237cf6..7e2efbd362a4c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -1104,6 +1104,7 @@ public class PackageManagerService extends IPackageManager.Stub { final @NonNull String mRequiredInstallerPackage; final @Nullable String mSetupWizardPackage; final @NonNull String mServicesSystemSharedLibraryPackageName; + final @NonNull String mSharedSystemSharedLibraryPackageName; private final PackageUsage mPackageUsage = new PackageUsage(); @@ -2718,7 +2719,7 @@ public class PackageManagerService extends IPackageManager.Stub { mIntentFilterVerifierComponent); mServicesSystemSharedLibraryPackageName = getRequiredSharedLibraryLPr( PackageManager.SYSTEM_SHARED_LIBRARY_SERVICES); - getRequiredSharedLibraryLPr( + mSharedSystemSharedLibraryPackageName = getRequiredSharedLibraryLPr( PackageManager.SYSTEM_SHARED_LIBRARY_SHARED); } else { mRequiredVerifierPackage = null; @@ -2726,6 +2727,7 @@ public class PackageManagerService extends IPackageManager.Stub { mIntentFilterVerifierComponent = null; mIntentFilterVerifier = null; mServicesSystemSharedLibraryPackageName = null; + mSharedSystemSharedLibraryPackageName = null; } mInstallerService = new PackageInstallerService(context, this); @@ -3700,6 +3702,13 @@ public class PackageManagerService extends IPackageManager.Stub { } } + @Override + public @NonNull String getSharedSystemSharedLibraryPackageName() { + synchronized (mPackages) { + return mSharedSystemSharedLibraryPackageName; + } + } + @Override public @NonNull ParceledListSlice getSystemAvailableFeatures() { synchronized (mPackages) { diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index 2e5ed3fd3520d..330dbab5bab33 100644 --- a/test-runner/src/android/test/mock/MockPackageManager.java +++ b/test-runner/src/android/test/mock/MockPackageManager.java @@ -822,7 +822,13 @@ public class MockPackageManager extends PackageManager { /** @hide */ @Override - public @Nullable String getServicesSystemSharedLibraryPackageName() { + public @NonNull String getServicesSystemSharedLibraryPackageName() { + throw new UnsupportedOperationException(); + } + + /** @hide */ + @Override + public @NonNull String getSharedSystemSharedLibraryPackageName() { throw new UnsupportedOperationException(); } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java index 0a64b63bfc64a..b3ed9e1a01649 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java @@ -49,6 +49,7 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Handler; +import android.os.RemoteException; import android.os.UserHandle; import android.os.storage.VolumeInfo; import java.util.List; @@ -310,6 +311,11 @@ public class BridgePackageManager extends PackageManager { return null; } + @Override + public @NonNull String getSharedSystemSharedLibraryPackageName() { + return null; + } + @Override public FeatureInfo[] getSystemAvailableFeatures() { return new FeatureInfo[0];