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.hardware.display.HdrConversionMode.HDR_CONVERSION_FORCE;
20 import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_PASSTHROUGH;
21 import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_SYSTEM;
22 import static android.media.AudioFormat.SURROUND_SOUND_ENCODING;
23 import static android.net.ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_AVOID;
24 import static android.net.ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_IGNORE;
25 import static android.net.ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_PROMPT;
26 import static android.provider.settings.validators.SettingsValidators.ANY_INTEGER_VALIDATOR;
27 import static android.provider.settings.validators.SettingsValidators.ANY_STRING_VALIDATOR;
28 import static android.provider.settings.validators.SettingsValidators.BOOLEAN_VALIDATOR;
29 import static android.provider.settings.validators.SettingsValidators.NONE_NEGATIVE_LONG_VALIDATOR;
30 import static android.provider.settings.validators.SettingsValidators.NON_NEGATIVE_FLOAT_VALIDATOR;
31 import static android.provider.settings.validators.SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR;
32 import static android.provider.settings.validators.SettingsValidators.PACKAGE_NAME_VALIDATOR;
33 import static android.provider.settings.validators.SettingsValidators.PERCENTAGE_INTEGER_VALIDATOR;
34 import static android.view.Display.HdrCapabilities.HDR_TYPES;
35 import static android.view.Display.HdrCapabilities.HDR_TYPE_DOLBY_VISION;
36 import static android.view.Display.HdrCapabilities.HDR_TYPE_HDR10;
37 import static android.view.Display.HdrCapabilities.HDR_TYPE_HDR10_PLUS;
38 import static android.view.Display.HdrCapabilities.HDR_TYPE_HLG;
39 import static android.view.Display.HdrCapabilities.HDR_TYPE_INVALID;
40 
41 import android.os.BatteryManager;
42 import android.provider.Settings.Global;
43 import android.util.ArrayMap;
44 
45 import java.util.Map;
46 
47 /**
48  * Validators for Global settings
49  */
50 public class GlobalSettingsValidators {
51     public static final Map<String, Validator> VALIDATORS = new ArrayMap<>();
52 
53     static {
VALIDATORS.put(Global.APPLY_RAMPING_RINGER, BOOLEAN_VALIDATOR)54         VALIDATORS.put(Global.APPLY_RAMPING_RINGER, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.BUGREPORT_IN_POWER_MENU, BOOLEAN_VALIDATOR)55         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_DOCK) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB)) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_WIRELESS)) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_DOCK)) || (val == (BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_WIRELESS)) || (val == (BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_DOCK)) || (val == (BatteryManager.BATTERY_PLUGGED_WIRELESS | BatteryManager.BATTERY_PLUGGED_DOCK)) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_WIRELESS)) || (val == (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_DOCK)) || (val == (BatteryManager.BATTERY_PLUGGED_USB | BatteryManager.BATTERY_PLUGGED_WIRELESS | BatteryManager.BATTERY_PLUGGED_DOCK)); } catch (NumberFormatException e) { return false; } })56         VALIDATORS.put(
57                 Global.STAY_ON_WHILE_PLUGGED_IN,
58                 value -> {
59                     try {
60                         int val = Integer.parseInt(value);
61                         return (val == 0)
62                                 || (val == BatteryManager.BATTERY_PLUGGED_AC)
63                                 || (val == BatteryManager.BATTERY_PLUGGED_USB)
64                                 || (val == BatteryManager.BATTERY_PLUGGED_WIRELESS)
65                                 || (val == BatteryManager.BATTERY_PLUGGED_DOCK)
66                                 || (val
67                                         == (BatteryManager.BATTERY_PLUGGED_AC
68                                                 | BatteryManager.BATTERY_PLUGGED_USB))
69                                 || (val
70                                         == (BatteryManager.BATTERY_PLUGGED_AC
71                                                 | BatteryManager.BATTERY_PLUGGED_WIRELESS))
72                                 || (val
73                                         == (BatteryManager.BATTERY_PLUGGED_AC
74                                                 | BatteryManager.BATTERY_PLUGGED_DOCK))
75                                 || (val
76                                         == (BatteryManager.BATTERY_PLUGGED_USB
77                                                 | BatteryManager.BATTERY_PLUGGED_WIRELESS))
78                                 || (val
79                                         == (BatteryManager.BATTERY_PLUGGED_USB
80                                                 | BatteryManager.BATTERY_PLUGGED_DOCK))
81                                 || (val
82                                         == (BatteryManager.BATTERY_PLUGGED_WIRELESS
83                                                 | BatteryManager.BATTERY_PLUGGED_DOCK))
84                                 || (val
85                                         == (BatteryManager.BATTERY_PLUGGED_AC
86                                                 | BatteryManager.BATTERY_PLUGGED_USB
87                                                 | BatteryManager.BATTERY_PLUGGED_WIRELESS))
88                                 || (val
89                                         == (BatteryManager.BATTERY_PLUGGED_AC
90                                                 | BatteryManager.BATTERY_PLUGGED_USB
91                                                 | BatteryManager.BATTERY_PLUGGED_DOCK))
92                                 || (val
93                                         == (BatteryManager.BATTERY_PLUGGED_USB
94                                                 | BatteryManager.BATTERY_PLUGGED_WIRELESS
95                                                 | BatteryManager.BATTERY_PLUGGED_DOCK));
96                     } catch (NumberFormatException e) {
97                         return false;
98                     }
99                 });
VALIDATORS.put(Global.AUTO_TIME, BOOLEAN_VALIDATOR)100         VALIDATORS.put(Global.AUTO_TIME, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.AUTO_TIME_ZONE, BOOLEAN_VALIDATOR)101         VALIDATORS.put(Global.AUTO_TIME_ZONE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.POWER_SOUNDS_ENABLED, BOOLEAN_VALIDATOR)102         VALIDATORS.put(Global.POWER_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.DOCK_SOUNDS_ENABLED, BOOLEAN_VALIDATOR)103         VALIDATORS.put(Global.DOCK_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR)104         VALIDATORS.put(Global.CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.USB_MASS_STORAGE_ENABLED, BOOLEAN_VALIDATOR)105         VALIDATORS.put(Global.USB_MASS_STORAGE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.NETWORK_RECOMMENDATIONS_ENABLED, new DiscreteValueValidator(new String[] {R, R, R}))106         VALIDATORS.put(
107                 Global.NETWORK_RECOMMENDATIONS_ENABLED,
108                 new DiscreteValueValidator(new String[] {"-1", "0", "1"}));
VALIDATORS.put( Global.NETWORK_AVOID_BAD_WIFI, new DiscreteValueValidator( new String[] { String.valueOf(NETWORK_AVOID_BAD_WIFI_IGNORE), String.valueOf(NETWORK_AVOID_BAD_WIFI_PROMPT), String.valueOf(NETWORK_AVOID_BAD_WIFI_AVOID), }))109         VALIDATORS.put(
110                 Global.NETWORK_AVOID_BAD_WIFI,
111                 new DiscreteValueValidator(
112                         new String[] {
113                                 String.valueOf(NETWORK_AVOID_BAD_WIFI_IGNORE),
114                                 String.valueOf(NETWORK_AVOID_BAD_WIFI_PROMPT),
115                                 String.valueOf(NETWORK_AVOID_BAD_WIFI_AVOID),
116                         }));
VALIDATORS.put(Global.WIFI_WAKEUP_ENABLED, BOOLEAN_VALIDATOR)117         VALIDATORS.put(Global.WIFI_WAKEUP_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, BOOLEAN_VALIDATOR)118         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))119         VALIDATORS.put(
120                 Global.USE_OPEN_WIFI_PACKAGE,
121                 value -> (value == null) || PACKAGE_NAME_VALIDATOR.validate(value));
VALIDATORS.put(Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED, ANY_STRING_VALIDATOR)122         VALIDATORS.put(Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED, ANY_STRING_VALIDATOR);
VALIDATORS.put( Global.EMERGENCY_TONE, new DiscreteValueValidator(new String[] {R, R, R}))123         VALIDATORS.put(
124                 Global.EMERGENCY_TONE, new DiscreteValueValidator(new String[] {"0", "1", "2"}));
VALIDATORS.put(Global.EMERGENCY_GESTURE_POWER_BUTTON_COOLDOWN_PERIOD_MS, NON_NEGATIVE_INTEGER_VALIDATOR)125         VALIDATORS.put(Global.EMERGENCY_GESTURE_POWER_BUTTON_COOLDOWN_PERIOD_MS,
126                 NON_NEGATIVE_INTEGER_VALIDATOR);
VALIDATORS.put(Global.EMERGENCY_GESTURE_TAP_DETECTION_MIN_TIME_MS, NON_NEGATIVE_INTEGER_VALIDATOR)127         VALIDATORS.put(Global.EMERGENCY_GESTURE_TAP_DETECTION_MIN_TIME_MS,
128                 NON_NEGATIVE_INTEGER_VALIDATOR);
VALIDATORS.put(Global.EMERGENCY_GESTURE_STICKY_UI_MAX_DURATION_MILLIS, NON_NEGATIVE_INTEGER_VALIDATOR)129         VALIDATORS.put(Global.EMERGENCY_GESTURE_STICKY_UI_MAX_DURATION_MILLIS,
130                 NON_NEGATIVE_INTEGER_VALIDATOR);
VALIDATORS.put(Global.CALL_AUTO_RETRY, BOOLEAN_VALIDATOR)131         VALIDATORS.put(Global.CALL_AUTO_RETRY, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.DOCK_AUDIO_MEDIA_ENABLED, BOOLEAN_VALIDATOR)132         VALIDATORS.put(Global.DOCK_AUDIO_MEDIA_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS, new DiscreteValueValidator(new String[] {R, R}))133         VALIDATORS.put(
134                 Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS,
135                 new DiscreteValueValidator(new String[] {"0", "1"}));
VALIDATORS.put( Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED, new DiscreteValueValidator(new String[] {R, R}))136         VALIDATORS.put(
137                 Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED,
138                 new DiscreteValueValidator(new String[] {"0", "1"}));
VALIDATORS.put( Global.USER_DISABLED_HDR_FORMATS, new DiscreteValueIntegerListValidator(R, HDR_TYPES))139         VALIDATORS.put(
140                 Global.USER_DISABLED_HDR_FORMATS,
141                 new DiscreteValueIntegerListValidator(",", HDR_TYPES));
VALIDATORS.put( Global.ENCODED_SURROUND_OUTPUT, new DiscreteValueValidator(new String[] {R, R, R, R}))142         VALIDATORS.put(
143                 Global.ENCODED_SURROUND_OUTPUT,
144                 new DiscreteValueValidator(new String[] {"0", "1", "2", "3"}));
VALIDATORS.put( Global.ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS, new DiscreteValueIntegerListValidator(R, SURROUND_SOUND_ENCODING))145         VALIDATORS.put(
146                 Global.ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS,
147                 new DiscreteValueIntegerListValidator(",", SURROUND_SOUND_ENCODING));
VALIDATORS.put( Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL, new InclusiveIntegerRangeValidator(0, 100))148         VALIDATORS.put(
149                 Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL,
150                 new InclusiveIntegerRangeValidator(0, 100));
VALIDATORS.put( Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, new DiscreteValueValidator(new String[] {R, R}))151         VALIDATORS.put(
152                 Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED,
153                 new DiscreteValueValidator(new String[] {"0", "1"}));
VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL, PERCENTAGE_INTEGER_VALIDATOR)154         VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL, PERCENTAGE_INTEGER_VALIDATOR);
VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, PERCENTAGE_INTEGER_VALIDATOR)155         VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, PERCENTAGE_INTEGER_VALIDATOR);
VALIDATORS.put(Global.LOW_POWER_MODE_REMINDER_ENABLED, BOOLEAN_VALIDATOR)156         VALIDATORS.put(Global.LOW_POWER_MODE_REMINDER_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.AUTOMATIC_POWER_SAVE_MODE, new DiscreteValueValidator(new String[] {R, R}))157         VALIDATORS.put(
158                 Global.AUTOMATIC_POWER_SAVE_MODE,
159                 new DiscreteValueValidator(new String[] {"0", "1"}));
VALIDATORS.put( Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD, PERCENTAGE_INTEGER_VALIDATOR)160         VALIDATORS.put(
161                 Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD, PERCENTAGE_INTEGER_VALIDATOR);
VALIDATORS.put(Global.BLUETOOTH_ON, BOOLEAN_VALIDATOR)162         VALIDATORS.put(Global.BLUETOOTH_ON, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.CLOCKWORK_HOME_READY, ANY_STRING_VALIDATOR)163         VALIDATORS.put(Global.CLOCKWORK_HOME_READY, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.ENABLE_TARE, new DiscreteValueValidator(new String[] {R, R, R}))164         VALIDATORS.put(Global.ENABLE_TARE,
165                 new DiscreteValueValidator(new String[] {"0", "1", "2"}));
VALIDATORS.put(Global.TARE_ALARM_MANAGER_CONSTANTS, ANY_STRING_VALIDATOR)166         VALIDATORS.put(Global.TARE_ALARM_MANAGER_CONSTANTS, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.TARE_JOB_SCHEDULER_CONSTANTS, ANY_STRING_VALIDATOR)167         VALIDATORS.put(Global.TARE_JOB_SCHEDULER_CONSTANTS, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.PRIVATE_DNS_MODE, ANY_STRING_VALIDATOR)168         VALIDATORS.put(Global.PRIVATE_DNS_MODE, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.PRIVATE_DNS_SPECIFIER, ANY_STRING_VALIDATOR)169         VALIDATORS.put(Global.PRIVATE_DNS_SPECIFIER, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.SOFT_AP_TIMEOUT_ENABLED, BOOLEAN_VALIDATOR)170         VALIDATORS.put(Global.SOFT_AP_TIMEOUT_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.WIFI_SCAN_THROTTLE_ENABLED, BOOLEAN_VALIDATOR)171         VALIDATORS.put(Global.WIFI_SCAN_THROTTLE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.APP_AUTO_RESTRICTION_ENABLED, BOOLEAN_VALIDATOR)172         VALIDATORS.put(Global.APP_AUTO_RESTRICTION_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.ZEN_DURATION, ANY_INTEGER_VALIDATOR)173         VALIDATORS.put(Global.ZEN_DURATION, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.CHARGING_VIBRATION_ENABLED, BOOLEAN_VALIDATOR)174         VALIDATORS.put(Global.CHARGING_VIBRATION_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED, BOOLEAN_VALIDATOR)175         VALIDATORS.put(Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.REQUIRE_PASSWORD_TO_DECRYPT, BOOLEAN_VALIDATOR)176         VALIDATORS.put(Global.REQUIRE_PASSWORD_TO_DECRYPT, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.DEVICE_DEMO_MODE, BOOLEAN_VALIDATOR)177         VALIDATORS.put(Global.DEVICE_DEMO_MODE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.AWARE_ALLOWED, BOOLEAN_VALIDATOR)178         VALIDATORS.put(Global.AWARE_ALLOWED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 5))179         VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 5));
VALIDATORS.put( Global.POWER_BUTTON_VERY_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1))180         VALIDATORS.put(
181                 Global.POWER_BUTTON_VERY_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1));
VALIDATORS.put(Global.KEY_CHORD_POWER_VOLUME_UP, new InclusiveIntegerRangeValidator(0, 2))182         VALIDATORS.put(Global.KEY_CHORD_POWER_VOLUME_UP, new InclusiveIntegerRangeValidator(0, 2));
VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR)183         VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR)184         VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.DEVELOPMENT_SETTINGS_ENABLED, BOOLEAN_VALIDATOR)185         VALIDATORS.put(Global.DEVELOPMENT_SETTINGS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.NOTIFICATION_FEEDBACK_ENABLED, BOOLEAN_VALIDATOR)186         VALIDATORS.put(Global.NOTIFICATION_FEEDBACK_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.RESTRICTED_NETWORKING_MODE, BOOLEAN_VALIDATOR)187         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))188         VALIDATORS.put(
189                 Global.ONE_HANDED_KEYGUARD_SIDE,
190                 new InclusiveIntegerRangeValidator(
191                         /* first= */Global.ONE_HANDED_KEYGUARD_SIDE_LEFT,
192                         /* last= */Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT));
VALIDATORS.put(Global.DISABLE_WINDOW_BLURS, BOOLEAN_VALIDATOR)193         VALIDATORS.put(Global.DISABLE_WINDOW_BLURS, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.DEVICE_CONFIG_SYNC_DISABLED, BOOLEAN_VALIDATOR)194         VALIDATORS.put(Global.DEVICE_CONFIG_SYNC_DISABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.AUTOMATIC_POWER_SAVE_MODE, ANY_INTEGER_VALIDATOR)195         VALIDATORS.put(Global.AUTOMATIC_POWER_SAVE_MODE, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.ADVANCED_BATTERY_USAGE_AMOUNT, PERCENTAGE_INTEGER_VALIDATOR)196         VALIDATORS.put(Global.ADVANCED_BATTERY_USAGE_AMOUNT, PERCENTAGE_INTEGER_VALIDATOR);
VALIDATORS.put(Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, BOOLEAN_VALIDATOR)197         VALIDATORS.put(Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS_DURATION_MS, NONE_NEGATIVE_LONG_VALIDATOR)198         VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS_DURATION_MS, NONE_NEGATIVE_LONG_VALIDATOR);
VALIDATORS.put(Global.STYLUS_EVER_USED, BOOLEAN_VALIDATOR)199         VALIDATORS.put(Global.STYLUS_EVER_USED, BOOLEAN_VALIDATOR);
200 
VALIDATORS.put(Global.Wearable.HAS_PAY_TOKENS, BOOLEAN_VALIDATOR)201         VALIDATORS.put(Global.Wearable.HAS_PAY_TOKENS, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.GMS_CHECKIN_TIMEOUT_MIN, ANY_INTEGER_VALIDATOR)202         VALIDATORS.put(Global.Wearable.GMS_CHECKIN_TIMEOUT_MIN, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.Wearable.HOTWORD_DETECTION_ENABLED, BOOLEAN_VALIDATOR)203         VALIDATORS.put(Global.Wearable.HOTWORD_DETECTION_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.SMART_REPLIES_ENABLED, BOOLEAN_VALIDATOR)204         VALIDATORS.put(Global.Wearable.SMART_REPLIES_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.OBTAIN_PAIRED_DEVICE_LOCATION, BOOLEAN_VALIDATOR)205         VALIDATORS.put(Global.Wearable.OBTAIN_PAIRED_DEVICE_LOCATION, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.Wearable.PHONE_PLAY_STORE_AVAILABILITY, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.PHONE_PLAY_STORE_AVAILABLE), String.valueOf(Global.Wearable.PHONE_PLAY_STORE_UNAVAILABLE), String.valueOf(Global.Wearable.PHONE_PLAY_STORE_AVAILABILITY_UNKNOWN) }))206         VALIDATORS.put(
207                 Global.Wearable.PHONE_PLAY_STORE_AVAILABILITY,
208                 new DiscreteValueValidator(
209                         new String[] {
210                             String.valueOf(Global.Wearable.PHONE_PLAY_STORE_AVAILABLE),
211                             String.valueOf(Global.Wearable.PHONE_PLAY_STORE_UNAVAILABLE),
212                             String.valueOf(Global.Wearable.PHONE_PLAY_STORE_AVAILABILITY_UNKNOWN)
213                         }));
VALIDATORS.put( Global.Wearable.BUG_REPORT, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.BUG_REPORT_ENABLED), String.valueOf(Global.Wearable.BUG_REPORT_DISABLED) }))214         VALIDATORS.put(
215                 Global.Wearable.BUG_REPORT,
216                 new DiscreteValueValidator(
217                         new String[] {
218                             String.valueOf(Global.Wearable.BUG_REPORT_ENABLED),
219                             String.valueOf(Global.Wearable.BUG_REPORT_DISABLED)
220                         }));
VALIDATORS.put(Global.Wearable.SMART_ILLUMINATE_ENABLED, BOOLEAN_VALIDATOR)221         VALIDATORS.put(Global.Wearable.SMART_ILLUMINATE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.Wearable.CLOCKWORK_AUTO_TIME, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.SYNC_TIME_FROM_PHONE), String.valueOf(Global.Wearable.SYNC_TIME_FROM_NETWORK), String.valueOf(Global.Wearable.AUTO_TIME_OFF), String.valueOf(Global.Wearable.INVALID_AUTO_TIME_STATE) }))222         VALIDATORS.put(
223                 Global.Wearable.CLOCKWORK_AUTO_TIME,
224                 new DiscreteValueValidator(
225                         new String[] {
226                             String.valueOf(Global.Wearable.SYNC_TIME_FROM_PHONE),
227                             String.valueOf(Global.Wearable.SYNC_TIME_FROM_NETWORK),
228                             String.valueOf(Global.Wearable.AUTO_TIME_OFF),
229                             String.valueOf(Global.Wearable.INVALID_AUTO_TIME_STATE)
230                         }));
VALIDATORS.put( Global.Wearable.CLOCKWORK_AUTO_TIME_ZONE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.SYNC_TIME_ZONE_FROM_PHONE), String.valueOf(Global.Wearable.SYNC_TIME_ZONE_FROM_NETWORK), String.valueOf(Global.Wearable.AUTO_TIME_ZONE_OFF), String.valueOf(Global.Wearable.INVALID_AUTO_TIME_ZONE_STATE) }))231         VALIDATORS.put(
232                 Global.Wearable.CLOCKWORK_AUTO_TIME_ZONE,
233                 new DiscreteValueValidator(
234                         new String[] {
235                             String.valueOf(Global.Wearable.SYNC_TIME_ZONE_FROM_PHONE),
236                             String.valueOf(Global.Wearable.SYNC_TIME_ZONE_FROM_NETWORK),
237                             String.valueOf(Global.Wearable.AUTO_TIME_ZONE_OFF),
238                             String.valueOf(Global.Wearable.INVALID_AUTO_TIME_ZONE_STATE)
239                         }));
VALIDATORS.put(Global.Wearable.CLOCKWORK_24HR_TIME, BOOLEAN_VALIDATOR)240         VALIDATORS.put(Global.Wearable.CLOCKWORK_24HR_TIME, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AUTO_WIFI, BOOLEAN_VALIDATOR)241         VALIDATORS.put(Global.Wearable.AUTO_WIFI, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.WIFI_POWER_SAVE, ANY_INTEGER_VALIDATOR)242         VALIDATORS.put(Global.Wearable.WIFI_POWER_SAVE, ANY_INTEGER_VALIDATOR);
VALIDATORS.put( Global.Wearable.ALT_BYPASS_WIFI_REQUIREMENT_TIME_MILLIS, ANY_INTEGER_VALIDATOR)243         VALIDATORS.put(
244                 Global.Wearable.ALT_BYPASS_WIFI_REQUIREMENT_TIME_MILLIS,
245                 ANY_INTEGER_VALIDATOR);
VALIDATORS.put( Global.Wearable.SETUP_SKIPPED, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.SETUP_SKIPPED_YES), String.valueOf(Global.Wearable.SETUP_SKIPPED_NO), String.valueOf(Global.Wearable.SETUP_SKIPPED_UNKNOWN) }))246         VALIDATORS.put(
247                 Global.Wearable.SETUP_SKIPPED,
248                 new DiscreteValueValidator(
249                         new String[] {
250                             String.valueOf(Global.Wearable.SETUP_SKIPPED_YES),
251                             String.valueOf(Global.Wearable.SETUP_SKIPPED_NO),
252                             String.valueOf(Global.Wearable.SETUP_SKIPPED_UNKNOWN)
253                         }));
VALIDATORS.put( Global.Wearable.LAST_CALL_FORWARD_ACTION, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.CALL_FORWARD_ACTION_ON), String.valueOf(Global.Wearable.CALL_FORWARD_ACTION_OFF), String.valueOf(Global.Wearable.CALL_FORWARD_NO_LAST_ACTION) }))254         VALIDATORS.put(
255                 Global.Wearable.LAST_CALL_FORWARD_ACTION,
256                 new DiscreteValueValidator(
257                         new String[] {
258                             String.valueOf(Global.Wearable.CALL_FORWARD_ACTION_ON),
259                             String.valueOf(Global.Wearable.CALL_FORWARD_ACTION_OFF),
260                             String.valueOf(Global.Wearable.CALL_FORWARD_NO_LAST_ACTION)
261                         }));
VALIDATORS.put( Global.Wearable.STEM_1_TYPE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.STEM_TYPE_UNKNOWN), String.valueOf(Global.Wearable.STEM_TYPE_APP_LAUNCH), String.valueOf(Global.Wearable.STEM_TYPE_CONTACT_LAUNCH) }))262         VALIDATORS.put(
263                 Global.Wearable.STEM_1_TYPE,
264                 new DiscreteValueValidator(
265                         new String[] {
266                             String.valueOf(Global.Wearable.STEM_TYPE_UNKNOWN),
267                             String.valueOf(Global.Wearable.STEM_TYPE_APP_LAUNCH),
268                             String.valueOf(Global.Wearable.STEM_TYPE_CONTACT_LAUNCH)
269                         }));
VALIDATORS.put( Global.Wearable.STEM_2_TYPE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.STEM_TYPE_UNKNOWN), String.valueOf(Global.Wearable.STEM_TYPE_APP_LAUNCH), String.valueOf(Global.Wearable.STEM_TYPE_CONTACT_LAUNCH) }))270         VALIDATORS.put(
271                 Global.Wearable.STEM_2_TYPE,
272                 new DiscreteValueValidator(
273                         new String[] {
274                             String.valueOf(Global.Wearable.STEM_TYPE_UNKNOWN),
275                             String.valueOf(Global.Wearable.STEM_TYPE_APP_LAUNCH),
276                             String.valueOf(Global.Wearable.STEM_TYPE_CONTACT_LAUNCH)
277                         }));
VALIDATORS.put( Global.Wearable.STEM_3_TYPE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.STEM_TYPE_UNKNOWN), String.valueOf(Global.Wearable.STEM_TYPE_APP_LAUNCH), String.valueOf(Global.Wearable.STEM_TYPE_CONTACT_LAUNCH) }))278         VALIDATORS.put(
279                 Global.Wearable.STEM_3_TYPE,
280                 new DiscreteValueValidator(
281                         new String[] {
282                             String.valueOf(Global.Wearable.STEM_TYPE_UNKNOWN),
283                             String.valueOf(Global.Wearable.STEM_TYPE_APP_LAUNCH),
284                             String.valueOf(Global.Wearable.STEM_TYPE_CONTACT_LAUNCH)
285                         }));
VALIDATORS.put(Global.Wearable.MUTE_WHEN_OFF_BODY_ENABLED, BOOLEAN_VALIDATOR)286         VALIDATORS.put(Global.Wearable.MUTE_WHEN_OFF_BODY_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.SIDE_BUTTON, BOOLEAN_VALIDATOR)287         VALIDATORS.put(Global.Wearable.SIDE_BUTTON, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.ANDROID_WEAR_VERSION, ANY_INTEGER_VALIDATOR)288         VALIDATORS.put(Global.Wearable.ANDROID_WEAR_VERSION, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.Wearable.SYSTEM_CAPABILITIES, ANY_INTEGER_VALIDATOR)289         VALIDATORS.put(Global.Wearable.SYSTEM_CAPABILITIES, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.Wearable.SYSTEM_EDITION, ANY_INTEGER_VALIDATOR)290         VALIDATORS.put(Global.Wearable.SYSTEM_EDITION, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.Wearable.WEAR_PLATFORM_MR_NUMBER, ANY_INTEGER_VALIDATOR)291         VALIDATORS.put(Global.Wearable.WEAR_PLATFORM_MR_NUMBER, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.Wearable.MOBILE_SIGNAL_DETECTOR, BOOLEAN_VALIDATOR)292         VALIDATORS.put(Global.Wearable.MOBILE_SIGNAL_DETECTOR, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_ENABLED, BOOLEAN_VALIDATOR)293         VALIDATORS.put(Global.Wearable.AMBIENT_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_TILT_TO_WAKE, BOOLEAN_VALIDATOR)294         VALIDATORS.put(Global.Wearable.AMBIENT_TILT_TO_WAKE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_LOW_BIT_ENABLED_DEV, BOOLEAN_VALIDATOR)295         VALIDATORS.put(Global.Wearable.AMBIENT_LOW_BIT_ENABLED_DEV, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_TOUCH_TO_WAKE, BOOLEAN_VALIDATOR)296         VALIDATORS.put(Global.Wearable.AMBIENT_TOUCH_TO_WAKE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.DECOMPOSABLE_WATCHFACE, BOOLEAN_VALIDATOR)297         VALIDATORS.put(Global.Wearable.DECOMPOSABLE_WATCHFACE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_FORCE_WHEN_DOCKED, BOOLEAN_VALIDATOR)298         VALIDATORS.put(Global.Wearable.AMBIENT_FORCE_WHEN_DOCKED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_LOW_BIT_ENABLED, BOOLEAN_VALIDATOR)299         VALIDATORS.put(Global.Wearable.AMBIENT_LOW_BIT_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_PLUGGED_TIMEOUT_MIN, ANY_INTEGER_VALIDATOR)300         VALIDATORS.put(Global.Wearable.AMBIENT_PLUGGED_TIMEOUT_MIN, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.Wearable.AMBIENT_TILT_TO_BRIGHT, BOOLEAN_VALIDATOR)301         VALIDATORS.put(Global.Wearable.AMBIENT_TILT_TO_BRIGHT, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.Wearable.LOCK_SCREEN_STATE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.LOCK_SCREEN_STATE_NONE), String.valueOf(Global.Wearable.LOCK_SCREEN_STATE_PIN), String.valueOf(Global.Wearable.LOCK_SCREEN_STATE_PATTERN) }))302         VALIDATORS.put(
303                 Global.Wearable.LOCK_SCREEN_STATE,
304                 new DiscreteValueValidator(
305                         new String[] {
306                                 String.valueOf(Global.Wearable.LOCK_SCREEN_STATE_NONE),
307                                 String.valueOf(Global.Wearable.LOCK_SCREEN_STATE_PIN),
308                                 String.valueOf(Global.Wearable.LOCK_SCREEN_STATE_PATTERN)
309                         }));
VALIDATORS.put(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_ENABLED, BOOLEAN_VALIDATOR)310         VALIDATORS.put(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_TYPE, new DiscreteValueValidator(new String[]{ String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_TYPE_DIGIT), String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_TYPE_TERSE)}))311         VALIDATORS.put(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_TYPE,
312                 new DiscreteValueValidator(new String[]{
313                         String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_TYPE_DIGIT),
314                         String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_TYPE_TERSE)}));
VALIDATORS.put(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED, new DiscreteValueValidator(new String[]{String.valueOf( Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_SLOW), String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_SLOW), String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_MEDIUM), String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_FAST), String.valueOf( Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_FAST)}))315         VALIDATORS.put(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED,
316                 new DiscreteValueValidator(new String[]{String.valueOf(
317                         Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_SLOW),
318                         String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_SLOW),
319                         String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_MEDIUM),
320                         String.valueOf(Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_FAST),
321                         String.valueOf(
322                                 Global.Wearable.ACCESSIBILITY_VIBRATION_WATCH_SPEED_VERY_FAST)}));
VALIDATORS.put( Global.Wearable.PAIRED_DEVICE_OS_TYPE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.PAIRED_DEVICE_OS_TYPE_UNKNOWN), String.valueOf(Global.Wearable.PAIRED_DEVICE_OS_TYPE_ANDROID), String.valueOf(Global.Wearable.PAIRED_DEVICE_OS_TYPE_IOS) }))323         VALIDATORS.put(
324                 Global.Wearable.PAIRED_DEVICE_OS_TYPE,
325                 new DiscreteValueValidator(
326                         new String[] {
327                             String.valueOf(Global.Wearable.PAIRED_DEVICE_OS_TYPE_UNKNOWN),
328                             String.valueOf(Global.Wearable.PAIRED_DEVICE_OS_TYPE_ANDROID),
329                             String.valueOf(Global.Wearable.PAIRED_DEVICE_OS_TYPE_IOS)
330                         }));
VALIDATORS.put( Global.Wearable.COMPANION_BLE_ROLE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.BLUETOOTH_ROLE_CENTRAL), String.valueOf(Global.Wearable.BLUETOOTH_ROLE_PERIPHERAL) }))331         VALIDATORS.put(
332                 Global.Wearable.COMPANION_BLE_ROLE,
333                 new DiscreteValueValidator(
334                         new String[] {
335                             String.valueOf(Global.Wearable.BLUETOOTH_ROLE_CENTRAL),
336                             String.valueOf(Global.Wearable.BLUETOOTH_ROLE_PERIPHERAL)
337                         }));
VALIDATORS.put( Global.Wearable.USER_HFP_CLIENT_SETTING, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.HFP_CLIENT_UNSET), String.valueOf(Global.Wearable.HFP_CLIENT_ENABLED), String.valueOf(Global.Wearable.HFP_CLIENT_DISABLED) }))338         VALIDATORS.put(
339                 Global.Wearable.USER_HFP_CLIENT_SETTING,
340                 new DiscreteValueValidator(
341                         new String[] {
342                             String.valueOf(Global.Wearable.HFP_CLIENT_UNSET),
343                             String.valueOf(Global.Wearable.HFP_CLIENT_ENABLED),
344                             String.valueOf(Global.Wearable.HFP_CLIENT_DISABLED)
345                         }));
VALIDATORS.put(Global.Wearable.COMPANION_OS_VERSION, ANY_INTEGER_VALIDATOR)346         VALIDATORS.put(Global.Wearable.COMPANION_OS_VERSION, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.Wearable.COMPANION_APP_NAME, ANY_STRING_VALIDATOR)347         VALIDATORS.put(Global.Wearable.COMPANION_APP_NAME, ANY_STRING_VALIDATOR);
VALIDATORS.put(Global.Wearable.ENABLE_ALL_LANGUAGES, BOOLEAN_VALIDATOR)348         VALIDATORS.put(Global.Wearable.ENABLE_ALL_LANGUAGES, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.OEM_SETUP_VERSION, ANY_INTEGER_VALIDATOR)349         VALIDATORS.put(Global.Wearable.OEM_SETUP_VERSION, ANY_INTEGER_VALIDATOR);
VALIDATORS.put( Global.Wearable.OEM_SETUP_COMPLETED_STATUS, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.OEM_SETUP_COMPLETED_FAILURE), String.valueOf(Global.Wearable.OEM_SETUP_COMPLETED_SUCCESS), }))350         VALIDATORS.put(
351                 Global.Wearable.OEM_SETUP_COMPLETED_STATUS,
352                 new DiscreteValueValidator(
353                         new String[] {
354                                 String.valueOf(Global.Wearable.OEM_SETUP_COMPLETED_FAILURE),
355                                 String.valueOf(Global.Wearable.OEM_SETUP_COMPLETED_SUCCESS),
356                         }));
VALIDATORS.put(Global.Wearable.MASTER_GESTURES_ENABLED, BOOLEAN_VALIDATOR)357         VALIDATORS.put(Global.Wearable.MASTER_GESTURES_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.UNGAZE_ENABLED, BOOLEAN_VALIDATOR)358         VALIDATORS.put(Global.Wearable.UNGAZE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.Wearable.BATTERY_SAVER_MODE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_NONE), String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_LIGHT), String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_TRADITIONAL_WATCH), String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_TIME_ONLY), String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_CUSTOM) }))359         VALIDATORS.put(
360                 Global.Wearable.BATTERY_SAVER_MODE,
361                 new DiscreteValueValidator(
362                         new String[] {
363                                 String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_NONE),
364                                 String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_LIGHT),
365                                 String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_TRADITIONAL_WATCH),
366                                 String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_TIME_ONLY),
367                                 String.valueOf(Global.Wearable.BATTERY_SAVER_MODE_CUSTOM)
368                         }));
VALIDATORS.put( Global.Wearable.WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR)369         VALIDATORS.put(
370                 Global.Wearable.WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_MS,
371                 NON_NEGATIVE_INTEGER_VALIDATOR);
VALIDATORS.put( Global.Wearable.WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_SET_BY_USER, BOOLEAN_VALIDATOR)372         VALIDATORS.put(
373                 Global.Wearable.WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_SET_BY_USER,
374                 BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.BURN_IN_PROTECTION_ENABLED, BOOLEAN_VALIDATOR)375         VALIDATORS.put(Global.Wearable.BURN_IN_PROTECTION_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.COMBINED_LOCATION_ENABLED, BOOLEAN_VALIDATOR)376         VALIDATORS.put(Global.Wearable.COMBINED_LOCATION_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.WRIST_ORIENTATION_MODE, new DiscreteValueValidator(new String[] {R, R, R, R}))377         VALIDATORS.put(Global.Wearable.WRIST_ORIENTATION_MODE,
378                        new DiscreteValueValidator(new String[] {"0", "1", "2", "3"}));
VALIDATORS.put(Global.USER_PREFERRED_REFRESH_RATE, NON_NEGATIVE_FLOAT_VALIDATOR)379         VALIDATORS.put(Global.USER_PREFERRED_REFRESH_RATE, NON_NEGATIVE_FLOAT_VALIDATOR);
VALIDATORS.put(Global.USER_PREFERRED_RESOLUTION_HEIGHT, ANY_INTEGER_VALIDATOR)380         VALIDATORS.put(Global.USER_PREFERRED_RESOLUTION_HEIGHT, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.USER_PREFERRED_RESOLUTION_WIDTH, ANY_INTEGER_VALIDATOR)381         VALIDATORS.put(Global.USER_PREFERRED_RESOLUTION_WIDTH, ANY_INTEGER_VALIDATOR);
VALIDATORS.put(Global.HDR_CONVERSION_MODE, new DiscreteValueValidator( new String[] { String.valueOf(HDR_CONVERSION_PASSTHROUGH), String.valueOf(HDR_CONVERSION_SYSTEM), String.valueOf(HDR_CONVERSION_FORCE) }))382         VALIDATORS.put(Global.HDR_CONVERSION_MODE,  new DiscreteValueValidator(
383                 new String[] {
384                         String.valueOf(HDR_CONVERSION_PASSTHROUGH),
385                         String.valueOf(HDR_CONVERSION_SYSTEM),
386                         String.valueOf(HDR_CONVERSION_FORCE)
387                 }));
VALIDATORS.put(Global.HDR_FORCE_CONVERSION_TYPE, new DiscreteValueValidator( new String[] { String.valueOf(HDR_TYPE_INVALID), String.valueOf(HDR_TYPE_DOLBY_VISION), String.valueOf(HDR_TYPE_HDR10), String.valueOf(HDR_TYPE_HLG), String.valueOf(HDR_TYPE_HDR10_PLUS) }))388         VALIDATORS.put(Global.HDR_FORCE_CONVERSION_TYPE, new DiscreteValueValidator(
389                 new String[] {
390                         String.valueOf(HDR_TYPE_INVALID),
391                         String.valueOf(HDR_TYPE_DOLBY_VISION),
392                         String.valueOf(HDR_TYPE_HDR10),
393                         String.valueOf(HDR_TYPE_HLG),
394                         String.valueOf(HDR_TYPE_HDR10_PLUS)
395                 }));
VALIDATORS.put(Global.RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO_ENABLED, new DiscreteValueValidator(new String[]{R, R}))396         VALIDATORS.put(Global.RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO_ENABLED,
397                        new DiscreteValueValidator(new String[]{"0", "1"}));
VALIDATORS.put(Global.Wearable.WET_MODE_ON, BOOLEAN_VALIDATOR)398         VALIDATORS.put(Global.Wearable.WET_MODE_ON, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.COOLDOWN_MODE_ON, BOOLEAN_VALIDATOR)399         VALIDATORS.put(Global.Wearable.COOLDOWN_MODE_ON, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.Wearable.GESTURE_TOUCH_AND_HOLD_WATCH_FACE_ENABLED, BOOLEAN_VALIDATOR)400         VALIDATORS.put(
401                 Global.Wearable.GESTURE_TOUCH_AND_HOLD_WATCH_FACE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.RSB_WAKE_ENABLED, BOOLEAN_VALIDATOR)402         VALIDATORS.put(Global.Wearable.RSB_WAKE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.SCREEN_UNLOCK_SOUND_ENABLED, BOOLEAN_VALIDATOR)403         VALIDATORS.put(Global.Wearable.SCREEN_UNLOCK_SOUND_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR)404         VALIDATORS.put(Global.Wearable.CHARGING_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.BEDTIME_MODE, BOOLEAN_VALIDATOR)405         VALIDATORS.put(Global.Wearable.BEDTIME_MODE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.BEDTIME_HARD_MODE, BOOLEAN_VALIDATOR)406         VALIDATORS.put(Global.Wearable.BEDTIME_HARD_MODE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.DYNAMIC_COLOR_THEME_ENABLED, BOOLEAN_VALIDATOR)407         VALIDATORS.put(Global.Wearable.DYNAMIC_COLOR_THEME_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.SCREENSHOT_ENABLED, BOOLEAN_VALIDATOR)408 	VALIDATORS.put(Global.Wearable.SCREENSHOT_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.UPGRADE_DATA_MIGRATION_STATUS, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.UPGRADE_DATA_MIGRATION_NOT_NEEDED), String.valueOf(Global.Wearable.UPGRADE_DATA_MIGRATION_PENDING), String.valueOf(Global.Wearable.UPGRADE_DATA_MIGRATION_DONE) }))409         VALIDATORS.put(Global.Wearable.UPGRADE_DATA_MIGRATION_STATUS,
410                        new DiscreteValueValidator(
411                         new String[] {
412                             String.valueOf(Global.Wearable.UPGRADE_DATA_MIGRATION_NOT_NEEDED),
413                             String.valueOf(Global.Wearable.UPGRADE_DATA_MIGRATION_PENDING),
414                             String.valueOf(Global.Wearable.UPGRADE_DATA_MIGRATION_DONE)
415                         }));
VALIDATORS.put(Global.Wearable.DISABLE_AOD_WHILE_PLUGGED, BOOLEAN_VALIDATOR)416         VALIDATORS.put(Global.Wearable.DISABLE_AOD_WHILE_PLUGGED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.NETWORK_LOCATION_OPT_IN, BOOLEAN_VALIDATOR)417         VALIDATORS.put(Global.Wearable.NETWORK_LOCATION_OPT_IN, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.PHONE_SWITCHING_STATUS, new InclusiveIntegerRangeValidator( Global.Wearable.PHONE_SWITCHING_STATUS_NOT_STARTED, Global.Wearable.PHONE_SWITCHING_STATUS_IN_PROGRESS_MIGRATION_SUCCESS))418         VALIDATORS.put(Global.Wearable.PHONE_SWITCHING_STATUS,
419                 new InclusiveIntegerRangeValidator(
420                         Global.Wearable.PHONE_SWITCHING_STATUS_NOT_STARTED,
421                         Global.Wearable.PHONE_SWITCHING_STATUS_IN_PROGRESS_MIGRATION_SUCCESS));
VALIDATORS.put(Global.Wearable.REDUCE_MOTION, BOOLEAN_VALIDATOR)422         VALIDATORS.put(Global.Wearable.REDUCE_MOTION, BOOLEAN_VALIDATOR);
VALIDATORS.put(Global.Wearable.RTL_SWIPE_TO_DISMISS_ENABLED_DEV, BOOLEAN_VALIDATOR)423         VALIDATORS.put(Global.Wearable.RTL_SWIPE_TO_DISMISS_ENABLED_DEV, BOOLEAN_VALIDATOR);
VALIDATORS.put( Global.Wearable.TETHER_CONFIG_STATE, new DiscreteValueValidator( new String[] { String.valueOf(Global.Wearable.TETHERED_CONFIG_UNKNOWN), String.valueOf(Global.Wearable.TETHERED_CONFIG_STANDALONE), String.valueOf(Global.Wearable.TETHERED_CONFIG_TETHERED) }))424         VALIDATORS.put(
425                 Global.Wearable.TETHER_CONFIG_STATE,
426                 new DiscreteValueValidator(
427                         new String[] {
428                                 String.valueOf(Global.Wearable.TETHERED_CONFIG_UNKNOWN),
429                                 String.valueOf(Global.Wearable.TETHERED_CONFIG_STANDALONE),
430                                 String.valueOf(Global.Wearable.TETHERED_CONFIG_TETHERED)
431                         }));
VALIDATORS.put(Global.Wearable.PHONE_SWITCHING_SUPPORTED, BOOLEAN_VALIDATOR)432         VALIDATORS.put(Global.Wearable.PHONE_SWITCHING_SUPPORTED, BOOLEAN_VALIDATOR);
433     }
434 }
435