From a9c2500a6863dabdd786f17a25ce0bf3683109a2 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Wed, 13 Apr 2016 19:25:56 -0700 Subject: [PATCH] Disallow disable of the system shared libs. bug:28173410 Change-Id: If731f2d90312a083bb940f83431ba3eccf213947 --- .../android/app/ApplicationPackageManager.java | 13 ++++++++++++- .../android/content/pm/IPackageManager.aidl | 1 + .../android/content/pm/PackageManager.java | 11 ++++++++++- .../src/com/android/settingslib/Utils.java | 18 +++++++++++++----- .../server/pm/PackageManagerService.java | 11 ++++++++++- .../android/test/mock/MockPackageManager.java | 8 +++++++- .../bridge/android/BridgePackageManager.java | 6 ++++++ 7 files changed, 59 insertions(+), 9 deletions(-) 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 0526815abc5a3..7794075700b93 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -565,6 +565,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 ade22482bbc94..443263d39038f 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3510,7 +3510,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 1fb260d3864aa..e7c3a81a382dc 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(); @@ -2638,7 +2639,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; @@ -2646,6 +2647,7 @@ public class PackageManagerService extends IPackageManager.Stub { mIntentFilterVerifierComponent = null; mIntentFilterVerifier = null; mServicesSystemSharedLibraryPackageName = null; + mSharedSystemSharedLibraryPackageName = null; } mInstallerService = new PackageInstallerService(context, this); @@ -3620,6 +3622,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];