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