Loading core/java/android/provider/Settings.java +8 −0 Original line number Diff line number Diff line Loading @@ -10386,6 +10386,14 @@ public final class Settings { public static final String STORAGE_SETTINGS_CLOBBER_THRESHOLD = "storage_settings_clobber_threshold"; /** * Exemptions to the hidden API blacklist. * * @hide */ public static final String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions"; /** * Settings to backup. This is here so that it's in the same place as the settings * keys and easy to update. Loading core/proto/android/providers/settings.proto +1 −0 Original line number Diff line number Diff line Loading @@ -335,6 +335,7 @@ message GlobalSettingsProto { SettingProto uninstalled_instant_app_min_cache_period = 290; SettingProto uninstalled_instant_app_max_cache_period = 291; SettingProto unused_static_shared_lib_min_cache_period = 292; SettingProto hidden_api_blacklist_exemptions = 293; } message SecureSettingsProto { Loading core/tests/coretests/src/android/provider/SettingsBackupTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -413,7 +413,8 @@ public class SettingsBackupTest { Settings.Global.WTF_IS_FATAL, Settings.Global.ZEN_MODE, Settings.Global.ZEN_MODE_CONFIG_ETAG, Settings.Global.ZEN_MODE_RINGER_LEVEL); Settings.Global.ZEN_MODE_RINGER_LEVEL, Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS); private static final Set<String> BACKUP_BLACKLISTED_SECURE_SETTINGS = newHashSet( Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +3 −0 Original line number Diff line number Diff line Loading @@ -923,6 +923,9 @@ class SettingsProtoDumpUtil { dumpSetting(s, p, Settings.Global.CONTACTS_DATABASE_WAL_ENABLED, GlobalSettingsProto.CONTACTS_DATABASE_WAL_ENABLED); dumpSetting(s, p, Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS, GlobalSettingsProto.HIDDEN_API_BLACKLIST_EXEMPTIONS); dumpSetting(s, p, Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, GlobalSettingsProto.MULTI_SIM_VOICE_CALL_SUBSCRIPTION); Loading services/core/java/com/android/server/am/ActivityManagerService.java +46 −3 Original line number Diff line number Diff line Loading @@ -1738,6 +1738,9 @@ public class ActivityManagerService extends IActivityManager.Stub final ActivityManagerConstants mConstants; // Encapsulates the global setting "hidden_api_blacklist_exemptions" final HiddenApiBlacklist mHiddenApiBlacklist; PackageManagerInternal mPackageManagerInt; // VoiceInteraction session ID that changes for each new request except when Loading Loading @@ -2687,6 +2690,42 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Encapsulates the globla setting "hidden_api_blacklist_exemptions", including tracking the * latest value via a content observer. */ static class HiddenApiBlacklist extends ContentObserver { private final Context mContext; private boolean mBlacklistDisabled; public HiddenApiBlacklist(Handler handler, Context context) { super(handler); mContext = context; } public void registerObserver() { mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS), false, this); update(); } private void update() { mBlacklistDisabled = "*".equals(Settings.Global.getString(mContext.getContentResolver(), Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS)); } boolean isDisabled() { return mBlacklistDisabled; } public void onChange(boolean selfChange) { update(); } } @VisibleForTesting public ActivityManagerService(Injector injector) { mInjector = injector; Loading Loading @@ -2716,6 +2755,7 @@ public class ActivityManagerService extends IActivityManager.Stub mUiHandler = injector.getUiHandler(null); mUserController = null; mVrController = null; mHiddenApiBlacklist = null; } // Note: This method is invoked on the main thread but may need to attach various Loading Loading @@ -2848,6 +2888,8 @@ public class ActivityManagerService extends IActivityManager.Stub } }; mHiddenApiBlacklist = new HiddenApiBlacklist(mHandler, mContext); Watchdog.getInstance().addMonitor(this); Watchdog.getInstance().addThread(mHandler); } Loading Loading @@ -3891,9 +3933,9 @@ public class ActivityManagerService extends IActivityManager.Stub runtimeFlags |= Zygote.ONLY_USE_SYSTEM_OAT_FILES; } if (!app.info.isAllowedToUseHiddenApi()) { // This app is not allowed to use undocumented and private APIs. // Set up its runtime with the appropriate flag. if (!app.info.isAllowedToUseHiddenApi() && !mHiddenApiBlacklist.isDisabled()) { // This app is not allowed to use undocumented and private APIs, or blacklisting is // enabled. Set up its runtime with the appropriate flag. runtimeFlags |= Zygote.ENABLE_HIDDEN_API_CHECKS; } Loading Loading @@ -14165,6 +14207,7 @@ public class ActivityManagerService extends IActivityManager.Stub NETWORK_ACCESS_TIMEOUT_MS, NETWORK_ACCESS_TIMEOUT_DEFAULT_MS); final boolean supportsLeanbackOnly = mContext.getPackageManager().hasSystemFeature(FEATURE_LEANBACK_ONLY); mHiddenApiBlacklist.registerObserver(); // Transfer any global setting for forcing RTL layout, into a System Property SystemProperties.set(DEVELOPMENT_FORCE_RTL, forceRtl ? "1":"0"); Loading
core/java/android/provider/Settings.java +8 −0 Original line number Diff line number Diff line Loading @@ -10386,6 +10386,14 @@ public final class Settings { public static final String STORAGE_SETTINGS_CLOBBER_THRESHOLD = "storage_settings_clobber_threshold"; /** * Exemptions to the hidden API blacklist. * * @hide */ public static final String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions"; /** * Settings to backup. This is here so that it's in the same place as the settings * keys and easy to update. Loading
core/proto/android/providers/settings.proto +1 −0 Original line number Diff line number Diff line Loading @@ -335,6 +335,7 @@ message GlobalSettingsProto { SettingProto uninstalled_instant_app_min_cache_period = 290; SettingProto uninstalled_instant_app_max_cache_period = 291; SettingProto unused_static_shared_lib_min_cache_period = 292; SettingProto hidden_api_blacklist_exemptions = 293; } message SecureSettingsProto { Loading
core/tests/coretests/src/android/provider/SettingsBackupTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -413,7 +413,8 @@ public class SettingsBackupTest { Settings.Global.WTF_IS_FATAL, Settings.Global.ZEN_MODE, Settings.Global.ZEN_MODE_CONFIG_ETAG, Settings.Global.ZEN_MODE_RINGER_LEVEL); Settings.Global.ZEN_MODE_RINGER_LEVEL, Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS); private static final Set<String> BACKUP_BLACKLISTED_SECURE_SETTINGS = newHashSet( Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +3 −0 Original line number Diff line number Diff line Loading @@ -923,6 +923,9 @@ class SettingsProtoDumpUtil { dumpSetting(s, p, Settings.Global.CONTACTS_DATABASE_WAL_ENABLED, GlobalSettingsProto.CONTACTS_DATABASE_WAL_ENABLED); dumpSetting(s, p, Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS, GlobalSettingsProto.HIDDEN_API_BLACKLIST_EXEMPTIONS); dumpSetting(s, p, Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, GlobalSettingsProto.MULTI_SIM_VOICE_CALL_SUBSCRIPTION); Loading
services/core/java/com/android/server/am/ActivityManagerService.java +46 −3 Original line number Diff line number Diff line Loading @@ -1738,6 +1738,9 @@ public class ActivityManagerService extends IActivityManager.Stub final ActivityManagerConstants mConstants; // Encapsulates the global setting "hidden_api_blacklist_exemptions" final HiddenApiBlacklist mHiddenApiBlacklist; PackageManagerInternal mPackageManagerInt; // VoiceInteraction session ID that changes for each new request except when Loading Loading @@ -2687,6 +2690,42 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Encapsulates the globla setting "hidden_api_blacklist_exemptions", including tracking the * latest value via a content observer. */ static class HiddenApiBlacklist extends ContentObserver { private final Context mContext; private boolean mBlacklistDisabled; public HiddenApiBlacklist(Handler handler, Context context) { super(handler); mContext = context; } public void registerObserver() { mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS), false, this); update(); } private void update() { mBlacklistDisabled = "*".equals(Settings.Global.getString(mContext.getContentResolver(), Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS)); } boolean isDisabled() { return mBlacklistDisabled; } public void onChange(boolean selfChange) { update(); } } @VisibleForTesting public ActivityManagerService(Injector injector) { mInjector = injector; Loading Loading @@ -2716,6 +2755,7 @@ public class ActivityManagerService extends IActivityManager.Stub mUiHandler = injector.getUiHandler(null); mUserController = null; mVrController = null; mHiddenApiBlacklist = null; } // Note: This method is invoked on the main thread but may need to attach various Loading Loading @@ -2848,6 +2888,8 @@ public class ActivityManagerService extends IActivityManager.Stub } }; mHiddenApiBlacklist = new HiddenApiBlacklist(mHandler, mContext); Watchdog.getInstance().addMonitor(this); Watchdog.getInstance().addThread(mHandler); } Loading Loading @@ -3891,9 +3933,9 @@ public class ActivityManagerService extends IActivityManager.Stub runtimeFlags |= Zygote.ONLY_USE_SYSTEM_OAT_FILES; } if (!app.info.isAllowedToUseHiddenApi()) { // This app is not allowed to use undocumented and private APIs. // Set up its runtime with the appropriate flag. if (!app.info.isAllowedToUseHiddenApi() && !mHiddenApiBlacklist.isDisabled()) { // This app is not allowed to use undocumented and private APIs, or blacklisting is // enabled. Set up its runtime with the appropriate flag. runtimeFlags |= Zygote.ENABLE_HIDDEN_API_CHECKS; } Loading Loading @@ -14165,6 +14207,7 @@ public class ActivityManagerService extends IActivityManager.Stub NETWORK_ACCESS_TIMEOUT_MS, NETWORK_ACCESS_TIMEOUT_DEFAULT_MS); final boolean supportsLeanbackOnly = mContext.getPackageManager().hasSystemFeature(FEATURE_LEANBACK_ONLY); mHiddenApiBlacklist.registerObserver(); // Transfer any global setting for forcing RTL layout, into a System Property SystemProperties.set(DEVELOPMENT_FORCE_RTL, forceRtl ? "1":"0");