1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.provider.settings.validators; 18 19 import static android.media.AudioFormat.SURROUND_SOUND_ENCODING; 20 import static android.provider.settings.validators.SettingsValidators.ANY_INTEGER_VALIDATOR; 21 import static android.provider.settings.validators.SettingsValidators.ANY_STRING_VALIDATOR; 22 import static android.provider.settings.validators.SettingsValidators.BOOLEAN_VALIDATOR; 23 import static android.provider.settings.validators.SettingsValidators.NONE_NEGATIVE_LONG_VALIDATOR; 24 import static android.provider.settings.validators.SettingsValidators.PACKAGE_NAME_VALIDATOR; 25 import static android.provider.settings.validators.SettingsValidators.PERCENTAGE_INTEGER_VALIDATOR; 26 import static android.view.Display.HdrCapabilities.HDR_TYPES; 27 28 import android.os.BatteryManager; 29 import android.provider.Settings.Global; 30 import android.util.ArrayMap; 31 32 import java.util.Map; 33 34 /** 35 * Validators for Global settings 36 */ 37 public class GlobalSettingsValidators { 38 public static final Map<String, Validator> VALIDATORS = new ArrayMap<>(); 39 40 static { VALIDATORS.put(Global.APPLY_RAMPING_RINGER, BOOLEAN_VALIDATOR)41 VALIDATORS.put(Global.APPLY_RAMPING_RINGER, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.BUGREPORT_IN_POWER_MENU, BOOLEAN_VALIDATOR)42 VALIDATORS.put(Global.BUGREPORT_IN_POWER_MENU, BOOLEAN_VALIDATOR); VALIDATORS.put( Global.STAY_ON_WHILE_PLUGGED_IN, value -> { try { int val = Integer.parseInt(value); return (val == 0) || (val == BatteryManager.BATTERY_PLUGGED_AC) || (val == BatteryManager.BATTERY_PLUGGED_USB) || (val == BatteryManager.BATTERY_PLUGGED_WIRELESS) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB)) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_WIRELESS)) || (val == (BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_WIRELESS)) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_WIRELESS)); } catch (NumberFormatException e) { return false; } })43 VALIDATORS.put( 44 Global.STAY_ON_WHILE_PLUGGED_IN, 45 value -> { 46 try { 47 int val = Integer.parseInt(value); 48 return (val == 0) 49 || (val == BatteryManager.BATTERY_PLUGGED_AC) 50 || (val == BatteryManager.BATTERY_PLUGGED_USB) 51 || (val == BatteryManager.BATTERY_PLUGGED_WIRELESS) 52 || (val 53 == (BatteryManager.BATTERY_PLUGGED_AC 54 | BatteryManager.BATTERY_PLUGGED_USB)) 55 || (val 56 == (BatteryManager.BATTERY_PLUGGED_AC 57 | BatteryManager.BATTERY_PLUGGED_WIRELESS)) 58 || (val 59 == (BatteryManager.BATTERY_PLUGGED_USB 60 | BatteryManager.BATTERY_PLUGGED_WIRELESS)) 61 || (val 62 == (BatteryManager.BATTERY_PLUGGED_AC 63 | BatteryManager.BATTERY_PLUGGED_USB 64 | BatteryManager.BATTERY_PLUGGED_WIRELESS)); 65 } catch (NumberFormatException e) { 66 return false; 67 } 68 }); VALIDATORS.put(Global.AUTO_TIME, BOOLEAN_VALIDATOR)69 VALIDATORS.put(Global.AUTO_TIME, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.AUTO_TIME_ZONE, BOOLEAN_VALIDATOR)70 VALIDATORS.put(Global.AUTO_TIME_ZONE, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.POWER_SOUNDS_ENABLED, BOOLEAN_VALIDATOR)71 VALIDATORS.put(Global.POWER_SOUNDS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.DOCK_SOUNDS_ENABLED, BOOLEAN_VALIDATOR)72 VALIDATORS.put(Global.DOCK_SOUNDS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR)73 VALIDATORS.put(Global.CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.USB_MASS_STORAGE_ENABLED, BOOLEAN_VALIDATOR)74 VALIDATORS.put(Global.USB_MASS_STORAGE_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put( Global.NETWORK_RECOMMENDATIONS_ENABLED, new DiscreteValueValidator(new String[] {R, R, R}))75 VALIDATORS.put( 76 Global.NETWORK_RECOMMENDATIONS_ENABLED, 77 new DiscreteValueValidator(new String[] {"-1", "0", "1"})); VALIDATORS.put(Global.WIFI_WAKEUP_ENABLED, BOOLEAN_VALIDATOR)78 VALIDATORS.put(Global.WIFI_WAKEUP_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, BOOLEAN_VALIDATOR)79 VALIDATORS.put(Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, BOOLEAN_VALIDATOR); VALIDATORS.put( Global.USE_OPEN_WIFI_PACKAGE, value -> (value == null) || PACKAGE_NAME_VALIDATOR.validate(value))80 VALIDATORS.put( 81 Global.USE_OPEN_WIFI_PACKAGE, 82 value -> (value == null) || PACKAGE_NAME_VALIDATOR.validate(value)); VALIDATORS.put(Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED, ANY_STRING_VALIDATOR)83 VALIDATORS.put(Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED, ANY_STRING_VALIDATOR); VALIDATORS.put( Global.EMERGENCY_TONE, new DiscreteValueValidator(new String[] {R, R, R}))84 VALIDATORS.put( 85 Global.EMERGENCY_TONE, new DiscreteValueValidator(new String[] {"0", "1", "2"})); VALIDATORS.put(Global.CALL_AUTO_RETRY, BOOLEAN_VALIDATOR)86 VALIDATORS.put(Global.CALL_AUTO_RETRY, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.DOCK_AUDIO_MEDIA_ENABLED, BOOLEAN_VALIDATOR)87 VALIDATORS.put(Global.DOCK_AUDIO_MEDIA_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put( Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS, new DiscreteValueValidator(new String[] {R, R}))88 VALIDATORS.put( 89 Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS, 90 new DiscreteValueValidator(new String[] {"0", "1"})); VALIDATORS.put( Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED, new DiscreteValueValidator(new String[] {R, R}))91 VALIDATORS.put( 92 Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED, 93 new DiscreteValueValidator(new String[] {"0", "1"})); VALIDATORS.put( Global.USER_DISABLED_HDR_FORMATS, new DiscreteValueIntegerListValidator(R, HDR_TYPES))94 VALIDATORS.put( 95 Global.USER_DISABLED_HDR_FORMATS, 96 new DiscreteValueIntegerListValidator(",", HDR_TYPES)); VALIDATORS.put( Global.ENCODED_SURROUND_OUTPUT, new DiscreteValueValidator(new String[] {R, R, R, R}))97 VALIDATORS.put( 98 Global.ENCODED_SURROUND_OUTPUT, 99 new DiscreteValueValidator(new String[] {"0", "1", "2", "3"})); VALIDATORS.put( Global.ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS, new DiscreteValueIntegerListValidator(R, SURROUND_SOUND_ENCODING))100 VALIDATORS.put( 101 Global.ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS, 102 new DiscreteValueIntegerListValidator(",", SURROUND_SOUND_ENCODING)); VALIDATORS.put( Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL, new InclusiveIntegerRangeValidator(0, 100))103 VALIDATORS.put( 104 Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL, 105 new InclusiveIntegerRangeValidator(0, 100)); VALIDATORS.put( Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, new DiscreteValueValidator(new String[] {R, R}))106 VALIDATORS.put( 107 Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, 108 new DiscreteValueValidator(new String[] {"0", "1"})); VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL, PERCENTAGE_INTEGER_VALIDATOR)109 VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL, PERCENTAGE_INTEGER_VALIDATOR); VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, PERCENTAGE_INTEGER_VALIDATOR)110 VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, PERCENTAGE_INTEGER_VALIDATOR); VALIDATORS.put( Global.AUTOMATIC_POWER_SAVE_MODE, new DiscreteValueValidator(new String[] {R, R}))111 VALIDATORS.put( 112 Global.AUTOMATIC_POWER_SAVE_MODE, 113 new DiscreteValueValidator(new String[] {"0", "1"})); VALIDATORS.put( Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD, PERCENTAGE_INTEGER_VALIDATOR)114 VALIDATORS.put( 115 Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD, PERCENTAGE_INTEGER_VALIDATOR); VALIDATORS.put(Global.BLUETOOTH_ON, BOOLEAN_VALIDATOR)116 VALIDATORS.put(Global.BLUETOOTH_ON, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.PRIVATE_DNS_MODE, ANY_STRING_VALIDATOR)117 VALIDATORS.put(Global.PRIVATE_DNS_MODE, ANY_STRING_VALIDATOR); VALIDATORS.put(Global.PRIVATE_DNS_SPECIFIER, ANY_STRING_VALIDATOR)118 VALIDATORS.put(Global.PRIVATE_DNS_SPECIFIER, ANY_STRING_VALIDATOR); VALIDATORS.put(Global.SOFT_AP_TIMEOUT_ENABLED, BOOLEAN_VALIDATOR)119 VALIDATORS.put(Global.SOFT_AP_TIMEOUT_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.WIFI_SCAN_THROTTLE_ENABLED, BOOLEAN_VALIDATOR)120 VALIDATORS.put(Global.WIFI_SCAN_THROTTLE_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.APP_AUTO_RESTRICTION_ENABLED, BOOLEAN_VALIDATOR)121 VALIDATORS.put(Global.APP_AUTO_RESTRICTION_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.ZEN_DURATION, ANY_INTEGER_VALIDATOR)122 VALIDATORS.put(Global.ZEN_DURATION, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Global.CHARGING_VIBRATION_ENABLED, BOOLEAN_VALIDATOR)123 VALIDATORS.put(Global.CHARGING_VIBRATION_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED, BOOLEAN_VALIDATOR)124 VALIDATORS.put(Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.REQUIRE_PASSWORD_TO_DECRYPT, BOOLEAN_VALIDATOR)125 VALIDATORS.put(Global.REQUIRE_PASSWORD_TO_DECRYPT, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.DEVICE_DEMO_MODE, BOOLEAN_VALIDATOR)126 VALIDATORS.put(Global.DEVICE_DEMO_MODE, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.AWARE_ALLOWED, BOOLEAN_VALIDATOR)127 VALIDATORS.put(Global.AWARE_ALLOWED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 5))128 VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 5)); VALIDATORS.put( Global.POWER_BUTTON_VERY_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1))129 VALIDATORS.put( 130 Global.POWER_BUTTON_VERY_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1)); VALIDATORS.put(Global.KEY_CHORD_POWER_VOLUME_UP, new InclusiveIntegerRangeValidator(0, 2))131 VALIDATORS.put(Global.KEY_CHORD_POWER_VOLUME_UP, new InclusiveIntegerRangeValidator(0, 2)); VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR)132 VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR); VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR)133 VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Global.DEVELOPMENT_SETTINGS_ENABLED, BOOLEAN_VALIDATOR)134 VALIDATORS.put(Global.DEVELOPMENT_SETTINGS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.NOTIFICATION_FEEDBACK_ENABLED, BOOLEAN_VALIDATOR)135 VALIDATORS.put(Global.NOTIFICATION_FEEDBACK_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.RESTRICTED_NETWORKING_MODE, BOOLEAN_VALIDATOR)136 VALIDATORS.put(Global.RESTRICTED_NETWORKING_MODE, BOOLEAN_VALIDATOR); VALIDATORS.put( Global.ONE_HANDED_KEYGUARD_SIDE, new InclusiveIntegerRangeValidator( Global.ONE_HANDED_KEYGUARD_SIDE_LEFT, Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT))137 VALIDATORS.put( 138 Global.ONE_HANDED_KEYGUARD_SIDE, 139 new InclusiveIntegerRangeValidator( 140 /* first= */Global.ONE_HANDED_KEYGUARD_SIDE_LEFT, 141 /* last= */Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT)); VALIDATORS.put(Global.DISABLE_WINDOW_BLURS, BOOLEAN_VALIDATOR)142 VALIDATORS.put(Global.DISABLE_WINDOW_BLURS, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.DEVICE_CONFIG_SYNC_DISABLED, BOOLEAN_VALIDATOR)143 VALIDATORS.put(Global.DEVICE_CONFIG_SYNC_DISABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Global.AUTOMATIC_POWER_SAVE_MODE, ANY_INTEGER_VALIDATOR)144 VALIDATORS.put(Global.AUTOMATIC_POWER_SAVE_MODE, ANY_INTEGER_VALIDATOR); VALIDATORS.put(Global.ADVANCED_BATTERY_USAGE_AMOUNT, PERCENTAGE_INTEGER_VALIDATOR)145 VALIDATORS.put(Global.ADVANCED_BATTERY_USAGE_AMOUNT, PERCENTAGE_INTEGER_VALIDATOR); VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS_DURATION_MS, NONE_NEGATIVE_LONG_VALIDATOR)146 VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS_DURATION_MS, NONE_NEGATIVE_LONG_VALIDATOR); 147 } 148 } 149 150