diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 03ed373b91c11..5a56b0e508534 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3022,6 +3022,18 @@ public abstract class PackageManager { @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TUNER = "android.hardware.tv.tuner"; + /** + * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device has + * the necessary changes to support app enumeration. + * + * @hide + */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_APP_ENUMERATION = "android.software.app_enumeration"; + + /** @hide */ + public static final boolean APP_ENUMERATION_ENABLED_BY_DEFAULT = true; + /** * Extra field name for the URI to a verification file. Passed to a package * verifier. diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index 578c0cc23a741..3378c073eacea 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -1160,6 +1160,10 @@ public class SystemConfig { addFeature(PackageManager.FEATURE_INCREMENTAL_DELIVERY, 0); } + if (PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT) { + addFeature(PackageManager.FEATURE_APP_ENUMERATION, 0); + } + for (String featureName : mUnavailableFeatures) { removeFeature(featureName); } diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java index 0fb889c8da220..a1250cb8849f9 100644 --- a/services/core/java/com/android/server/pm/AppsFilter.java +++ b/services/core/java/com/android/server/pm/AppsFilter.java @@ -69,7 +69,6 @@ public class AppsFilter { // Logs all filtering instead of enforcing private static final boolean DEBUG_ALLOW_ALL = false; private static final boolean DEBUG_LOGGING = false; - private static final boolean FEATURE_ENABLED_BY_DEFAULT = true; /** * This contains a list of app UIDs that are implicitly queryable because another app explicitly @@ -135,7 +134,8 @@ public class AppsFilter { private static class FeatureConfigImpl implements FeatureConfig { private static final String FILTERING_ENABLED_NAME = "package_query_filtering_enabled"; private final PackageManagerService.Injector mInjector; - private volatile boolean mFeatureEnabled = FEATURE_ENABLED_BY_DEFAULT; + private volatile boolean mFeatureEnabled = + PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT; private FeatureConfigImpl(PackageManagerService.Injector injector) { mInjector = injector; @@ -145,14 +145,14 @@ public class AppsFilter { public void onSystemReady() { mFeatureEnabled = DeviceConfig.getBoolean( NAMESPACE_PACKAGE_MANAGER_SERVICE, FILTERING_ENABLED_NAME, - FEATURE_ENABLED_BY_DEFAULT); + PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT); DeviceConfig.addOnPropertiesChangedListener( NAMESPACE_PACKAGE_MANAGER_SERVICE, FgThread.getExecutor(), properties -> { if (properties.getKeyset().contains(FILTERING_ENABLED_NAME)) { synchronized (FeatureConfigImpl.this) { mFeatureEnabled = properties.getBoolean(FILTERING_ENABLED_NAME, - FEATURE_ENABLED_BY_DEFAULT); + PackageManager.APP_ENUMERATION_ENABLED_BY_DEFAULT); } } });