blob: d9b1e3a86b9987cafcaa153d9dde02bdf5870d78 [file] [log] [blame]
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +00001/*
2 * Copyright (C) 2017 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;
18
19import static com.google.android.collect.Sets.newHashSet;
Julia Reynoldsb852e562017-06-06 16:14:18 -040020
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000021import static org.hamcrest.MatcherAssert.assertThat;
22import static org.hamcrest.Matchers.empty;
23import static org.hamcrest.Matchers.is;
Julia Reynoldsb852e562017-06-06 16:14:18 -040024
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000025import static java.lang.reflect.Modifier.isFinal;
26import static java.lang.reflect.Modifier.isPublic;
27import static java.lang.reflect.Modifier.isStatic;
28
Bryan Mawhinneybdee0d42017-11-24 16:12:08 +000029import android.platform.test.annotations.Presubmit;
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +000030import android.support.test.filters.SmallTest;
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000031import android.support.test.runner.AndroidJUnit4;
32
Julia Reynoldsb852e562017-06-06 16:14:18 -040033import org.junit.Test;
34import org.junit.runner.RunWith;
35
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000036import java.lang.reflect.Field;
37import java.util.HashSet;
38import java.util.Set;
39
Bryan Mawhinney2c5f95a2017-02-21 10:58:23 +000040/** Tests that ensure appropriate settings are backed up. */
Bryan Mawhinneybdee0d42017-11-24 16:12:08 +000041@Presubmit
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000042@RunWith(AndroidJUnit4.class)
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +000043@SmallTest
Bryan Mawhinney2c5f95a2017-02-21 10:58:23 +000044public class SettingsBackupTest {
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000045
46 /**
47 * The following blacklists contain settings that should *not* be backed up and restored to
48 * another device. As a general rule, anything that is not user configurable should be
49 * blacklisted (and conversely, things that *are* user configurable *should* be backed up)
50 */
51 private static final Set<String> BACKUP_BLACKLISTED_SYSTEM_SETTINGS =
52 newHashSet(
53 Settings.System.ADVANCED_SETTINGS, // candidate for backup?
54 Settings.System.ALARM_ALERT, // backup candidate?
55 Settings.System.ALARM_ALERT_CACHE, // internal cache
56 Settings.System.APPEND_FOR_LAST_AUDIBLE, // suffix deprecated since API 2
Bryan Mawhinneyc41f2a42017-11-24 13:44:48 +000057 Settings.System.DISPLAY_COLOR_MODE, // bug?
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000058 Settings.System.EGG_MODE, // I am the lolrus
59 Settings.System.END_BUTTON_BEHAVIOR, // bug?
60 Settings.System
61 .HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, // candidate for backup?
62 Settings.System.LOCKSCREEN_DISABLED, // ?
63 Settings.System.MEDIA_BUTTON_RECEIVER, // candidate for backup?
64 Settings.System.MUTE_STREAMS_AFFECTED, // candidate for backup?
65 Settings.System.NOTIFICATION_LIGHT_PULSE, // candidate for backup?
66 Settings.System.NOTIFICATION_SOUND_CACHE, // internal cache
67 Settings.System.POINTER_LOCATION, // backup candidate?
68 Settings.System.RINGTONE_CACHE, // internal cache
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000069 Settings.System.SETUP_WIZARD_HAS_RUN, // Only used by SuW
70 Settings.System.SHOW_GTALK_SERVICE_STATUS, // candidate for backup?
71 Settings.System.SHOW_TOUCHES, // bug?
72 Settings.System.SIP_ADDRESS_ONLY, // value, not a setting
73 Settings.System.SIP_ALWAYS, // value, not a setting
74 Settings.System.SYSTEM_LOCALES, // bug?
75 Settings.System.USER_ROTATION, // backup candidate?
76 Settings.System.VIBRATE_IN_SILENT, // deprecated?
77 Settings.System.VIBRATE_ON, // candidate for backup?
Michal Karpinski034a83f2017-04-26 19:25:25 +010078 Settings.System.VOLUME_ACCESSIBILITY, // used internally, changing value will
79 // not change volume
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000080 Settings.System.VOLUME_ALARM, // deprecated since API 2?
81 Settings.System.VOLUME_BLUETOOTH_SCO, // deprecated since API 2?
82 Settings.System.VOLUME_MASTER, // candidate for backup?
83 Settings.System.VOLUME_MUSIC, // deprecated since API 2?
84 Settings.System.VOLUME_NOTIFICATION, // deprecated since API 2?
85 Settings.System.VOLUME_RING, // deprecated since API 2?
86 Settings.System.VOLUME_SYSTEM, // deprecated since API 2?
87 Settings.System.VOLUME_VOICE, // deprecated since API 2?
88 Settings.System.WHEN_TO_MAKE_WIFI_CALLS, // bug?
89 Settings.System.WINDOW_ORIENTATION_LISTENER_LOG // used for debugging only
90 );
91
92 private static final Set<String> BACKUP_BLACKLISTED_GLOBAL_SETTINGS =
93 newHashSet(
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +000094 Settings.Global.ACTIVITY_MANAGER_CONSTANTS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +000095 Settings.Global.ADB_ENABLED,
96 Settings.Global.ADD_USERS_WHEN_LOCKED,
97 Settings.Global.AIRPLANE_MODE_ON,
98 Settings.Global.AIRPLANE_MODE_RADIOS,
99 Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
100 Settings.Global.ALARM_MANAGER_CONSTANTS,
101 Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED,
102 Settings.Global.ALWAYS_FINISH_ACTIVITIES,
jackqdyulei8443dd02017-08-24 16:14:34 -0700103 Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000104 Settings.Global.ANIMATOR_DURATION_SCALE,
Bryan Mawhinney99d89802017-06-28 16:22:39 +0100105 Settings.Global.ANOMALY_DETECTION_CONSTANTS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000106 Settings.Global.APN_DB_UPDATE_CONTENT_URL,
107 Settings.Global.APN_DB_UPDATE_METADATA_URL,
108 Settings.Global.APP_IDLE_CONSTANTS,
Amith Yamasani172612c2017-12-15 10:51:53 -0800109 Settings.Global.APP_STANDBY_ENABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000110 Settings.Global.ASSISTED_GPS_ENABLED,
111 Settings.Global.AUDIO_SAFE_VOLUME_STATE,
112 Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD,
113 Settings.Global.BATTERY_DISCHARGE_THRESHOLD,
Bryan Mawhinneyc41f2a42017-11-24 13:44:48 +0000114 Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000115 Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE,
116 Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX,
117 Settings.Global.BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX,
Antony Sargentf5772c62017-04-26 16:37:53 -0700118 Settings.Global.BLUETOOTH_A2DP_SUPPORTS_OPTIONAL_CODECS_PREFIX,
119 Settings.Global.BLUETOOTH_A2DP_OPTIONAL_CODECS_ENABLED_PREFIX,
Bryan Mawhinneyc41f2a42017-11-24 13:44:48 +0000120 Settings.Global.BLUETOOTH_CLASS_OF_DEVICE,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000121 Settings.Global.BLUETOOTH_DISABLED_PROFILES,
122 Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX,
123 Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX,
124 Settings.Global.BLUETOOTH_INTEROPERABILITY_LIST,
125 Settings.Global.BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX,
126 Settings.Global.BLUETOOTH_MAP_PRIORITY_PREFIX,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000127 Settings.Global.BLUETOOTH_PAN_PRIORITY_PREFIX,
128 Settings.Global.BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX,
129 Settings.Global.BLUETOOTH_SAP_PRIORITY_PREFIX,
Jakub Pawlowskic2d7be62017-11-22 10:57:42 -0800130 Settings.Global.BLUETOOTH_HEARING_AID_PRIORITY_PREFIX,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000131 Settings.Global.BOOT_COUNT,
132 Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL,
133 Settings.Global.CAPTIVE_PORTAL_HTTPS_URL,
134 Settings.Global.CAPTIVE_PORTAL_HTTP_URL,
135 Settings.Global.CAPTIVE_PORTAL_MODE,
Michal Karpinski034a83f2017-04-26 19:25:25 +0100136 Settings.Global.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000137 Settings.Global.CAPTIVE_PORTAL_SERVER,
138 Settings.Global.CAPTIVE_PORTAL_USE_HTTPS,
139 Settings.Global.CAPTIVE_PORTAL_USER_AGENT,
140 Settings.Global.CAR_DOCK_SOUND,
141 Settings.Global.CARRIER_APP_WHITELIST,
142 Settings.Global.CAR_UNDOCK_SOUND,
143 Settings.Global.CDMA_CELL_BROADCAST_SMS,
144 Settings.Global.CDMA_ROAMING_MODE,
145 Settings.Global.CDMA_SUBSCRIPTION_MODE,
146 Settings.Global.CELL_ON,
147 Settings.Global.CERT_PIN_UPDATE_CONTENT_URL,
148 Settings.Global.CERT_PIN_UPDATE_METADATA_URL,
149 Settings.Global.COMPATIBILITY_MODE,
150 Settings.Global.CONNECTIVITY_CHANGE_DELAY,
151 Settings.Global.CONNECTIVITY_METRICS_BUFFER_SIZE,
152 Settings.Global.CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS,
153 Settings.Global.CONTACT_METADATA_SYNC_ENABLED,
154 Settings.Global.CONTACTS_DATABASE_WAL_ENABLED,
155 Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE,
156 Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI,
Amith Yamasani39452022017-03-21 15:23:47 -0700157 Settings.Global.DATABASE_CREATION_BUILDID,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000158 Settings.Global.DATABASE_DOWNGRADE_REASON,
159 Settings.Global.DATA_ROAMING,
160 Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
161 Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
162 Settings.Global.DEBUG_APP,
163 Settings.Global.DEBUG_VIEW_ATTRIBUTES,
164 Settings.Global.DEFAULT_DNS_SERVER,
165 Settings.Global.DEFAULT_INSTALL_LOCATION,
Narayan Kamath94bcdbc2017-07-17 15:32:53 +0100166 Settings.Global.DEFAULT_RESTRICT_BACKGROUND_DATA,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000167 Settings.Global.DESK_DOCK_SOUND,
168 Settings.Global.DESK_UNDOCK_SOUND,
169 Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
170 Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES,
171 Settings.Global.DEVELOPMENT_FORCE_RTL,
172 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
173 Settings.Global.DEVICE_DEMO_MODE,
174 Settings.Global.DEVICE_IDLE_CONSTANTS,
jackqdyulei455e90a2017-02-09 15:29:16 -0800175 Settings.Global.BATTERY_SAVER_CONSTANTS,
Bryan Mawhinney99d89802017-06-28 16:22:39 +0100176 Settings.Global.DEFAULT_SM_DP_PLUS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000177 Settings.Global.DEVICE_NAME,
Bryan Mawhinney20924842017-05-11 12:50:14 +0100178 Settings.Global.DEVICE_POLICY_CONSTANTS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000179 Settings.Global.DEVICE_PROVISIONED,
180 Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED,
181 Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD,
182 Settings.Global.DISPLAY_SCALING_FORCE,
183 Settings.Global.DISPLAY_SIZE_FORCED,
184 Settings.Global.DNS_RESOLVER_MAX_SAMPLES,
185 Settings.Global.DNS_RESOLVER_MIN_SAMPLES,
186 Settings.Global.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS,
187 Settings.Global.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT,
188 Settings.Global.DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY,
189 Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE,
190 Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE,
191 Settings.Global.DROPBOX_AGE_SECONDS,
192 Settings.Global.DROPBOX_MAX_FILES,
193 Settings.Global.DROPBOX_QUOTA_KB,
194 Settings.Global.DROPBOX_QUOTA_PERCENT,
195 Settings.Global.DROPBOX_RESERVE_PERCENT,
196 Settings.Global.DROPBOX_TAG_PREFIX,
197 Settings.Global.EMERGENCY_AFFORDANCE_NEEDED,
Adrian Roos000cf5e2017-11-10 15:55:18 +0100198 Settings.Global.EMULATE_DISPLAY_CUTOUT,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000199 Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
Daniel Nishi0f703e62017-02-21 15:19:27 -0800200 Settings.Global.ENABLE_CACHE_QUOTA_CALCULATION,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000201 Settings.Global.ENABLE_CELLULAR_ON_BOOT,
Bryan Mawhinney99d89802017-06-28 16:22:39 +0100202 Settings.Global.ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE,
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +0000203 Settings.Global.ENABLE_DISKSTATS_LOGGING,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000204 Settings.Global.ENABLE_EPHEMERAL_FEATURE,
205 Settings.Global.ENHANCED_4G_MODE_ENABLED,
206 Settings.Global.EPHEMERAL_COOKIE_MAX_SIZE_BYTES,
207 Settings.Global.ERROR_LOGCAT_PREFIX,
Bryan Mawhinney99d89802017-06-28 16:22:39 +0100208 Settings.Global.EUICC_PROVISIONED,
qingxi2f231512017-06-23 15:32:53 -0700209 Settings.Global.EUICC_FACTORY_RESET_TIMEOUT_MILLIS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000210 Settings.Global.FANCY_IME_ANIMATIONS,
211 Settings.Global.FORCE_ALLOW_ON_EXTERNAL,
212 Settings.Global.FSTRIM_MANDATORY_INTERVAL,
213 Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST,
214 Settings.Global.GLOBAL_HTTP_PROXY_HOST,
215 Settings.Global.GLOBAL_HTTP_PROXY_PAC,
216 Settings.Global.GLOBAL_HTTP_PROXY_PORT,
217 Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS,
218 Settings.Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED,
219 Settings.Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED,
220 Settings.Global.HDMI_CONTROL_ENABLED,
Donghyun Choc1fa9af2016-12-27 18:31:09 +0900221 Settings.Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000222 Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
223 Settings.Global.HTTP_PROXY,
224 Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY,
225 Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY,
Bryan Mawhinney99d89802017-06-28 16:22:39 +0100226 Settings.Global.INSTANT_APP_DEXOPT_ENABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000227 Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL,
228 Settings.Global.INTENT_FIREWALL_UPDATE_METADATA_URL,
229 Settings.Global.JOB_SCHEDULER_CONSTANTS,
Michal Karpinski034a83f2017-04-26 19:25:25 +0100230 Settings.Global.LANG_ID_UPDATE_CONTENT_URL,
231 Settings.Global.LANG_ID_UPDATE_METADATA_URL,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000232 Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS,
Lifu Tangc94ef4d2017-03-23 23:48:00 -0700233 Settings.Global.LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS,
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +0000234 Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST,
Makoto Onuki0000d322017-11-28 16:31:47 -0800235 Settings.Global.LOCATION_GLOBAL_KILL_SWITCH,
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +0000236 Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000237 Settings.Global.LOCK_SOUND,
238 Settings.Global.LOW_BATTERY_SOUND,
239 Settings.Global.LOW_BATTERY_SOUND_TIMEOUT,
240 Settings.Global.LOW_POWER_MODE,
241 Settings.Global.LTE_SERVICE_FORCED,
242 Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
243 Settings.Global.MDC_INITIAL_MAX_RETRY,
244 Settings.Global.MHL_INPUT_SWITCHING_ENABLED,
245 Settings.Global.MHL_POWER_CHARGE_ENABLED,
246 Settings.Global.MOBILE_DATA, // Candidate for backup?
247 Settings.Global.MOBILE_DATA_ALWAYS_ON,
248 Settings.Global.MODE_RINGER,
249 Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION,
250 Settings.Global.MULTI_SIM_SMS_PROMPT,
251 Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION,
252 Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION,
253 Settings.Global.MULTI_SIM_VOICE_PROMPT,
254 Settings.Global.NETSTATS_DEV_BUCKET_DURATION,
255 Settings.Global.NETSTATS_DEV_DELETE_AGE,
256 Settings.Global.NETSTATS_DEV_PERSIST_BYTES,
257 Settings.Global.NETSTATS_DEV_ROTATE_AGE,
258 Settings.Global.NETSTATS_ENABLED,
259 Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES,
260 Settings.Global.NETSTATS_POLL_INTERVAL,
261 Settings.Global.NETSTATS_SAMPLE_ENABLED,
Jeff Sharkeyf4de2942017-08-29 15:32:13 -0600262 Settings.Global.NETSTATS_AUGMENT_ENABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000263 Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE,
264 Settings.Global.NETSTATS_UID_BUCKET_DURATION,
265 Settings.Global.NETSTATS_UID_DELETE_AGE,
266 Settings.Global.NETSTATS_UID_PERSIST_BYTES,
267 Settings.Global.NETSTATS_UID_ROTATE_AGE,
268 Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION,
269 Settings.Global.NETSTATS_UID_TAG_DELETE_AGE,
270 Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES,
271 Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE,
272 Settings.Global.NETWORK_AVOID_BAD_WIFI,
Bryan Mawhinney9a471b942017-02-01 13:18:07 +0000273 Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE,
Ricky Wai1a6e6672017-10-27 14:46:01 +0100274 Settings.Global.NETWORK_WATCHLIST_LAST_REPORT_TIME,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000275 Settings.Global.NETWORK_PREFERENCE,
Bryan Mawhinney2c5f95a2017-02-21 10:58:23 +0000276 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000277 Settings.Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS,
278 Settings.Global.NETWORK_SCORER_APP,
279 Settings.Global.NETWORK_SCORING_PROVISIONED,
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +0000280 Settings.Global.NETWORK_SCORING_UI_ENABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000281 Settings.Global.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT,
282 Settings.Global.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS,
283 Settings.Global.NEW_CONTACT_AGGREGATOR,
284 Settings.Global.NITZ_UPDATE_DIFF,
285 Settings.Global.NITZ_UPDATE_SPACING,
Chris Wrene901a7e2017-10-02 17:29:46 -0400286 Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000287 Settings.Global.NSD_ON,
288 Settings.Global.NTP_SERVER,
289 Settings.Global.NTP_TIMEOUT,
290 Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE,
291 Settings.Global.OVERLAY_DISPLAY_DEVICES,
292 Settings.Global.PAC_CHANGE_DELAY,
293 Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE,
294 Settings.Global.PACKAGE_VERIFIER_ENABLE,
295 Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB,
296 Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE,
297 Settings.Global.PACKAGE_VERIFIER_TIMEOUT,
298 Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT,
299 Settings.Global.PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS,
300 Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS,
301 Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT,
302 Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS,
303 Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT,
304 Settings.Global.POLICY_CONTROL,
Bryan Mawhinney24a2ae52017-01-31 11:18:50 +0000305 Settings.Global.POWER_MANAGER_CONSTANTS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000306 Settings.Global.PREFERRED_NETWORK_MODE,
Bryan Mawhinneyc41f2a42017-11-24 13:44:48 +0000307 Settings.Global.PRIV_APP_OOB_ENABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000308 Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS,
309 Settings.Global.RADIO_BLUETOOTH,
310 Settings.Global.RADIO_CELL,
311 Settings.Global.RADIO_NFC,
312 Settings.Global.RADIO_WIFI,
313 Settings.Global.RADIO_WIMAX,
Amin Shaikhd3c81932017-02-06 16:22:42 -0800314 Settings.Global.RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000315 Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT,
316 Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000317 Settings.Global.SAFE_BOOT_DISALLOWED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000318 Settings.Global.SELINUX_STATUS,
319 Settings.Global.SELINUX_UPDATE_CONTENT_URL,
320 Settings.Global.SELINUX_UPDATE_METADATA_URL,
321 Settings.Global.SEND_ACTION_APP_ERROR,
322 Settings.Global.SET_GLOBAL_HTTP_PROXY,
323 Settings.Global.SET_INSTALL_LOCATION,
324 Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL,
325 Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST,
326 Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL,
327 Settings.Global.SHORTCUT_MANAGER_CONSTANTS,
Geoffrey Pitschbd3ec6a2017-05-04 14:56:33 -0400328 Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000329 Settings.Global.SHOW_TEMPERATURE_WARNING,
Michal Karpinski034a83f2017-04-26 19:25:25 +0100330 Settings.Global.SMART_SELECTION_UPDATE_CONTENT_URL,
331 Settings.Global.SMART_SELECTION_UPDATE_METADATA_URL,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000332 Settings.Global.SMS_OUTGOING_CHECK_INTERVAL_MS,
333 Settings.Global.SMS_OUTGOING_CHECK_MAX_COUNT,
334 Settings.Global.SMS_SHORT_CODE_CONFIRMATION,
335 Settings.Global.SMS_SHORT_CODE_RULE,
336 Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL,
337 Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL,
Sundeep Ghuman9bb85d32017-08-28 17:04:16 -0700338 Settings.Global.SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS,
Fyodor Kupolovee90c032017-12-12 11:52:57 -0800339 Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000340 Settings.Global.STORAGE_BENCHMARK_INTERVAL,
Daniel Nishi5782b5c2017-08-24 10:28:52 -0700341 Settings.Global.STORAGE_SETTINGS_CLOBBER_THRESHOLD,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000342 Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS,
343 Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL,
Jeff Sharkey78f6f7f2017-02-21 13:57:31 -0700344 Settings.Global.SYS_STORAGE_CACHE_MAX_BYTES,
345 Settings.Global.SYS_STORAGE_CACHE_PERCENTAGE,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000346 Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES,
347 Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES,
348 Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE,
349 Settings.Global.TCP_DEFAULT_INIT_RWND,
350 Settings.Global.TETHER_DUN_APN,
351 Settings.Global.TETHER_DUN_REQUIRED,
Bryan Mawhinney99d89802017-06-28 16:22:39 +0100352 Settings.Global.TETHER_OFFLOAD_DISABLED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000353 Settings.Global.TETHER_SUPPORTED,
Abodunrinwa Toki0e6b43e2017-09-19 23:18:40 +0100354 Settings.Global.TEXT_CLASSIFIER_CONSTANTS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000355 Settings.Global.THEATER_MODE_ON,
356 Settings.Global.TRANSITION_ANIMATION_SCALE,
357 Settings.Global.TRUSTED_SOUND,
358 Settings.Global.TZINFO_UPDATE_CONTENT_URL,
359 Settings.Global.TZINFO_UPDATE_METADATA_URL,
Svet Ganovf36d53c2017-05-24 00:27:21 -0700360 Settings.Global.INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
361 Settings.Global.INSTALLED_INSTANT_APP_MAX_CACHE_PERIOD,
362 Settings.Global.UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
363 Settings.Global.UNINSTALLED_INSTANT_APP_MAX_CACHE_PERIOD,
364 Settings.Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000365 Settings.Global.UNLOCK_SOUND,
366 Settings.Global.USE_GOOGLE_MAIL,
367 Settings.Global.VT_IMS_ENABLED,
368 Settings.Global.WAIT_FOR_DEBUGGER,
Cody Northrop86cedcb2017-10-20 09:03:13 -0600369 Settings.Global.ENABLE_GPU_DEBUG_LAYERS,
370 Settings.Global.GPU_DEBUG_APP,
371 Settings.Global.GPU_DEBUG_LAYERS,
gomo48f1a642017-11-10 20:35:46 -0800372 Settings.Global.ENABLE_GNSS_RAW_MEAS_FULL_TRACKING,
Sudheer Shanka5918c672017-03-21 19:31:37 -0700373 Settings.Global.NETWORK_ACCESS_TIMEOUT_MS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000374 Settings.Global.WARNING_TEMPERATURE,
375 Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY,
376 Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED,
377 Settings.Global.WEBVIEW_MULTIPROCESS,
378 Settings.Global.WEBVIEW_PROVIDER,
379 Settings.Global.WFC_IMS_ENABLED,
380 Settings.Global.WFC_IMS_MODE,
381 Settings.Global.WFC_IMS_ROAMING_ENABLED,
382 Settings.Global.WFC_IMS_ROAMING_MODE,
Bryan Mawhinney9a471b942017-02-01 13:18:07 +0000383 Settings.Global.WIFI_BADGING_THRESHOLDS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000384 Settings.Global.WIFI_BOUNCE_DELAY_OVERRIDE_MS,
385 Settings.Global.WIFI_COUNTRY_CODE,
386 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN,
387 Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON,
388 Settings.Global.WIFI_DISPLAY_ON,
389 Settings.Global.WIFI_DISPLAY_WPS_CONFIG,
390 Settings.Global.WIFI_ENHANCED_AUTO_JOIN,
391 Settings.Global.WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS,
392 Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS,
393 Settings.Global.WIFI_FREQUENCY_BAND,
394 Settings.Global.WIFI_IDLE_MS,
395 Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT,
396 Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS,
397 Settings.Global.WIFI_NETWORK_SHOW_RSSI,
398 Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
399 Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT,
400 Settings.Global.WIFI_ON,
401 Settings.Global.WIFI_P2P_DEVICE_NAME,
402 Settings.Global.WIFI_REENABLE_DELAY_MS,
403 Settings.Global.WIFI_SAVED_STATE,
404 Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
Wei Wang3b7528b2017-05-04 13:16:32 -0700405 Settings.Global.WIFI_SCAN_BACKGROUND_THROTTLE_INTERVAL_MS,
406 Settings.Global.WIFI_SCAN_BACKGROUND_THROTTLE_PACKAGE_WHITELIST,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000407 Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS,
408 Settings.Global.WIFI_SLEEP_POLICY,
409 Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
410 Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED,
411 Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED,
Bryan Mawhinney20924842017-05-11 12:50:14 +0100412 Settings.Global.WIFI_WAKEUP_AVAILABLE,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000413 Settings.Global.WIFI_WATCHDOG_ON,
414 Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON,
415 Settings.Global.WINDOW_ANIMATION_SCALE,
416 Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
417 Settings.Global.WTF_IS_FATAL,
418 Settings.Global.ZEN_MODE,
419 Settings.Global.ZEN_MODE_CONFIG_ETAG,
420 Settings.Global.ZEN_MODE_RINGER_LEVEL);
421
422 private static final Set<String> BACKUP_BLACKLISTED_SECURE_SETTINGS =
423 newHashSet(
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000424 Settings.Secure.ACCESSIBILITY_SOFT_KEYBOARD_MODE,
Felipe Leme452886a2017-11-27 13:09:13 -0800425 // TODO(b/67867469): Move autofill settings below to
426 // BACKUP_BLACKLISTED_SYSTEM_SETTINGS once feature is moved out of experimental
Felipe Leme329d0402017-12-06 09:22:43 -0800427 Settings.Secure.AUTOFILL_FEATURE_FIELD_CLASSIFICATION,
Felipe Leme452886a2017-11-27 13:09:13 -0800428 Settings.Secure.AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE,
429 Settings.Secure.AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE,
430 Settings.Secure.AUTOFILL_USER_DATA_MAX_VALUE_LENGTH,
431 Settings.Secure.AUTOFILL_USER_DATA_MIN_VALUE_LENGTH,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000432 Settings.Secure.ALLOWED_GEOLOCATION_ORIGINS,
433 Settings.Secure.ALWAYS_ON_VPN_APP,
434 Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN,
435 Settings.Secure.ANDROID_ID,
436 Settings.Secure.ANR_SHOW_BACKGROUND,
437 Settings.Secure.ASSISTANT,
438 Settings.Secure.ASSIST_DISCLOSURE_ENABLED,
439 Settings.Secure.ASSIST_SCREENSHOT_ENABLED,
440 Settings.Secure.ASSIST_STRUCTURE_ENABLED,
Philip P. Moltmanne287a152017-05-04 11:07:05 -0700441 Settings.Secure.AUTOFILL_SERVICE_SEARCH_URI,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000442 Settings.Secure.AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000443 Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED,
444 Settings.Secure.AUTOMATIC_STORAGE_MANAGER_LAST_RUN,
Daniel Nishida7332c2017-06-12 10:17:33 -0700445 Settings.Secure.AUTOMATIC_STORAGE_MANAGER_TURNED_OFF_BY_POLICY,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000446 Settings.Secure.BACKUP_AUTO_RESTORE,
447 Settings.Secure.BACKUP_ENABLED,
448 Settings.Secure.BACKUP_PROVISIONED,
449 Settings.Secure.BACKUP_TRANSPORT,
Michal Karpinski72dfff92017-04-27 11:19:04 +0100450 Settings.Secure.CAMERA_LIFT_TRIGGER_ENABLED, // Candidate for backup?
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000451 Settings.Secure.CARRIER_APPS_HANDLED,
Jack Yu39028572017-02-23 09:49:25 -0800452 Settings.Secure.CMAS_ADDITIONAL_BROADCAST_PKG,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000453 Settings.Secure.COMPLETED_CATEGORY_PREFIX,
454 Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS,
455 Settings.Secure.DEFAULT_INPUT_METHOD,
456 Settings.Secure.DEMO_USER_SETUP_COMPLETE,
457 Settings.Secure.DEVICE_PAIRED,
458 Settings.Secure.DIALER_DEFAULT_APPLICATION,
459 Settings.Secure.DISABLED_PRINT_SERVICES,
460 Settings.Secure.DISABLED_SYSTEM_INPUT_METHODS,
461 Settings.Secure.DISPLAY_DENSITY_FORCED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000462 Settings.Secure.DOZE_ALWAYS_ON,
Adrian Roosd0963a02017-05-15 14:33:37 -0700463 Settings.Secure.DOZE_PULSE_ON_LONG_PRESS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000464 Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
465 Settings.Secure.ENABLED_NOTIFICATION_ASSISTANT,
Julia Reynoldsb852e562017-06-06 16:14:18 -0400466 Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000467 Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES,
468 Settings.Secure.ENABLED_PRINT_SERVICES,
469 Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
470 Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR,
471 Settings.Secure.INPUT_METHOD_SELECTOR_VISIBILITY,
472 Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY,
473 Settings.Secure.INSTALL_NON_MARKET_APPS,
474 Settings.Secure.LAST_SETUP_SHOWN,
475 Settings.Secure.LOCATION_MODE,
476 Settings.Secure.LOCATION_PREVIOUS_MODE,
477 Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, // Candidate?
478 Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, // Candidate?
479 Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT,
480 Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, // Candidate?
481 Settings.Secure.LOCK_TO_APP_EXIT_LOCKED,
482 Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH,
483 Settings.Secure.MULTI_PRESS_TIMEOUT,
484 Settings.Secure.NFC_PAYMENT_FOREGROUND,
Christine Franks0dbb39d2017-06-27 09:13:35 -0700485 Settings.Secure.NIGHT_DISPLAY_ACTIVATED,
486 Settings.Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000487 Settings.Secure.PACKAGE_VERIFIER_STATE,
488 Settings.Secure.PACKAGE_VERIFIER_USER_CONSENT,
489 Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE,
490 Settings.Secure.PAYMENT_SERVICE_SEARCH_URI,
491 Settings.Secure.PRINT_SERVICE_SEARCH_URI,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000492 Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT, // Candidate?
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000493 Settings.Secure.SEARCH_GLOBAL_SEARCH_ACTIVITY,
494 Settings.Secure.SEARCH_MAX_RESULTS_PER_SOURCE,
495 Settings.Secure.SEARCH_MAX_RESULTS_TO_DISPLAY,
496 Settings.Secure.SEARCH_MAX_SHORTCUTS_RETURNED,
497 Settings.Secure.SEARCH_MAX_SOURCE_EVENT_AGE_MILLIS,
498 Settings.Secure.SEARCH_MAX_STAT_AGE_MILLIS,
499 Settings.Secure.SEARCH_MIN_CLICKS_FOR_SOURCE_RANKING,
500 Settings.Secure.SEARCH_MIN_IMPRESSIONS_FOR_SOURCE_RANKING,
501 Settings.Secure.SEARCH_NUM_PROMOTED_SOURCES,
502 Settings.Secure.SEARCH_PER_SOURCE_CONCURRENT_QUERY_LIMIT,
503 Settings.Secure.SEARCH_PREFILL_MILLIS,
504 Settings.Secure.SEARCH_PROMOTED_SOURCE_DEADLINE_MILLIS,
505 Settings.Secure.SEARCH_QUERY_THREAD_CORE_POOL_SIZE,
506 Settings.Secure.SEARCH_QUERY_THREAD_MAX_POOL_SIZE,
507 Settings.Secure.SEARCH_SHORTCUT_REFRESH_CORE_POOL_SIZE,
508 Settings.Secure.SEARCH_SHORTCUT_REFRESH_MAX_POOL_SIZE,
509 Settings.Secure.SEARCH_SOURCE_TIMEOUT_MILLIS,
510 Settings.Secure.SEARCH_THREAD_KEEPALIVE_SECONDS,
511 Settings.Secure.SEARCH_WEB_RESULTS_OVERRIDE_LIMIT,
512 Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE,
513 Settings.Secure.SETTINGS_CLASSNAME,
514 Settings.Secure.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING, // candidate?
515 Settings.Secure.SKIP_FIRST_USE_HINTS, // candidate?
516 Settings.Secure.SMS_DEFAULT_APPLICATION,
517 Settings.Secure.TRUST_AGENTS_INITIALIZED,
518 Settings.Secure.TV_INPUT_CUSTOM_LABELS,
519 Settings.Secure.TV_INPUT_HIDDEN_INPUTS,
Bryan Mawhinney99d89802017-06-28 16:22:39 +0100520 Settings.Secure.TV_USER_SETUP_COMPLETE,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000521 Settings.Secure.UI_NIGHT_MODE, // candidate?
Suprabh Shukla0b1356f2017-02-21 14:33:50 -0800522 Settings.Secure.UNKNOWN_SOURCES_DEFAULT_REVERSED,
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000523 Settings.Secure.UNSAFE_VOLUME_MUSIC_ACTIVE_MS,
524 Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED,
525 Settings.Secure.USER_SETUP_COMPLETE,
526 Settings.Secure.VOICE_INTERACTION_SERVICE,
527 Settings.Secure.VOICE_RECOGNITION_SERVICE,
Tim Zhengcc1e76a2017-08-30 17:46:19 -0700528 Settings.Secure.INSTANT_APPS_ENABLED,
529 Settings.Secure.BACKUP_MANAGER_CONSTANTS);
Bryan Mawhinney87b1aac2017-01-16 18:06:07 +0000530
531 @Test
532 public void systemSettingsBackedUpOrBlacklisted() {
533 checkSettingsBackedUpOrBlacklisted(
534 getCandidateSettings(Settings.System.class),
535 newHashSet(Settings.System.SETTINGS_TO_BACKUP),
536 BACKUP_BLACKLISTED_SYSTEM_SETTINGS);
537 }
538
539 @Test
540 public void globalSettingsBackedUpOrBlacklisted() {
541 checkSettingsBackedUpOrBlacklisted(
542 getCandidateSettings(Settings.Global.class),
543 newHashSet(Settings.Global.SETTINGS_TO_BACKUP),
544 BACKUP_BLACKLISTED_GLOBAL_SETTINGS);
545 }
546
547 @Test
548 public void secureSettingsBackedUpOrBlacklisted() {
549 checkSettingsBackedUpOrBlacklisted(
550 getCandidateSettings(Settings.Secure.class),
551 newHashSet(Settings.Secure.SETTINGS_TO_BACKUP),
552 BACKUP_BLACKLISTED_SECURE_SETTINGS);
553 }
554
555 private static void checkSettingsBackedUpOrBlacklisted(
556 Set<String> settings, Set<String> settingsToBackup, Set<String> blacklist) {
557 Set<String> settingsNotBackedUp = difference(settings, settingsToBackup);
558 Set<String> settingsNotBackedUpOrBlacklisted = difference(settingsNotBackedUp, blacklist);
559 assertThat(
560 "Settings not backed up or blacklisted",
561 settingsNotBackedUpOrBlacklisted,
562 is(empty()));
563
564 assertThat(
565 "blacklisted settings backed up",
566 intersect(settingsToBackup, blacklist),
567 is(empty()));
568 }
569
570 private static Set<String> getCandidateSettings(Class<? extends Settings.NameValueTable> clazz) {
571 HashSet<String> result = new HashSet<String>();
572 for (Field field : clazz.getDeclaredFields()) {
573 if (looksLikeValidSetting(field)) {
574 try {
575 result.add((String) field.get(null));
576 } catch (IllegalAccessException e) {
577 // Impossible for public fields
578 throw new RuntimeException(e);
579 }
580 }
581 }
582 return result;
583 }
584
585 private static boolean looksLikeValidSetting(Field field) {
586 int modifiers = field.getModifiers();
587 return isPublic(modifiers)
588 && isStatic(modifiers)
589 && isFinal(modifiers)
590 && field.getType() == String.class
591 && field.getAnnotation(Deprecated.class) == null;
592 }
593
594 private static <T> Set<T> difference(Set<T> s1, Set<T> s2) {
595 HashSet<T> result = new HashSet<T>(s1);
596 result.removeAll(s2);
597 return result;
598 }
599
600 private static <T> Set<T> intersect(Set<T> s1, Set<T> s2) {
601 HashSet<T> result = new HashSet<T>(s1);
602 result.retainAll(s2);
603 return result;
604 }
605
606}