From 9ac5f83a721ad0e4fddb6e34075f95590c61108a Mon Sep 17 00:00:00 2001 From: Rhed Jao Date: Mon, 12 Apr 2021 14:59:53 +0800 Subject: Apply package visibility to the LauncherApps#isActivityEnabled Bug: 180417374 Test: atest AppEnumerationTests Change-Id: I23ad6515ca7a8235290809c390f2527bd0b3c987 --- .../android/content/pm/PackageManagerInternal.java | 6 +++++ .../com/android/server/pm/LauncherAppsService.java | 28 ++++++++++++---------- .../android/server/pm/PackageManagerService.java | 17 +++++++++++-- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index a9eb2c110867..5dd9b0e8cbc6 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -824,6 +824,12 @@ public abstract class PackageManagerInternal { public abstract @PackageManager.EnabledState int getApplicationEnabledState( String packageName, int userId); + /** + * Return the enabled setting for a package component (activity, receiver, service, provider). + */ + public abstract @PackageManager.EnabledState int getComponentEnabledSetting( + @NonNull ComponentName componentName, int callingUid, int userId); + /** * Extra field name for the token of a request to enable rollback for a * package. diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index 27e0ffc73d9d..85db24a59f5d 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -1028,22 +1028,24 @@ public class LauncherAppsService extends SystemService { return false; } + final PackageManagerInternal pmInt = + LocalServices.getService(PackageManagerInternal.class); final int callingUid = injectBinderCallingUid(); + final int state = pmInt.getComponentEnabledSetting(component, callingUid, + user.getIdentifier()); + switch (state) { + case PackageManager.COMPONENT_ENABLED_STATE_DEFAULT: + break; // Need to check the manifest's enabled state. + case PackageManager.COMPONENT_ENABLED_STATE_ENABLED: + return true; + case PackageManager.COMPONENT_ENABLED_STATE_DISABLED: + case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER: + case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED: + return false; + } + final long ident = Binder.clearCallingIdentity(); try { - final int state = mIPM.getComponentEnabledSetting(component, user.getIdentifier()); - switch (state) { - case PackageManager.COMPONENT_ENABLED_STATE_DEFAULT: - break; // Need to check the manifest's enabled state. - case PackageManager.COMPONENT_ENABLED_STATE_ENABLED: - return true; - case PackageManager.COMPONENT_ENABLED_STATE_DISABLED: - case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER: - case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED: - return false; - } - final PackageManagerInternal pmInt = - LocalServices.getService(PackageManagerInternal.class); ActivityInfo info = pmInt.getActivityInfo(component, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 321c5cabc1c1..736b5742f20b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -23695,11 +23695,17 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int getComponentEnabledSetting(@NonNull ComponentName component, int userId) { - if (component == null) return COMPONENT_ENABLED_STATE_DEFAULT; - if (!mUserManager.exists(userId)) return COMPONENT_ENABLED_STATE_DISABLED; int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(callingUid, userId, false /*requireFullPermission*/, false /*checkShell*/, "getComponentEnabled"); + return getComponentEnabledSettingInternal(component, callingUid, userId); + } + + private int getComponentEnabledSettingInternal(ComponentName component, int callingUid, + int userId) { + if (component == null) return COMPONENT_ENABLED_STATE_DEFAULT; + if (!mUserManager.exists(userId)) return COMPONENT_ENABLED_STATE_DISABLED; + synchronized (mLock) { try { if (shouldFilterApplicationLocked( @@ -27125,6 +27131,13 @@ public class PackageManagerService extends IPackageManager.Stub } } + @Override + public @PackageManager.EnabledState int getComponentEnabledSetting( + @NonNull ComponentName componentName, int callingUid, int userId) { + return PackageManagerService.this.getComponentEnabledSettingInternal(componentName, + callingUid, userId); + } + @Override public void setEnableRollbackCode(int token, int enableRollbackCode) { PackageManagerService.this.setEnableRollbackCode(token, enableRollbackCode); -- cgit v1.2.3-59-g8ed1b