diff --git a/services/core/java/com/android/server/pm/Computer.java b/services/core/java/com/android/server/pm/Computer.java index 6f619583b876e..7a301d411d2f2 100644 --- a/services/core/java/com/android/server/pm/Computer.java +++ b/services/core/java/com/android/server/pm/Computer.java @@ -514,6 +514,11 @@ public interface Computer { int getComponentEnabledSetting(@NonNull ComponentName component, int callingUid, @UserIdInt int userId); + @Computer.LiveImplementation(override = LiveImplementation.MANDATORY) + @PackageManager.EnabledState + int getComponentEnabledSettingInternal(@NonNull ComponentName component, int callingUid, + @UserIdInt int userId); + /** * @return true if the runtime app user enabled state, runtime component user enabled state, * install-time app manifest enabled state, and install-time component manifest enabled state diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 996509788637c..887dfff413840 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -5015,20 +5015,26 @@ public class ComputerEngine implements Computer { @UserIdInt int userId) { enforceCrossUserPermission(callingUid, userId, false /*requireFullPermission*/, false /*checkShell*/, "getComponentEnabled"); + return getComponentEnabledSettingInternal(component, callingUid, userId); + } + @PackageManager.EnabledState + @Override + public int getComponentEnabledSettingInternal(@NonNull ComponentName component, int callingUid, + @UserIdInt int userId) { if (component == null) return COMPONENT_ENABLED_STATE_DEFAULT; if (!mUserManager.exists(userId)) return COMPONENT_ENABLED_STATE_DISABLED; - try { - if (shouldFilterApplication( - mSettings.getPackage(component.getPackageName()), callingUid, - component, TYPE_UNKNOWN, userId)) { - throw new PackageManager.NameNotFoundException(component.getPackageName()); - } - return mSettings.getComponentEnabledSetting(component, userId); - } catch (PackageManager.NameNotFoundException e) { - throw new IllegalArgumentException("Unknown component: " + component); + try { + if (shouldFilterApplication( + mSettings.getPackage(component.getPackageName()), callingUid, + component, TYPE_UNKNOWN, userId)) { + throw new PackageManager.NameNotFoundException(component.getPackageName()); } + return mSettings.getComponentEnabledSetting(component, userId); + } catch (PackageManager.NameNotFoundException e) { + throw new IllegalArgumentException("Unknown component: " + component); + } } @Override diff --git a/services/core/java/com/android/server/pm/ComputerLocked.java b/services/core/java/com/android/server/pm/ComputerLocked.java index d234d4dde3f98..801aaeff8ada7 100644 --- a/services/core/java/com/android/server/pm/ComputerLocked.java +++ b/services/core/java/com/android/server/pm/ComputerLocked.java @@ -649,6 +649,14 @@ public final class ComputerLocked extends ComputerEngine { } } + @Override + public int getComponentEnabledSettingInternal(@NonNull ComponentName component, int callingUid, + @UserIdInt int userId) { + synchronized (mLock) { + return super.getComponentEnabledSettingInternal(component, callingUid, userId); + } + } + @Override public boolean isComponentEffectivelyEnabled(@NonNull ComponentInfo componentInfo, @UserIdInt int userId) { diff --git a/services/core/java/com/android/server/pm/ComputerTracker.java b/services/core/java/com/android/server/pm/ComputerTracker.java index 37298cd52f751..ca17d66f4e25e 100644 --- a/services/core/java/com/android/server/pm/ComputerTracker.java +++ b/services/core/java/com/android/server/pm/ComputerTracker.java @@ -1089,6 +1089,15 @@ public final class ComputerTracker implements Computer { } } + @Override + public int getComponentEnabledSettingInternal(@NonNull ComponentName component, int callingUid, + @UserIdInt int userId) { + try (ThreadComputer current = snapshot()) { + return current.mComputer.getComponentEnabledSettingInternal( + component, callingUid, userId); + } + } + @Override public boolean isComponentEffectivelyEnabled(@NonNull ComponentInfo componentInfo, @UserIdInt int userId) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 5f56d4e100369..ab01961517f4b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -8195,8 +8195,8 @@ public class PackageManagerService extends IPackageManager.Stub @Override public @PackageManager.EnabledState int getComponentEnabledSetting( @NonNull ComponentName componentName, int callingUid, int userId) { - return PackageManagerService.this.mComputer.getComponentEnabledSetting(componentName, - callingUid, userId); + return PackageManagerService.this.mComputer.getComponentEnabledSettingInternal( + componentName, callingUid, userId); } @Override