Merge "Make settings backup/restore work in the new multi-user world" into jb-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1795325af7
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user