Make settings backup/restore work in the new multi-user world

1) Properly handle restores of settings elements that have been migrated
   to the new global namespace

1) Back up and restore the new global settings namespace

3) Make sure to back up / restore the global entity
   ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED

Bug 7249405

Change-Id: Ibfa9930ea4d0e16c7635697e8c631b155e4c0cb2
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 1096540..ba7501b 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -46,7 +46,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.Reader;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -64,25 +63,35 @@
 
     private static final String KEY_SYSTEM = "system";
     private static final String KEY_SECURE = "secure";
+    private static final String KEY_GLOBAL = "global";
     private static final String KEY_LOCALE = "locale";
 
-    //Version 2 adds STATE_WIFI_CONFIG
-    private static final int STATE_VERSION_1       = 1;
-    private static final int STATE_VERSION_1_SIZE  = 4;
-
     // Versioning of the state file.  Increment this version
     // number any time the set of state items is altered.
-    private static final int STATE_VERSION = 2;
+    private static final int STATE_VERSION = 3;
 
+    // Slots in the checksum array.  Never insert new items in the middle
+    // of this array; new slots must be appended.
     private static final int STATE_SYSTEM          = 0;
     private static final int STATE_SECURE          = 1;
     private static final int STATE_LOCALE          = 2;
     private static final int STATE_WIFI_SUPPLICANT = 3;
     private static final int STATE_WIFI_CONFIG     = 4;
-    private static final int STATE_SIZE            = 5; // The number of state items
+    private static final int STATE_GLOBAL          = 5;
+
+    private static final int STATE_SIZE            = 6; // The current number of state items
+
+    // Number of entries in the checksum array at various version numbers
+    private static final int STATE_SIZES[] = {
+        0,
+        4,              // version 1
+        5,              // version 2 added STATE_WIFI_CONFIG
+        STATE_SIZE      // version 3 added STATE_GLOBAL
+    };
 
     // Versioning of the 'full backup' format
-    private static final int FULL_BACKUP_VERSION = 1;
+    private static final int FULL_BACKUP_VERSION = 2;
+    private static final int FULL_BACKUP_ADDED_GLOBAL = 2;  // added the "global" entry
 
     private static final int INTEGER_BYTE_COUNT = Integer.SIZE / Byte.SIZE;
 
@@ -257,6 +266,7 @@
 
         byte[] systemSettingsData = getSystemSettings();
         byte[] secureSettingsData = getSecureSettings();
+        byte[] globalSettingsData = getGlobalSettings();
         byte[] locale = mSettingsHelper.getLocaleData();
         byte[] wifiSupplicantData = getWifiSupplicant(FILE_WIFI_SUPPLICANT);
         byte[] wifiConfigData = getFileData(mWifiConfigFile);
@@ -267,6 +277,8 @@
             writeIfChanged(stateChecksums[STATE_SYSTEM], KEY_SYSTEM, systemSettingsData, data);
         stateChecksums[STATE_SECURE] =
             writeIfChanged(stateChecksums[STATE_SECURE], KEY_SECURE, secureSettingsData, data);
+        stateChecksums[STATE_GLOBAL] =
+            writeIfChanged(stateChecksums[STATE_GLOBAL], KEY_GLOBAL, secureSettingsData, data);
         stateChecksums[STATE_LOCALE] =
             writeIfChanged(stateChecksums[STATE_LOCALE], KEY_LOCALE, locale, data);
         stateChecksums[STATE_WIFI_SUPPLICANT] =
