Merge "Make settings backup/restore work in the new multi-user world" into jb-mr1-dev

This commit is contained in:
Christopher Tate
2012-10-03 11:54:01 -07:00
committed by Android (Google) Code Review
3 changed files with 148 additions and 198 deletions

View File

@@ -911,17 +911,20 @@ public final class Settings {
}
private static final HashSet<String> MOVED_TO_GLOBAL;
private static final HashSet<String> MOVED_TO_SECURE_THEN_GLOBAL;
static {
MOVED_TO_GLOBAL = new HashSet<String>();
MOVED_TO_SECURE_THEN_GLOBAL = new HashSet<String>();
// these were originally in system but migrated to secure in the past,
// so are duplicated in the Secure.* namespace
MOVED_TO_GLOBAL.add(Global.ADB_ENABLED);
MOVED_TO_GLOBAL.add(Global.BLUETOOTH_ON);
MOVED_TO_GLOBAL.add(Global.DATA_ROAMING);
MOVED_TO_GLOBAL.add(Global.DEVICE_PROVISIONED);
MOVED_TO_GLOBAL.add(Global.INSTALL_NON_MARKET_APPS);
MOVED_TO_GLOBAL.add(Global.USB_MASS_STORAGE_ENABLED);
MOVED_TO_GLOBAL.add(Global.HTTP_PROXY);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.ADB_ENABLED);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.BLUETOOTH_ON);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DATA_ROAMING);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DEVICE_PROVISIONED);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.INSTALL_NON_MARKET_APPS);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.USB_MASS_STORAGE_ENABLED);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.HTTP_PROXY);
// these are moving directly from system to global
MOVED_TO_GLOBAL.add(Settings.Global.AIRPLANE_MODE_ON);
@@ -954,6 +957,17 @@ public final class Settings {
MOVED_TO_GLOBAL.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES);
}
/** @hide */
public static void getMovedKeys(HashSet<String> outKeySet) {
outKeySet.addAll(MOVED_TO_GLOBAL);
outKeySet.addAll(MOVED_TO_SECURE_THEN_GLOBAL);
}
/** @hide */
public static void getNonLegacyMovedKeys(HashSet<String> outKeySet) {
outKeySet.addAll(MOVED_TO_GLOBAL);
}
/**
* Look up a name in the database.
* @param resolver to access the database with
@@ -972,7 +986,7 @@ public final class Settings {
+ " to android.provider.Settings.Secure, returning read-only value.");
return Secure.getStringForUser(resolver, name, userHandle);
}
if (MOVED_TO_GLOBAL.contains(name)) {
if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
+ " to android.provider.Settings.Global, returning read-only value.");
return Global.getStringForUser(resolver, name, userHandle);
@@ -999,7 +1013,7 @@ public final class Settings {
+ " to android.provider.Settings.Secure, value is unchanged.");
return false;
}
if (MOVED_TO_GLOBAL.contains(name)) {
if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
+ " to android.provider.Settings.Global, value is unchanged.");
return false;
@@ -1019,7 +1033,7 @@ public final class Settings {
+ " to android.provider.Settings.Secure, returning Secure URI.");
return Secure.getUriFor(Secure.CONTENT_URI, name);
}
if (MOVED_TO_GLOBAL.contains(name)) {
if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) {
Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System"
+ " to android.provider.Settings.Global, returning read-only global URI.");
return Global.getUriFor(Global.CONTENT_URI, name);
@@ -2257,7 +2271,7 @@ public final class Settings {
* @hide
*/
public static final String[] SETTINGS_TO_BACKUP = {
STAY_ON_WHILE_PLUGGED_IN,
STAY_ON_WHILE_PLUGGED_IN, // moved to global
WIFI_USE_STATIC_IP,
WIFI_STATIC_IP,
WIFI_STATIC_GATEWAY,
@@ -2272,7 +2286,7 @@ public final class Settings {
SCREEN_BRIGHTNESS_MODE,
SCREEN_AUTO_BRIGHTNESS_ADJ,
VIBRATE_INPUT_DEVICES,
MODE_RINGER,
MODE_RINGER, // moved to global
MODE_RINGER_STREAMS_AFFECTED,
MUTE_STREAMS_AFFECTED,
VOLUME_VOICE,
@@ -2293,20 +2307,18 @@ public final class Settings {
TEXT_AUTO_CAPS,
TEXT_AUTO_PUNCTUATE,
TEXT_SHOW_PASSWORD,
AUTO_TIME,
AUTO_TIME_ZONE,
AUTO_TIME, // moved to global
AUTO_TIME_ZONE, // moved to global
TIME_12_24,
DATE_FORMAT,
DTMF_TONE_WHEN_DIALING,
DTMF_TONE_TYPE_WHEN_DIALING,
Global.EMERGENCY_TONE,
Global.CALL_AUTO_RETRY,
HEARING_AID,
TTY_MODE,
SOUND_EFFECTS_ENABLED,
HAPTIC_FEEDBACK_ENABLED,
POWER_SOUNDS_ENABLED,
DOCK_SOUNDS_ENABLED,
POWER_SOUNDS_ENABLED, // moved to global
DOCK_SOUNDS_ENABLED, // moved to global
LOCKSCREEN_SOUNDS_ENABLED,
SHOW_WEB_SUGGESTIONS,
NOTIFICATION_LIGHT_PULSE,
@@ -2702,6 +2714,11 @@ public final class Settings {
MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_CDMA_SUBSCRIPTION);
}
/** @hide */
public static void getMovedKeys(HashSet<String> outKeySet) {
outKeySet.addAll(MOVED_TO_GLOBAL);
}
/**
* Look up a name in the database.
* @param resolver to access the database with
@@ -3993,12 +4010,11 @@ public final class Settings {
* @hide
*/
public static final String[] SETTINGS_TO_BACKUP = {
ADB_ENABLED,
BUGREPORT_IN_POWER_MENU,
ALLOW_MOCK_LOCATION,
PARENTAL_CONTROL_ENABLED,
PARENTAL_CONTROL_REDIRECT_URL,
USB_MASS_STORAGE_ENABLED,
USB_MASS_STORAGE_ENABLED, // moved to global
ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE,
@@ -4017,9 +4033,9 @@ public final class Settings {
TTS_DEFAULT_COUNTRY,
TTS_ENABLED_PLUGINS,
TTS_DEFAULT_LOCALE,
WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
WIFI_NUM_OPEN_NETWORKS_KEPT,
WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, // moved to global
WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, // moved to global
WIFI_NUM_OPEN_NETWORKS_KEPT, // moved to global
MOUNT_PLAY_NOTIFICATION_SND,
MOUNT_UMS_AUTOSTART,
MOUNT_UMS_PROMPT,
@@ -5251,6 +5267,38 @@ public final class Settings {
public static final String ALWAYS_FINISH_ACTIVITIES =
"always_finish_activities";
/**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
*
* These keys may be mentioned in the SETTINGS_TO_BACKUP arrays in System
* and Secure as well. This is because those tables drive both backup and
* restore, and restore needs to properly whitelist keys that used to live
* in those namespaces. The keys will only actually be backed up / restored
* if they are also mentioned in this table (Global.SETTINGS_TO_BACKUP).
*
* NOTE: Settings are backed up and restored in the order they appear
* in this array. If you have one setting depending on another,
* make sure that they are ordered appropriately.
*
* @hide
*/
public static final String[] SETTINGS_TO_BACKUP = {
STAY_ON_WHILE_PLUGGED_IN,
MODE_RINGER,
AUTO_TIME,
AUTO_TIME_ZONE,
POWER_SOUNDS_ENABLED,
DOCK_SOUNDS_ENABLED,
USB_MASS_STORAGE_ENABLED,
ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY,
WIFI_NUM_OPEN_NETWORKS_KEPT,
EMERGENCY_TONE,
CALL_AUTO_RETRY,
};
// Populated lazily, guarded by class object:
private static NameValueCache sNameValueCache = new NameValueCache(
SYS_PROP_SETTING_VERSION,

View File

@@ -46,7 +46,6 @@ import java.io.FileWriter;
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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 class SettingsBackupAgent extends BackupAgentHelper {
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 class SettingsBackupAgent extends BackupAgentHelper {
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
}
}
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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 @@ public class SettingsBackupAgent extends BackupAgentHelper {
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);
}
}
}

View File

@@ -110,158 +110,12 @@ public class SettingsProvider extends ContentProvider {
// 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) {