SettingsBackupTest.java revision 09d4ff8960cd3d45988b0c3ff0835d281f0e16b5
1/* 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; 20import static org.hamcrest.MatcherAssert.assertThat; 21import static org.hamcrest.Matchers.empty; 22import static org.hamcrest.Matchers.is; 23import static java.lang.reflect.Modifier.isFinal; 24import static java.lang.reflect.Modifier.isPublic; 25import static java.lang.reflect.Modifier.isStatic; 26 27import android.platform.test.annotations.Presubmit; 28import android.support.test.filters.SmallTest; 29import android.support.test.runner.AndroidJUnit4; 30 31import java.lang.reflect.Field; 32import java.util.HashSet; 33import java.util.Set; 34 35import org.junit.Test; 36import org.junit.runner.RunWith; 37 38/** Tests that ensure appropriate settings are backed up. */ 39@RunWith(AndroidJUnit4.class) 40@Presubmit 41@SmallTest 42public class SettingsBackupTest { 43 44 /** 45 * The following blacklists contain settings that should *not* be backed up and restored to 46 * another device. As a general rule, anything that is not user configurable should be 47 * blacklisted (and conversely, things that *are* user configurable *should* be backed up) 48 */ 49 private static final Set<String> BACKUP_BLACKLISTED_SYSTEM_SETTINGS = 50 newHashSet( 51 Settings.System.ADVANCED_SETTINGS, // candidate for backup? 52 Settings.System.ALARM_ALERT, // backup candidate? 53 Settings.System.ALARM_ALERT_CACHE, // internal cache 54 Settings.System.APPEND_FOR_LAST_AUDIBLE, // suffix deprecated since API 2 55 Settings.System.EGG_MODE, // I am the lolrus 56 Settings.System.END_BUTTON_BEHAVIOR, // bug? 57 Settings.System 58 .HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, // candidate for backup? 59 Settings.System.LOCKSCREEN_DISABLED, // ? 60 Settings.System.MEDIA_BUTTON_RECEIVER, // candidate for backup? 61 Settings.System.MUTE_STREAMS_AFFECTED, // candidate for backup? 62 Settings.System.NOTIFICATION_LIGHT_PULSE, // candidate for backup? 63 Settings.System.NOTIFICATION_SOUND_CACHE, // internal cache 64 Settings.System.POINTER_LOCATION, // backup candidate? 65 Settings.System.RINGTONE_CACHE, // internal cache 66 Settings.System.SETUP_WIZARD_HAS_RUN, // Only used by SuW 67 Settings.System.SHOW_GTALK_SERVICE_STATUS, // candidate for backup? 68 Settings.System.SHOW_TOUCHES, // bug? 69 Settings.System.SIP_ADDRESS_ONLY, // value, not a setting 70 Settings.System.SIP_ALWAYS, // value, not a setting 71 Settings.System.SYSTEM_LOCALES, // bug? 72 Settings.System.USER_ROTATION, // backup candidate? 73 Settings.System.VIBRATE_IN_SILENT, // deprecated? 74 Settings.System.VIBRATE_ON, // candidate for backup? 75 Settings.System.VOLUME_ALARM, // deprecated since API 2? 76 Settings.System.VOLUME_BLUETOOTH_SCO, // deprecated since API 2? 77 Settings.System.VOLUME_MASTER, // candidate for backup? 78 Settings.System.VOLUME_MUSIC, // deprecated since API 2? 79 Settings.System.VOLUME_NOTIFICATION, // deprecated since API 2? 80 Settings.System.VOLUME_RING, // deprecated since API 2? 81 Settings.System.VOLUME_SYSTEM, // deprecated since API 2? 82 Settings.System.VOLUME_VOICE, // deprecated since API 2? 83 Settings.System.WHEN_TO_MAKE_WIFI_CALLS, // bug? 84 Settings.System.WINDOW_ORIENTATION_LISTENER_LOG // used for debugging only 85 ); 86 87 private static final Set<String> BACKUP_BLACKLISTED_GLOBAL_SETTINGS = 88 newHashSet( 89 Settings.Global.ACTIVITY_MANAGER_CONSTANTS, 90 Settings.Global.ADB_ENABLED, 91 Settings.Global.ADD_USERS_WHEN_LOCKED, 92 Settings.Global.AIRPLANE_MODE_ON, 93 Settings.Global.AIRPLANE_MODE_RADIOS, 94 Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS, 95 Settings.Global.ALARM_MANAGER_CONSTANTS, 96 Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED, 97 Settings.Global.ALWAYS_FINISH_ACTIVITIES, 98 Settings.Global.ANIMATOR_DURATION_SCALE, 99 Settings.Global.APN_DB_UPDATE_CONTENT_URL, 100 Settings.Global.APN_DB_UPDATE_METADATA_URL, 101 Settings.Global.APP_IDLE_CONSTANTS, 102 Settings.Global.ASSISTED_GPS_ENABLED, 103 Settings.Global.AUDIO_SAFE_VOLUME_STATE, 104 Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD, 105 Settings.Global.BATTERY_DISCHARGE_THRESHOLD, 106 Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE, 107 Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX, 108 Settings.Global.BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX, 109 Settings.Global.BLUETOOTH_DISABLED_PROFILES, 110 Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX, 111 Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX, 112 Settings.Global.BLUETOOTH_INTEROPERABILITY_LIST, 113 Settings.Global.BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX, 114 Settings.Global.BLUETOOTH_MAP_PRIORITY_PREFIX, 115 Settings.Global.BLUETOOTH_ON, // Candidate for backup? 116 Settings.Global.BLUETOOTH_PAN_PRIORITY_PREFIX, 117 Settings.Global.BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX, 118 Settings.Global.BLUETOOTH_SAP_PRIORITY_PREFIX, 119 Settings.Global.BOOT_COUNT, 120 Settings.Global.CAPTIVE_PORTAL_FALLBACK_URL, 121 Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, 122 Settings.Global.CAPTIVE_PORTAL_HTTP_URL, 123 Settings.Global.CAPTIVE_PORTAL_MODE, 124 Settings.Global.CAPTIVE_PORTAL_SERVER, 125 Settings.Global.CAPTIVE_PORTAL_USE_HTTPS, 126 Settings.Global.CAPTIVE_PORTAL_USER_AGENT, 127 Settings.Global.CAR_DOCK_SOUND, 128 Settings.Global.CARRIER_APP_WHITELIST, 129 Settings.Global.CAR_UNDOCK_SOUND, 130 Settings.Global.CDMA_CELL_BROADCAST_SMS, 131 Settings.Global.CDMA_ROAMING_MODE, 132 Settings.Global.CDMA_SUBSCRIPTION_MODE, 133 Settings.Global.CELL_ON, 134 Settings.Global.CERT_PIN_UPDATE_CONTENT_URL, 135 Settings.Global.CERT_PIN_UPDATE_METADATA_URL, 136 Settings.Global.COMPATIBILITY_MODE, 137 Settings.Global.CONNECTIVITY_CHANGE_DELAY, 138 Settings.Global.CONNECTIVITY_METRICS_BUFFER_SIZE, 139 Settings.Global.CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS, 140 Settings.Global.CONTACT_METADATA_SYNC_ENABLED, 141 Settings.Global.CONTACTS_DATABASE_WAL_ENABLED, 142 Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE, 143 Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI, 144 Settings.Global.DATABASE_CREATION_BUILDID, 145 Settings.Global.DATABASE_DOWNGRADE_REASON, 146 Settings.Global.DATA_ROAMING, 147 Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS, 148 Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS, 149 Settings.Global.DEBUG_APP, 150 Settings.Global.DEBUG_VIEW_ATTRIBUTES, 151 Settings.Global.DEFAULT_DNS_SERVER, 152 Settings.Global.DEFAULT_INSTALL_LOCATION, 153 Settings.Global.DESK_DOCK_SOUND, 154 Settings.Global.DESK_UNDOCK_SOUND, 155 Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 156 Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES, 157 Settings.Global.DEVELOPMENT_FORCE_RTL, 158 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 159 Settings.Global.DEVICE_DEMO_MODE, 160 Settings.Global.DEVICE_IDLE_CONSTANTS, 161 Settings.Global.DEVICE_IDLE_CONSTANTS_WATCH, 162 Settings.Global.BATTERY_SAVER_CONSTANTS, 163 Settings.Global.DEVICE_NAME, 164 Settings.Global.DEVICE_PROVISIONED, 165 Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED, 166 Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD, 167 Settings.Global.DISPLAY_SCALING_FORCE, 168 Settings.Global.DISPLAY_SIZE_FORCED, 169 Settings.Global.DNS_RESOLVER_MAX_SAMPLES, 170 Settings.Global.DNS_RESOLVER_MIN_SAMPLES, 171 Settings.Global.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS, 172 Settings.Global.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT, 173 Settings.Global.DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY, 174 Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE, 175 Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE, 176 Settings.Global.DROPBOX_AGE_SECONDS, 177 Settings.Global.DROPBOX_MAX_FILES, 178 Settings.Global.DROPBOX_QUOTA_KB, 179 Settings.Global.DROPBOX_QUOTA_PERCENT, 180 Settings.Global.DROPBOX_RESERVE_PERCENT, 181 Settings.Global.DROPBOX_TAG_PREFIX, 182 Settings.Global.EMERGENCY_AFFORDANCE_NEEDED, 183 Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 184 Settings.Global.ENABLE_CACHE_QUOTA_CALCULATION, 185 Settings.Global.ENABLE_CELLULAR_ON_BOOT, 186 Settings.Global.ENABLE_DISKSTATS_LOGGING, 187 Settings.Global.ENABLE_EPHEMERAL_FEATURE, 188 Settings.Global.ENHANCED_4G_MODE_ENABLED, 189 Settings.Global.EPHEMERAL_COOKIE_MAX_SIZE_BYTES, 190 Settings.Global.ERROR_LOGCAT_PREFIX, 191 Settings.Global.FANCY_IME_ANIMATIONS, 192 Settings.Global.FORCE_ALLOW_ON_EXTERNAL, 193 Settings.Global.FSTRIM_MANDATORY_INTERVAL, 194 Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST, 195 Settings.Global.GLOBAL_HTTP_PROXY_HOST, 196 Settings.Global.GLOBAL_HTTP_PROXY_PAC, 197 Settings.Global.GLOBAL_HTTP_PROXY_PORT, 198 Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS, 199 Settings.Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, 200 Settings.Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED, 201 Settings.Global.HDMI_CONTROL_ENABLED, 202 Settings.Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, 203 Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, 204 Settings.Global.HTTP_PROXY, 205 Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY, 206 Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY, 207 Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL, 208 Settings.Global.INTENT_FIREWALL_UPDATE_METADATA_URL, 209 Settings.Global.JOB_SCHEDULER_CONSTANTS, 210 Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS, 211 Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST, 212 Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED, 213 Settings.Global.LOCK_SOUND, 214 Settings.Global.LOW_BATTERY_SOUND, 215 Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, 216 Settings.Global.LOW_POWER_MODE, 217 Settings.Global.LTE_SERVICE_FORCED, 218 Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE, 219 Settings.Global.MDC_INITIAL_MAX_RETRY, 220 Settings.Global.MHL_INPUT_SWITCHING_ENABLED, 221 Settings.Global.MHL_POWER_CHARGE_ENABLED, 222 Settings.Global.MOBILE_DATA, // Candidate for backup? 223 Settings.Global.MOBILE_DATA_ALWAYS_ON, 224 Settings.Global.MODE_RINGER, 225 Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, 226 Settings.Global.MULTI_SIM_SMS_PROMPT, 227 Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION, 228 Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, 229 Settings.Global.MULTI_SIM_VOICE_PROMPT, 230 Settings.Global.NETSTATS_DEV_BUCKET_DURATION, 231 Settings.Global.NETSTATS_DEV_DELETE_AGE, 232 Settings.Global.NETSTATS_DEV_PERSIST_BYTES, 233 Settings.Global.NETSTATS_DEV_ROTATE_AGE, 234 Settings.Global.NETSTATS_ENABLED, 235 Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES, 236 Settings.Global.NETSTATS_POLL_INTERVAL, 237 Settings.Global.NETSTATS_SAMPLE_ENABLED, 238 Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE, 239 Settings.Global.NETSTATS_UID_BUCKET_DURATION, 240 Settings.Global.NETSTATS_UID_DELETE_AGE, 241 Settings.Global.NETSTATS_UID_PERSIST_BYTES, 242 Settings.Global.NETSTATS_UID_ROTATE_AGE, 243 Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION, 244 Settings.Global.NETSTATS_UID_TAG_DELETE_AGE, 245 Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES, 246 Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE, 247 Settings.Global.NETWORK_AVOID_BAD_WIFI, 248 Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE, 249 Settings.Global.NETWORK_PREFERENCE, 250 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, 251 Settings.Global.NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS, 252 Settings.Global.NETWORK_SCORER_APP, 253 Settings.Global.NETWORK_SCORING_PROVISIONED, 254 Settings.Global.NETWORK_SCORING_UI_ENABLED, 255 Settings.Global.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT, 256 Settings.Global.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS, 257 Settings.Global.NEW_CONTACT_AGGREGATOR, 258 Settings.Global.NITZ_UPDATE_DIFF, 259 Settings.Global.NITZ_UPDATE_SPACING, 260 Settings.Global.NSD_ON, 261 Settings.Global.NTP_SERVER, 262 Settings.Global.NTP_TIMEOUT, 263 Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE, 264 Settings.Global.OVERLAY_DISPLAY_DEVICES, 265 Settings.Global.PAC_CHANGE_DELAY, 266 Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE, 267 Settings.Global.PACKAGE_VERIFIER_ENABLE, 268 Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 269 Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 270 Settings.Global.PACKAGE_VERIFIER_TIMEOUT, 271 Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT, 272 Settings.Global.PDP_WATCHDOG_ERROR_POLL_INTERVAL_MS, 273 Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS, 274 Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT, 275 Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS, 276 Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT, 277 Settings.Global.POLICY_CONTROL, 278 Settings.Global.POWER_MANAGER_CONSTANTS, 279 Settings.Global.PREFERRED_NETWORK_MODE, 280 Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS, 281 Settings.Global.RADIO_BLUETOOTH, 282 Settings.Global.RADIO_CELL, 283 Settings.Global.RADIO_NFC, 284 Settings.Global.RADIO_WIFI, 285 Settings.Global.RADIO_WIMAX, 286 Settings.Global.RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS, 287 Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT, 288 Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT, 289 Settings.Global.RETAIL_DEMO_MODE_CONSTANTS, 290 Settings.Global.SAFE_BOOT_DISALLOWED, 291 Settings.Global.SAMPLING_PROFILER_MS, 292 Settings.Global.SELINUX_STATUS, 293 Settings.Global.SELINUX_UPDATE_CONTENT_URL, 294 Settings.Global.SELINUX_UPDATE_METADATA_URL, 295 Settings.Global.SEND_ACTION_APP_ERROR, 296 Settings.Global.SET_GLOBAL_HTTP_PROXY, 297 Settings.Global.SET_INSTALL_LOCATION, 298 Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL, 299 Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST, 300 Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL, 301 Settings.Global.SHORTCUT_MANAGER_CONSTANTS, 302 Settings.Global.SHOW_TEMPERATURE_WARNING, 303 Settings.Global.SMS_OUTGOING_CHECK_INTERVAL_MS, 304 Settings.Global.SMS_OUTGOING_CHECK_MAX_COUNT, 305 Settings.Global.SMS_SHORT_CODE_CONFIRMATION, 306 Settings.Global.SMS_SHORT_CODE_RULE, 307 Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL, 308 Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL, 309 Settings.Global.STORAGE_BENCHMARK_INTERVAL, 310 Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS, 311 Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL, 312 Settings.Global.SYS_STORAGE_CACHE_MAX_BYTES, 313 Settings.Global.SYS_STORAGE_CACHE_PERCENTAGE, 314 Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES, 315 Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES, 316 Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE, 317 Settings.Global.TCP_DEFAULT_INIT_RWND, 318 Settings.Global.TETHER_DUN_APN, 319 Settings.Global.TETHER_DUN_REQUIRED, 320 Settings.Global.TETHER_SUPPORTED, 321 Settings.Global.THEATER_MODE_ON, 322 Settings.Global.TRANSITION_ANIMATION_SCALE, 323 Settings.Global.TRUSTED_SOUND, 324 Settings.Global.TZINFO_UPDATE_CONTENT_URL, 325 Settings.Global.TZINFO_UPDATE_METADATA_URL, 326 Settings.Global.UNINSTALLED_INSTANT_APP_CACHE_DURATION_MILLIS, 327 Settings.Global.UNLOCK_SOUND, 328 Settings.Global.USE_GOOGLE_MAIL, 329 Settings.Global.VT_IMS_ENABLED, 330 Settings.Global.WAIT_FOR_DEBUGGER, 331 Settings.Global.NETWORK_ACCESS_TIMEOUT_MS, 332 Settings.Global.WARNING_TEMPERATURE, 333 Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY, 334 Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED, 335 Settings.Global.WEBVIEW_MULTIPROCESS, 336 Settings.Global.WEBVIEW_PROVIDER, 337 Settings.Global.WFC_IMS_ENABLED, 338 Settings.Global.WFC_IMS_MODE, 339 Settings.Global.WFC_IMS_ROAMING_ENABLED, 340 Settings.Global.WFC_IMS_ROAMING_MODE, 341 Settings.Global.WIFI_BADGING_THRESHOLDS, 342 Settings.Global.WIFI_BOUNCE_DELAY_OVERRIDE_MS, 343 Settings.Global.WIFI_COUNTRY_CODE, 344 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 345 Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 346 Settings.Global.WIFI_DISPLAY_ON, 347 Settings.Global.WIFI_DISPLAY_WPS_CONFIG, 348 Settings.Global.WIFI_ENHANCED_AUTO_JOIN, 349 Settings.Global.WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS, 350 Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS, 351 Settings.Global.WIFI_FREQUENCY_BAND, 352 Settings.Global.WIFI_IDLE_MS, 353 Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT, 354 Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS, 355 Settings.Global.WIFI_NETWORK_SHOW_RSSI, 356 Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 357 Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT, 358 Settings.Global.WIFI_ON, 359 Settings.Global.WIFI_P2P_DEVICE_NAME, 360 Settings.Global.WIFI_REENABLE_DELAY_MS, 361 Settings.Global.WIFI_SAVED_STATE, 362 Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 363 Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS, 364 Settings.Global.WIFI_SLEEP_POLICY, 365 Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS, 366 Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 367 Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 368 Settings.Global.WIFI_WATCHDOG_ON, 369 Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON, 370 Settings.Global.WINDOW_ANIMATION_SCALE, 371 Settings.Global.WIRELESS_CHARGING_STARTED_SOUND, 372 Settings.Global.WTF_IS_FATAL, 373 Settings.Global.ZEN_MODE, 374 Settings.Global.ZEN_MODE_CONFIG_ETAG, 375 Settings.Global.ZEN_MODE_RINGER_LEVEL); 376 377 private static final Set<String> BACKUP_BLACKLISTED_SECURE_SETTINGS = 378 newHashSet( 379 Settings.Secure.ACCESSIBILITY_SOFT_KEYBOARD_MODE, 380 Settings.Secure.ALLOWED_GEOLOCATION_ORIGINS, 381 Settings.Secure.ALWAYS_ON_VPN_APP, 382 Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN, 383 Settings.Secure.ANDROID_ID, 384 Settings.Secure.ANR_SHOW_BACKGROUND, 385 Settings.Secure.ASSISTANT, 386 Settings.Secure.ASSIST_DISCLOSURE_ENABLED, 387 Settings.Secure.ASSIST_SCREENSHOT_ENABLED, 388 Settings.Secure.ASSIST_STRUCTURE_ENABLED, 389 Settings.Secure.AUTOFILL_SERVICE, 390 Settings.Secure.AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED, 391 Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED, 392 Settings.Secure.AUTOMATIC_STORAGE_MANAGER_LAST_RUN, 393 Settings.Secure.BACKUP_AUTO_RESTORE, 394 Settings.Secure.BACKUP_ENABLED, 395 Settings.Secure.BACKUP_PROVISIONED, 396 Settings.Secure.BACKUP_TRANSPORT, 397 Settings.Secure.BLUETOOTH_HCI_LOG, 398 Settings.Secure.CARRIER_APPS_HANDLED, 399 Settings.Secure.CMAS_ADDITIONAL_BROADCAST_PKG, 400 Settings.Secure.COMPLETED_CATEGORY_PREFIX, 401 Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS, 402 Settings.Secure.DEFAULT_INPUT_METHOD, 403 Settings.Secure.DEMO_USER_SETUP_COMPLETE, 404 Settings.Secure.DEVICE_PAIRED, 405 Settings.Secure.DIALER_DEFAULT_APPLICATION, 406 Settings.Secure.DISABLED_PRINT_SERVICES, 407 Settings.Secure.DISABLED_SYSTEM_INPUT_METHODS, 408 Settings.Secure.DISPLAY_DENSITY_FORCED, 409 Settings.Secure.DOZE_ALWAYS_ON, 410 Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION, 411 Settings.Secure.ENABLED_NOTIFICATION_ASSISTANT, 412 Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES, 413 Settings.Secure.ENABLED_PRINT_SERVICES, 414 Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS, 415 Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR, 416 Settings.Secure.INPUT_METHOD_SELECTOR_VISIBILITY, 417 Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY, 418 Settings.Secure.INSTALL_NON_MARKET_APPS, 419 Settings.Secure.LAST_SETUP_SHOWN, 420 Settings.Secure.LOCATION_MODE, 421 Settings.Secure.LOCATION_PREVIOUS_MODE, 422 Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, // Candidate? 423 Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, // Candidate? 424 Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 425 Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, // Candidate? 426 Settings.Secure.LOCK_TO_APP_EXIT_LOCKED, 427 Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 428 Settings.Secure.MULTI_PRESS_TIMEOUT, 429 Settings.Secure.NFC_PAYMENT_FOREGROUND, 430 Settings.Secure.OVERVIEW_LAST_STACK_ACTIVE_TIME, 431 Settings.Secure.PACKAGE_VERIFIER_STATE, 432 Settings.Secure.PACKAGE_VERIFIER_USER_CONSENT, 433 Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE, 434 Settings.Secure.PAYMENT_SERVICE_SEARCH_URI, 435 Settings.Secure.PRINT_SERVICE_SEARCH_URI, 436 Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, // Candidate? 437 Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, // Candidate? 438 Settings.Secure.SCREENSAVER_COMPONENTS, 439 Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT, // Candidate? 440 Settings.Secure.SCREENSAVER_ENABLED, // Candidate? 441 Settings.Secure.SEARCH_GLOBAL_SEARCH_ACTIVITY, 442 Settings.Secure.SEARCH_MAX_RESULTS_PER_SOURCE, 443 Settings.Secure.SEARCH_MAX_RESULTS_TO_DISPLAY, 444 Settings.Secure.SEARCH_MAX_SHORTCUTS_RETURNED, 445 Settings.Secure.SEARCH_MAX_SOURCE_EVENT_AGE_MILLIS, 446 Settings.Secure.SEARCH_MAX_STAT_AGE_MILLIS, 447 Settings.Secure.SEARCH_MIN_CLICKS_FOR_SOURCE_RANKING, 448 Settings.Secure.SEARCH_MIN_IMPRESSIONS_FOR_SOURCE_RANKING, 449 Settings.Secure.SEARCH_NUM_PROMOTED_SOURCES, 450 Settings.Secure.SEARCH_PER_SOURCE_CONCURRENT_QUERY_LIMIT, 451 Settings.Secure.SEARCH_PREFILL_MILLIS, 452 Settings.Secure.SEARCH_PROMOTED_SOURCE_DEADLINE_MILLIS, 453 Settings.Secure.SEARCH_QUERY_THREAD_CORE_POOL_SIZE, 454 Settings.Secure.SEARCH_QUERY_THREAD_MAX_POOL_SIZE, 455 Settings.Secure.SEARCH_SHORTCUT_REFRESH_CORE_POOL_SIZE, 456 Settings.Secure.SEARCH_SHORTCUT_REFRESH_MAX_POOL_SIZE, 457 Settings.Secure.SEARCH_SOURCE_TIMEOUT_MILLIS, 458 Settings.Secure.SEARCH_THREAD_KEEPALIVE_SECONDS, 459 Settings.Secure.SEARCH_WEB_RESULTS_OVERRIDE_LIMIT, 460 Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE, 461 Settings.Secure.SETTINGS_CLASSNAME, 462 Settings.Secure.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING, // candidate? 463 Settings.Secure.SKIP_FIRST_USE_HINTS, // candidate? 464 Settings.Secure.SMS_DEFAULT_APPLICATION, 465 Settings.Secure.TRUST_AGENTS_INITIALIZED, 466 Settings.Secure.TV_INPUT_CUSTOM_LABELS, 467 Settings.Secure.TV_INPUT_HIDDEN_INPUTS, 468 Settings.Secure.UI_NIGHT_MODE, // candidate? 469 Settings.Secure.UNKNOWN_SOURCES_DEFAULT_REVERSED, 470 Settings.Secure.UNSAFE_VOLUME_MUSIC_ACTIVE_MS, 471 Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED, 472 Settings.Secure.USER_SETUP_COMPLETE, 473 Settings.Secure.VOICE_INTERACTION_SERVICE, 474 Settings.Secure.VOICE_RECOGNITION_SERVICE, 475 Settings.Secure.INSTANT_APPS_ENABLED); 476 477 @Test 478 public void systemSettingsBackedUpOrBlacklisted() { 479 checkSettingsBackedUpOrBlacklisted( 480 getCandidateSettings(Settings.System.class), 481 newHashSet(Settings.System.SETTINGS_TO_BACKUP), 482 BACKUP_BLACKLISTED_SYSTEM_SETTINGS); 483 } 484 485 @Test 486 public void globalSettingsBackedUpOrBlacklisted() { 487 checkSettingsBackedUpOrBlacklisted( 488 getCandidateSettings(Settings.Global.class), 489 newHashSet(Settings.Global.SETTINGS_TO_BACKUP), 490 BACKUP_BLACKLISTED_GLOBAL_SETTINGS); 491 } 492 493 @Test 494 public void secureSettingsBackedUpOrBlacklisted() { 495 checkSettingsBackedUpOrBlacklisted( 496 getCandidateSettings(Settings.Secure.class), 497 newHashSet(Settings.Secure.SETTINGS_TO_BACKUP), 498 BACKUP_BLACKLISTED_SECURE_SETTINGS); 499 } 500 501 private static void checkSettingsBackedUpOrBlacklisted( 502 Set<String> settings, Set<String> settingsToBackup, Set<String> blacklist) { 503 Set<String> settingsNotBackedUp = difference(settings, settingsToBackup); 504 Set<String> settingsNotBackedUpOrBlacklisted = difference(settingsNotBackedUp, blacklist); 505 assertThat( 506 "Settings not backed up or blacklisted", 507 settingsNotBackedUpOrBlacklisted, 508 is(empty())); 509 510 assertThat( 511 "blacklisted settings backed up", 512 intersect(settingsToBackup, blacklist), 513 is(empty())); 514 } 515 516 private static Set<String> getCandidateSettings(Class<? extends Settings.NameValueTable> clazz) { 517 HashSet<String> result = new HashSet<String>(); 518 for (Field field : clazz.getDeclaredFields()) { 519 if (looksLikeValidSetting(field)) { 520 try { 521 result.add((String) field.get(null)); 522 } catch (IllegalAccessException e) { 523 // Impossible for public fields 524 throw new RuntimeException(e); 525 } 526 } 527 } 528 return result; 529 } 530 531 private static boolean looksLikeValidSetting(Field field) { 532 int modifiers = field.getModifiers(); 533 return isPublic(modifiers) 534 && isStatic(modifiers) 535 && isFinal(modifiers) 536 && field.getType() == String.class 537 && field.getAnnotation(Deprecated.class) == null; 538 } 539 540 private static <T> Set<T> difference(Set<T> s1, Set<T> s2) { 541 HashSet<T> result = new HashSet<T>(s1); 542 result.removeAll(s2); 543 return result; 544 } 545 546 private static <T> Set<T> intersect(Set<T> s1, Set<T> s2) { 547 HashSet<T> result = new HashSet<T>(s1); 548 result.retainAll(s2); 549 return result; 550 } 551 552} 553