@@ -283,14 +295,18 @@
     public void onRestore(BackupDataInput data, int appVersionCode,
             ParcelFileDescriptor newState) throws IOException {
 
+        HashSet<String> movedToGlobal = new HashSet<String>();
+        Settings.System.getMovedKeys(movedToGlobal);
+        Settings.Secure.getMovedKeys(movedToGlobal);
+
         while (data.readNextHeader()) {
             final String key = data.getKey();
             final int size = data.getDataSize();
             if (KEY_SYSTEM.equals(key)) {
-                restoreSettings(data, Settings.System.CONTENT_URI);
+                restoreSettings(data, Settings.System.CONTENT_URI, movedToGlobal);
                 mSettingsHelper.applyAudioSettings();
             } else if (KEY_SECURE.equals(key)) {
-                restoreSettings(data, Settings.Secure.CONTENT_URI);
+                restoreSettings(data, Settings.Secure.CONTENT_URI, movedToGlobal);
             } else if (KEY_WIFI_SUPPLICANT.equals(key)) {
                 int retainedWifiState = enableWifi(false);
                 restoreWifiSupplicant(FILE_WIFI_SUPPLICANT, data);
@@ -317,6 +333,7 @@
     public void onFullBackup(FullBackupDataOutput data)  throws IOException {
         byte[] systemSettingsData = getSystemSettings();
         byte[] secureSettingsData = getSecureSettings();
+        byte[] globalSettingsData = getGlobalSettings();
         byte[] locale = mSettingsHelper.getLocaleData();
         byte[] wifiSupplicantData = getWifiSupplicant(FILE_WIFI_SUPPLICANT);
         byte[] wifiConfigData = getFileData(mWifiConfigFile);
@@ -339,6 +356,9 @@
             if (DEBUG_BACKUP) Log.d(TAG, secureSettingsData.length + " bytes of secure settings data");
             out.writeInt(secureSettingsData.length);
             out.write(secureSettingsData);
+            if (DEBUG_BACKUP) Log.d(TAG, globalSettingsData.length + " bytes of global settings data");
+            out.writeInt(globalSettingsData.length);
+            out.write(globalSettingsData);
             if (DEBUG_BACKUP) Log.d(TAG, locale.length + " bytes of locale data");
             out.writeInt(locale.length);
             out.write(locale);
@@ -371,20 +391,35 @@
 
         int version = in.readInt();
         if (DEBUG_BACKUP) Log.d(TAG, "Flattened data version " + version);
-        if (version == FULL_BACKUP_VERSION) {
+        if (version <= FULL_BACKUP_VERSION) {
+            // Generate the moved-to-global lookup table
+            HashSet<String> movedToGlobal = new HashSet<String>();
+            Settings.System.getMovedKeys(movedToGlobal);
+            Settings.Secure.getMovedKeys(movedToGlobal);
+
             // system settings data first
             int nBytes = in.readInt();
             if (DEBUG_BACKUP) Log.d(TAG, nBytes + " bytes of settings data");
             byte[] buffer = new byte[nBytes];
             in.readFully(buffer, 0, nBytes);
-            restoreSettings(buffer, nBytes, Settings.System.CONTENT_URI);
+            restoreSettings(buffer, nBytes, Settings.System.CONTENT_URI, movedToGlobal);
 
             // secure settings
             nBytes = in.readInt();
             if (DEBUG_BACKUP) Log.d(TAG, nBytes + " bytes of secure settings data");
             if (nBytes > buffer.length) buffer = new byte[nBytes];
             in.readFully(buffer, 0, nBytes);
-            restoreSettings(buffer, nBytes, Settings.Secure.CONTENT_URI);
+            restoreSettings(buffer, nBytes, Settings.Secure.CONTENT_URI, movedToGlobal);
+
+            // Global only if sufficiently new
+            if (version >= FULL_BACKUP_ADDED_GLOBAL) {
+                nBytes = in.readInt();
+                if (DEBUG_BACKUP) Log.d(TAG, nBytes + " bytes of global settings data");
+                if (nBytes > buffer.length) buffer = new byte[nBytes];
+                in.readFully(buffer, 0, nBytes);
+                movedToGlobal.clear();  // no redirection; this *is* the global namespace
+                restoreSettings(buffer, nBytes, Settings.Global.CONTENT_URI, movedToGlobal);
+            }
 
             // locale
             nBytes = in.readInt();
@@ -430,14 +465,8 @@
 
         try {
             int stateVersion = dataInput.readInt();
-            if (stateVersion == STATE_VERSION_1) {
-                for (int i = 0; i < STATE_VERSION_1_SIZE; i++) {
-                    stateChecksums[i] = dataInput.readLong();
-                }
-            } else if (stateVersion == STATE_VERSION) {
-                for (int i = 0; i < STATE_SIZE; i++) {
-                    stateChecksums[i] = dataInput.readLong();
-                }
+            for (int i = 0; i < STATE_SIZES[stateVersion]; i++) {
+                stateChecksums[i] = dataInput.readLong();
             }
         } catch (EOFException eof) {
             // With the default 0 checksum we'll wind up forcing a backup of
@@ -496,7 +525,18 @@
         }
     }
 
-    private void restoreSettings(BackupDataInput data, Uri contentUri) {
+    private byte[] getGlobalSettings() {
+        Cursor cursor = getContentResolver().query(Settings.Global.CONTENT_URI, PROJECTION, null,
+                null, null);
+        try {
+            return extractRelevantValues(cursor, Settings.Global.SETTINGS_TO_BACKUP);
+        } finally {
+            cursor.close();
+        }
+    }
+
+    private void restoreSettings(BackupDataInput data, Uri contentUri,
+            HashSet<String> movedToGlobal) {
         byte[] settings = new byte[data.getDataSize()];
         try {
             data.readEntityData(settings, 0, settings.length);
@@ -504,20 +544,23 @@
             Log.e(TAG, "Couldn't read entity data");
             return;
         }
-        restoreSettings(settings, settings.length, contentUri);
+        restoreSettings(settings, settings.length, contentUri, movedToGlobal);
     }
 
-    private void restoreSettings(byte[] settings, int bytes, Uri contentUri) {
+    private void restoreSettings(byte[] settings, int bytes, Uri contentUri,
+            HashSet<String> movedToGlobal) {
         if (DEBUG) {
             Log.i(TAG, "restoreSettings: " + contentUri);
         }
 
-        // Figure out the white list.
+        // Figure out the white list and redirects to the global table.
         String[] whitelist = null;
         if (contentUri.equals(Settings.Secure.CONTENT_URI)) {
             whitelist = Settings.Secure.SETTINGS_TO_BACKUP;
         } else if (contentUri.equals(Settings.System.CONTENT_URI)) {
             whitelist = Settings.System.SETTINGS_TO_BACKUP;
+        } else if (contentUri.equals(Settings.Global.CONTENT_URI)) {
+            whitelist = Settings.Global.SETTINGS_TO_BACKUP;
         } else {
             throw new IllegalArgumentException("Unknown URI: " + contentUri);
         }
@@ -556,15 +599,20 @@
                 continue;
             }
 
+            final Uri destination = (movedToGlobal.contains(key))
+                    ? Settings.Global.CONTENT_URI
+                    : contentUri;
+
+            // The helper doesn't care what namespace the keys are in
             if (settingsHelper.restoreValue(key, value)) {
                 contentValues.clear();
                 contentValues.put(Settings.NameValueTable.NAME, key);
                 contentValues.put(Settings.NameValueTable.VALUE, value);
-                getContentResolver().insert(contentUri, contentValues);
+                getContentResolver().insert(destination, contentValues);
             }
 
             if (DEBUG || true) {
-                Log.d(TAG, "Restored setting: " + key + "=" + value);
+                Log.d(TAG, "Restored setting: " + destination + " : "+ key + "=" + value);
             }
         }
     }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index cc6656d..ad35f7f 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -110,158 +110,12 @@
         // table, shared across all users
         // These must match Settings.Secure.MOVED_TO_GLOBAL
         sSecureGlobalKeys = new HashSet<String>();
-        sSecureGlobalKeys.add(Settings.Global.ADB_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.ASSISTED_GPS_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.BLUETOOTH_ON);
-        sSecureGlobalKeys.add(Settings.Global.CDMA_CELL_BROADCAST_SMS);
-        sSecureGlobalKeys.add(Settings.Global.CDMA_ROAMING_MODE);
-        sSecureGlobalKeys.add(Settings.Global.CDMA_SUBSCRIPTION_MODE);
-        sSecureGlobalKeys.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE);
-        sSecureGlobalKeys.add(Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI);
-        sSecureGlobalKeys.add(Settings.Global.DATA_ROAMING);
-        sSecureGlobalKeys.add(Settings.Global.DEVELOPMENT_SETTINGS_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.DEVICE_PROVISIONED);
-        sSecureGlobalKeys.add(Settings.Global.DISPLAY_DENSITY_FORCED);
-        sSecureGlobalKeys.add(Settings.Global.DISPLAY_SIZE_FORCED);
-        sSecureGlobalKeys.add(Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
-        sSecureGlobalKeys.add(Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
-        sSecureGlobalKeys.add(Settings.Global.INSTALL_NON_MARKET_APPS);
-        sSecureGlobalKeys.add(Settings.Global.MOBILE_DATA);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_DEV_BUCKET_DURATION);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_DEV_DELETE_AGE);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_DEV_PERSIST_BYTES);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_DEV_ROTATE_AGE);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_POLL_INTERVAL);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_REPORT_XT_OVER_DEV);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_SAMPLE_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_BUCKET_DURATION);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_DELETE_AGE);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_PERSIST_BYTES);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_ROTATE_AGE);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_TAG_DELETE_AGE);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES);
-        sSecureGlobalKeys.add(Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE);
-        sSecureGlobalKeys.add(Settings.Global.NETWORK_PREFERENCE);
-        sSecureGlobalKeys.add(Settings.Global.NITZ_UPDATE_DIFF);
-        sSecureGlobalKeys.add(Settings.Global.NITZ_UPDATE_SPACING);
-        sSecureGlobalKeys.add(Settings.Global.NTP_SERVER);
-        sSecureGlobalKeys.add(Settings.Global.NTP_TIMEOUT);
-        sSecureGlobalKeys.add(Settings.Global.PDP_WATCHDOG_ERROR_POLL_COUNT);
-        sSecureGlobalKeys.add(Settings.Global.PDP_WATCHDOG_LONG_POLL_INTERVAL_MS);
-        sSecureGlobalKeys.add(Settings.Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT);
-        sSecureGlobalKeys.add(Settings.Global.PDP_WATCHDOG_POLL_INTERVAL_MS);
-        sSecureGlobalKeys.add(Settings.Global.PDP_WATCHDOG_TRIGGER_PACKET_COUNT);
-        sSecureGlobalKeys.add(Settings.Global.SAMPLING_PROFILER_MS);
-        sSecureGlobalKeys.add(Settings.Global.SETUP_PREPAID_DATA_SERVICE_URL);
-        sSecureGlobalKeys.add(Settings.Global.SETUP_PREPAID_DETECTION_REDIR_HOST);
-        sSecureGlobalKeys.add(Settings.Global.SETUP_PREPAID_DETECTION_TARGET_URL);
-        sSecureGlobalKeys.add(Settings.Global.TETHER_DUN_APN);
-        sSecureGlobalKeys.add(Settings.Global.TETHER_DUN_REQUIRED);
-        sSecureGlobalKeys.add(Settings.Global.TETHER_SUPPORTED);
-        sSecureGlobalKeys.add(Settings.Global.THROTTLE_HELP_URI);
-        sSecureGlobalKeys.add(Settings.Global.THROTTLE_MAX_NTP_CACHE_AGE_SEC);
-        sSecureGlobalKeys.add(Settings.Global.THROTTLE_NOTIFICATION_TYPE);
-        sSecureGlobalKeys.add(Settings.Global.THROTTLE_POLLING_SEC);
-        sSecureGlobalKeys.add(Settings.Global.THROTTLE_RESET_DAY);
-        sSecureGlobalKeys.add(Settings.Global.THROTTLE_THRESHOLD_BYTES);
-        sSecureGlobalKeys.add(Settings.Global.THROTTLE_VALUE_KBITSPS);
-        sSecureGlobalKeys.add(Settings.Global.USB_MASS_STORAGE_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.USE_GOOGLE_MAIL);
-        sSecureGlobalKeys.add(Settings.Global.WEB_AUTOFILL_QUERY_URL);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_COUNTRY_CODE);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_FREQUENCY_BAND);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_IDLE_MS);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_ON);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_P2P_DEVICE_NAME);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_SAVED_STATE);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_WATCHDOG_ON);
-        sSecureGlobalKeys.add(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
-        sSecureGlobalKeys.add(Settings.Global.PACKAGE_VERIFIER_ENABLE);
-        sSecureGlobalKeys.add(Settings.Global.PACKAGE_VERIFIER_TIMEOUT);
-        sSecureGlobalKeys.add(Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
-        sSecureGlobalKeys.add(Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
-        sSecureGlobalKeys.add(Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
-        sSecureGlobalKeys.add(Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS);
-        sSecureGlobalKeys.add(Settings.Global.WTF_IS_FATAL);
-        sSecureGlobalKeys.add(Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD);
-        sSecureGlobalKeys.add(Settings.Global.BATTERY_DISCHARGE_THRESHOLD);
-        sSecureGlobalKeys.add(Settings.Global.SEND_ACTION_APP_ERROR);
-        sSecureGlobalKeys.add(Settings.Global.DROPBOX_AGE_SECONDS);
-        sSecureGlobalKeys.add(Settings.Global.DROPBOX_MAX_FILES);
-        sSecureGlobalKeys.add(Settings.Global.DROPBOX_QUOTA_KB);
-        sSecureGlobalKeys.add(Settings.Global.DROPBOX_QUOTA_PERCENT);
-        sSecureGlobalKeys.add(Settings.Global.DROPBOX_RESERVE_PERCENT);
-        sSecureGlobalKeys.add(Settings.Global.DROPBOX_TAG_PREFIX);
-        sSecureGlobalKeys.add(Settings.Global.ERROR_LOGCAT_PREFIX);
-        sSecureGlobalKeys.add(Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL);
-        sSecureGlobalKeys.add(Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD);
-        sSecureGlobalKeys.add(Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE);
-        sSecureGlobalKeys.add(Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES);
-        sSecureGlobalKeys.add(Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES);
-        sSecureGlobalKeys.add(Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS);
-        sSecureGlobalKeys.add(Settings.Global.CONNECTIVITY_CHANGE_DELAY);
-        sSecureGlobalKeys.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED);
-        sSecureGlobalKeys.add(Settings.Global.CAPTIVE_PORTAL_SERVER);
-        sSecureGlobalKeys.add(Settings.Global.NSD_ON);
-        sSecureGlobalKeys.add(Settings.Global.SET_INSTALL_LOCATION);
-        sSecureGlobalKeys.add(Settings.Global.DEFAULT_INSTALL_LOCATION);
-        sSecureGlobalKeys.add(Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY);
-        sSecureGlobalKeys.add(Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY);
-        sSecureGlobalKeys.add(Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT);
-        sSecureGlobalKeys.add(Settings.Global.HTTP_PROXY);
-        sSecureGlobalKeys.add(Settings.Global.GLOBAL_HTTP_PROXY_HOST);
-        sSecureGlobalKeys.add(Settings.Global.GLOBAL_HTTP_PROXY_PORT);
-        sSecureGlobalKeys.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
-        sSecureGlobalKeys.add(Settings.Global.SET_GLOBAL_HTTP_PROXY);
-        sSecureGlobalKeys.add(Settings.Global.DEFAULT_DNS_SERVER);
-        sSecureGlobalKeys.add(Settings.Global.PREFERRED_NETWORK_MODE);
-        sSecureGlobalKeys.add(Settings.Global.PREFERRED_CDMA_SUBSCRIPTION);
+        Settings.Secure.getMovedKeys(sSecureGlobalKeys);
 
         // Keys from the 'system' table now moved to 'global'
         // These must match Settings.System.MOVED_TO_GLOBAL
         sSystemGlobalKeys = new HashSet<String>();
-
-        sSystemGlobalKeys.add(Settings.Global.AIRPLANE_MODE_ON);
-        sSystemGlobalKeys.add(Settings.Global.AIRPLANE_MODE_RADIOS);
-        sSystemGlobalKeys.add(Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
-        sSystemGlobalKeys.add(Settings.Global.AUTO_TIME);
-        sSystemGlobalKeys.add(Settings.Global.AUTO_TIME_ZONE);
-        sSystemGlobalKeys.add(Settings.Global.CAR_DOCK_SOUND);
-        sSystemGlobalKeys.add(Settings.Global.CAR_UNDOCK_SOUND);
-        sSystemGlobalKeys.add(Settings.Global.DESK_DOCK_SOUND);
-        sSystemGlobalKeys.add(Settings.Global.DESK_UNDOCK_SOUND);
-        sSystemGlobalKeys.add(Settings.Global.DOCK_SOUNDS_ENABLED);
-        sSystemGlobalKeys.add(Settings.Global.LOCK_SOUND);
-        sSystemGlobalKeys.add(Settings.Global.UNLOCK_SOUND);
-        sSystemGlobalKeys.add(Settings.Global.LOW_BATTERY_SOUND);
-        sSystemGlobalKeys.add(Settings.Global.POWER_SOUNDS_ENABLED);
-        sSystemGlobalKeys.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
-        sSystemGlobalKeys.add(Settings.Global.WIFI_SLEEP_POLICY);
-        sSystemGlobalKeys.add(Settings.Global.MODE_RINGER);
-        sSystemGlobalKeys.add(Settings.Global.WINDOW_ANIMATION_SCALE);
-        sSystemGlobalKeys.add(Settings.Global.TRANSITION_ANIMATION_SCALE);
-        sSystemGlobalKeys.add(Settings.Global.ANIMATOR_DURATION_SCALE);
-        sSystemGlobalKeys.add(Settings.Global.FANCY_IME_ANIMATIONS);
-        sSystemGlobalKeys.add(Settings.Global.COMPATIBILITY_MODE);
-        sSystemGlobalKeys.add(Settings.Global.EMERGENCY_TONE);
-        sSystemGlobalKeys.add(Settings.Global.CALL_AUTO_RETRY);
-        sSystemGlobalKeys.add(Settings.Global.DEBUG_APP);
-        sSystemGlobalKeys.add(Settings.Global.WAIT_FOR_DEBUGGER);
-        sSystemGlobalKeys.add(Settings.Global.SHOW_PROCESSES);
-        sSystemGlobalKeys.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES);
+        Settings.System.getNonLegacyMovedKeys(sSystemGlobalKeys);
     }
 
     private boolean settingMovedToGlobal(final String name) {