blob: 94ab0f11927de147db45a151db620994fa911080 [file] [log] [blame]
Al Sutton91f89d02019-08-16 12:56:57 +01001/*
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
17package android.provider.settings.validators;
18
19import static android.provider.settings.validators.SettingsValidators.BOOLEAN_VALIDATOR;
20import static android.provider.settings.validators.SettingsValidators.COMPONENT_NAME_VALIDATOR;
21import static android.provider.settings.validators.SettingsValidators.DATE_FORMAT_VALIDATOR;
22import static android.provider.settings.validators.SettingsValidators.LENIENT_IP_ADDRESS_VALIDATOR;
23import static android.provider.settings.validators.SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR;
24import static android.provider.settings.validators.SettingsValidators.URI_VALIDATOR;
25import static android.provider.settings.validators.SettingsValidators.VIBRATION_INTENSITY_VALIDATOR;
26
27import android.annotation.Nullable;
28import android.annotation.UnsupportedAppUsage;
29import android.content.ComponentName;
30import android.hardware.display.ColorDisplayManager;
31import android.os.BatteryManager;
32import android.provider.Settings.System;
33import android.util.ArrayMap;
34
35import java.util.Map;
36
37/**
38 * Validators for System settings
39 */
40public class SystemSettingsValidators {
41 /**
42 * These are all public system settings
43 *
44 * <p>All settings in {@link System.SETTINGS_TO_BACKUP} array *must* have a non-null validator,
45 * otherwise they won't be restored.
46 */
47 @UnsupportedAppUsage
48 public static final Map<String, Validator> VALIDATORS = new ArrayMap<>();
49
50 static {
51 VALIDATORS.put(
52 System.STAY_ON_WHILE_PLUGGED_IN,
53 value -> {
54 try {
55 int val = Integer.parseInt(value);
56 return (val == 0)
57 || (val == BatteryManager.BATTERY_PLUGGED_AC)
58 || (val == BatteryManager.BATTERY_PLUGGED_USB)
59 || (val == BatteryManager.BATTERY_PLUGGED_WIRELESS)
60 || (val
61 == (BatteryManager.BATTERY_PLUGGED_AC
62 | BatteryManager.BATTERY_PLUGGED_USB))
63 || (val
64 == (BatteryManager.BATTERY_PLUGGED_AC
65 | BatteryManager.BATTERY_PLUGGED_WIRELESS))
66 || (val
67 == (BatteryManager.BATTERY_PLUGGED_USB
68 | BatteryManager.BATTERY_PLUGGED_WIRELESS))
69 || (val
70 == (BatteryManager.BATTERY_PLUGGED_AC
71 | BatteryManager.BATTERY_PLUGGED_USB
72 | BatteryManager.BATTERY_PLUGGED_WIRELESS));
73 } catch (NumberFormatException e) {
74 return false;
75 }
76 });
77 VALIDATORS.put(System.END_BUTTON_BEHAVIOR, new InclusiveIntegerRangeValidator(0, 3));
78 VALIDATORS.put(System.WIFI_USE_STATIC_IP, BOOLEAN_VALIDATOR);
79 VALIDATORS.put(System.BLUETOOTH_DISCOVERABILITY, new InclusiveIntegerRangeValidator(0, 2));
80 VALIDATORS.put(System.BLUETOOTH_DISCOVERABILITY_TIMEOUT, NON_NEGATIVE_INTEGER_VALIDATOR);
81 VALIDATORS.put(
82 System.NEXT_ALARM_FORMATTED,
83 new Validator() {
84 private static final int MAX_LENGTH = 1000;
85
86 @Override
87 public boolean validate(String value) {
88 // TODO: No idea what the correct format is.
89 return value == null || value.length() < MAX_LENGTH;
90 }
91 });
92 VALIDATORS.put(
93 System.FONT_SCALE,
94 value -> {
95 try {
96 return Float.parseFloat(value) >= 0;
97 } catch (NumberFormatException | NullPointerException e) {
98 return false;
99 }
100 });
101 VALIDATORS.put(System.DIM_SCREEN, BOOLEAN_VALIDATOR);
102 VALIDATORS.put(
103 System.DISPLAY_COLOR_MODE,
104 new Validator() {
105 @Override
106 public boolean validate(@Nullable String value) {
107 // Assume the actual validation that this device can properly handle this
108 // kind of
109 // color mode further down in ColorDisplayManager / ColorDisplayService.
110 try {
111 final int setting = Integer.parseInt(value);
112 final boolean isInFrameworkRange =
113 setting >= ColorDisplayManager.COLOR_MODE_NATURAL
114 && setting <= ColorDisplayManager.COLOR_MODE_AUTOMATIC;
115 final boolean isInVendorRange =
116 setting >= ColorDisplayManager.VENDOR_COLOR_MODE_RANGE_MIN
117 && setting
118 <= ColorDisplayManager
119 .VENDOR_COLOR_MODE_RANGE_MAX;
120 return isInFrameworkRange || isInVendorRange;
121 } catch (NumberFormatException | NullPointerException e) {
122 return false;
123 }
124 }
125 });
126 VALIDATORS.put(System.SCREEN_OFF_TIMEOUT, NON_NEGATIVE_INTEGER_VALIDATOR);
127 VALIDATORS.put(System.SCREEN_BRIGHTNESS_FOR_VR, new InclusiveIntegerRangeValidator(0, 255));
128 VALIDATORS.put(System.SCREEN_BRIGHTNESS_MODE, BOOLEAN_VALIDATOR);
129 VALIDATORS.put(System.ADAPTIVE_SLEEP, BOOLEAN_VALIDATOR);
130 VALIDATORS.put(System.MODE_RINGER_STREAMS_AFFECTED, NON_NEGATIVE_INTEGER_VALIDATOR);
131 VALIDATORS.put(System.MUTE_STREAMS_AFFECTED, NON_NEGATIVE_INTEGER_VALIDATOR);
132 VALIDATORS.put(System.VIBRATE_ON, BOOLEAN_VALIDATOR);
133 VALIDATORS.put(System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_VALIDATOR);
134 VALIDATORS.put(System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_VALIDATOR);
135 VALIDATORS.put(System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_VALIDATOR);
136 VALIDATORS.put(System.RINGTONE, URI_VALIDATOR);
137 VALIDATORS.put(System.NOTIFICATION_SOUND, URI_VALIDATOR);
138 VALIDATORS.put(System.ALARM_ALERT, URI_VALIDATOR);
139 VALIDATORS.put(System.TEXT_AUTO_REPLACE, BOOLEAN_VALIDATOR);
140 VALIDATORS.put(System.TEXT_AUTO_CAPS, BOOLEAN_VALIDATOR);
141 VALIDATORS.put(System.TEXT_AUTO_PUNCTUATE, BOOLEAN_VALIDATOR);
142 VALIDATORS.put(System.TEXT_SHOW_PASSWORD, BOOLEAN_VALIDATOR);
143 VALIDATORS.put(System.AUTO_TIME, BOOLEAN_VALIDATOR);
144 VALIDATORS.put(System.AUTO_TIME_ZONE, BOOLEAN_VALIDATOR);
145 VALIDATORS.put(System.SHOW_GTALK_SERVICE_STATUS, BOOLEAN_VALIDATOR);
146 VALIDATORS.put(
147 System.WALLPAPER_ACTIVITY,
148 new Validator() {
149 private static final int MAX_LENGTH = 1000;
150
151 @Override
152 public boolean validate(String value) {
153 if (value != null && value.length() > MAX_LENGTH) {
154 return false;
155 }
156 return ComponentName.unflattenFromString(value) != null;
157 }
158 });
159 VALIDATORS.put(
160 System.TIME_12_24, new DiscreteValueValidator(new String[] {"12", "24", null}));
161 VALIDATORS.put(System.DATE_FORMAT, DATE_FORMAT_VALIDATOR);
162 VALIDATORS.put(System.SETUP_WIZARD_HAS_RUN, BOOLEAN_VALIDATOR);
163 VALIDATORS.put(System.ACCELEROMETER_ROTATION, BOOLEAN_VALIDATOR);
164 VALIDATORS.put(System.USER_ROTATION, new InclusiveIntegerRangeValidator(0, 3));
165 VALIDATORS.put(System.DTMF_TONE_WHEN_DIALING, BOOLEAN_VALIDATOR);
166 VALIDATORS.put(System.SOUND_EFFECTS_ENABLED, BOOLEAN_VALIDATOR);
167 VALIDATORS.put(System.HAPTIC_FEEDBACK_ENABLED, BOOLEAN_VALIDATOR);
168 VALIDATORS.put(System.POWER_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
169 VALIDATORS.put(System.DOCK_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
170 VALIDATORS.put(System.SHOW_WEB_SUGGESTIONS, BOOLEAN_VALIDATOR);
171 VALIDATORS.put(System.WIFI_USE_STATIC_IP, BOOLEAN_VALIDATOR);
172 VALIDATORS.put(System.ADVANCED_SETTINGS, BOOLEAN_VALIDATOR);
173 VALIDATORS.put(System.SCREEN_AUTO_BRIGHTNESS_ADJ, new InclusiveFloatRangeValidator(-1, 1));
174 VALIDATORS.put(System.VIBRATE_INPUT_DEVICES, BOOLEAN_VALIDATOR);
175 VALIDATORS.put(System.MASTER_MONO, BOOLEAN_VALIDATOR);
176 VALIDATORS.put(System.MASTER_BALANCE, new InclusiveFloatRangeValidator(-1.f, 1.f));
177 VALIDATORS.put(System.NOTIFICATIONS_USE_RING_VOLUME, BOOLEAN_VALIDATOR);
178 VALIDATORS.put(System.VIBRATE_IN_SILENT, BOOLEAN_VALIDATOR);
179 VALIDATORS.put(System.MEDIA_BUTTON_RECEIVER, COMPONENT_NAME_VALIDATOR);
180 VALIDATORS.put(System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, BOOLEAN_VALIDATOR);
181 VALIDATORS.put(System.VIBRATE_WHEN_RINGING, BOOLEAN_VALIDATOR);
182 VALIDATORS.put(System.DTMF_TONE_TYPE_WHEN_DIALING, BOOLEAN_VALIDATOR);
183 VALIDATORS.put(System.HEARING_AID, BOOLEAN_VALIDATOR);
184 VALIDATORS.put(System.TTY_MODE, new InclusiveIntegerRangeValidator(0, 3));
185 VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR);
186 VALIDATORS.put(System.POINTER_LOCATION, BOOLEAN_VALIDATOR);
187 VALIDATORS.put(System.SHOW_TOUCHES, BOOLEAN_VALIDATOR);
188 VALIDATORS.put(System.WINDOW_ORIENTATION_LISTENER_LOG, BOOLEAN_VALIDATOR);
189 VALIDATORS.put(System.LOCKSCREEN_SOUNDS_ENABLED, BOOLEAN_VALIDATOR);
190 VALIDATORS.put(System.LOCKSCREEN_DISABLED, BOOLEAN_VALIDATOR);
191 VALIDATORS.put(System.SIP_RECEIVE_CALLS, BOOLEAN_VALIDATOR);
192 VALIDATORS.put(
193 System.SIP_CALL_OPTIONS,
194 new DiscreteValueValidator(new String[] {"SIP_ALWAYS", "SIP_ADDRESS_ONLY"}));
195 VALIDATORS.put(System.SIP_ALWAYS, BOOLEAN_VALIDATOR);
196 VALIDATORS.put(System.SIP_ADDRESS_ONLY, BOOLEAN_VALIDATOR);
197 VALIDATORS.put(System.SIP_ASK_ME_EACH_TIME, BOOLEAN_VALIDATOR);
198 VALIDATORS.put(System.POINTER_SPEED, new InclusiveFloatRangeValidator(-7, 7));
199 VALIDATORS.put(System.LOCK_TO_APP_ENABLED, BOOLEAN_VALIDATOR);
200 VALIDATORS.put(
201 System.EGG_MODE,
202 new Validator() {
203 @Override
204 public boolean validate(@Nullable String value) {
205 try {
206 return Long.parseLong(value) >= 0;
207 } catch (NumberFormatException e) {
208 return false;
209 }
210 }
211 });
212 VALIDATORS.put(System.WIFI_STATIC_IP, LENIENT_IP_ADDRESS_VALIDATOR);
213 VALIDATORS.put(System.WIFI_STATIC_GATEWAY, LENIENT_IP_ADDRESS_VALIDATOR);
214 VALIDATORS.put(System.WIFI_STATIC_NETMASK, LENIENT_IP_ADDRESS_VALIDATOR);
215 VALIDATORS.put(System.WIFI_STATIC_DNS1, LENIENT_IP_ADDRESS_VALIDATOR);
216 VALIDATORS.put(System.WIFI_STATIC_DNS2, LENIENT_IP_ADDRESS_VALIDATOR);
217 VALIDATORS.put(System.SHOW_BATTERY_PERCENT, BOOLEAN_VALIDATOR);
218 VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR);
219 }
220}