summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-07-07 18:59:28 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-07-07 18:59:28 -0700
commitd6fe243c1c6d5e994cacede8110eef736767bd7f (patch)
tree1ea1e79ce0d7a59c16c6e685f586bf79909b0d02 /packages
parenta83bef597430e9336566ca38330cc0f4e793abe1 (diff)
parent8823c0a8c68fe669c21c539eef9fc6541f0c7494 (diff)
downloadframeworks_base-d6fe243c1c6d5e994cacede8110eef736767bd7f.zip
frameworks_base-d6fe243c1c6d5e994cacede8110eef736767bd7f.tar.gz
frameworks_base-d6fe243c1c6d5e994cacede8110eef736767bd7f.tar.bz2
Merge change 6437 into donut
* changes: Backup / Restore locale preference.
Diffstat (limited to 'packages')
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java17
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java56
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java16
3 files changed, 74 insertions, 15 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index f9e98ef..b6bc8a5 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -50,6 +50,7 @@ public class SettingsBackupAgent extends BackupHelperAgent {
private static final String KEY_SYSTEM = "system";
private static final String KEY_SECURE = "secure";
private static final String KEY_SYNC = "sync_providers";
+ private static final String KEY_LOCALE = "locale";
private static String[] sortedSystemKeys = null;
private static String[] sortedSecureKeys = null;
@@ -85,6 +86,7 @@ public class SettingsBackupAgent extends BackupHelperAgent {
byte[] systemSettingsData = getSystemSettings();
byte[] secureSettingsData = getSecureSettings();
byte[] syncProviders = mSettingsHelper.getSyncProviders();
+ byte[] locale = mSettingsHelper.getLocaleData();
data.writeEntityHeader(KEY_SYSTEM, systemSettingsData.length);
data.writeEntityData(systemSettingsData, systemSettingsData.length);
@@ -94,7 +96,10 @@ public class SettingsBackupAgent extends BackupHelperAgent {
data.writeEntityHeader(KEY_SYNC, syncProviders.length);
data.writeEntityData(syncProviders, syncProviders.length);
-
+
+ data.writeEntityHeader(KEY_LOCALE, locale.length);
+ data.writeEntityData(locale, locale.length);
+
backupFile(FILE_WIFI_SUPPLICANT, data);
}
@@ -107,14 +112,20 @@ public class SettingsBackupAgent extends BackupHelperAgent {
while (data.readNextHeader()) {
final String key = data.getKey();
+ final int size = data.getDataSize();
if (KEY_SYSTEM.equals(key)) {
restoreSettings(data, Settings.System.CONTENT_URI);
} else if (KEY_SECURE.equals(key)) {
restoreSettings(data, Settings.Secure.CONTENT_URI);
- } else if (FILE_WIFI_SUPPLICANT.equals(key)) {
- restoreFile(FILE_WIFI_SUPPLICANT, data);
+// TODO: Re-enable WIFI restore when we figure out a solution for the permissions
+// } else if (FILE_WIFI_SUPPLICANT.equals(key)) {
+// restoreFile(FILE_WIFI_SUPPLICANT, data);
} else if (KEY_SYNC.equals(key)) {
mSettingsHelper.setSyncProviders(data);
+ } else if (KEY_LOCALE.equals(key)) {
+ byte[] localeData = new byte[size];
+ data.readEntityData(localeData, 0, size);
+ mSettingsHelper.setLocaleData(localeData);
} else {
data.skipEntityData();
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 5f3fba8..2c5775a 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -16,16 +16,22 @@
package com.android.providers.settings;
+import java.util.Locale;
+
+import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
import android.backup.BackupDataInput;
import android.content.ContentResolver;
import android.content.Context;
import android.content.IContentService;
+import android.content.res.Configuration;
import android.location.LocationManager;
import android.media.AudioManager;
import android.os.IHardwareService;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.Settings;
+import android.text.TextUtils;
import android.util.Log;
public class SettingsHelper {
@@ -110,7 +116,6 @@ public class SettingsHelper {
}
}
- /* TODO: Get a list of all sync providers and save/restore the settings */
byte[] getSyncProviders() {
byte[] sync = new byte[1 + PROVIDERS.length];
try {
@@ -141,4 +146,53 @@ public class SettingsHelper {
Log.w(TAG, "Unable to read sync settings");
}
}
+
+ byte[] getLocaleData() {
+ Configuration conf = mContext.getResources().getConfiguration();
+ final Locale loc = conf.locale;
+ String localeString = loc.getLanguage();
+ String country = loc.getCountry();
+ if (!TextUtils.isEmpty(country)) {
+ localeString += "_" + country;
+ }
+ return localeString.getBytes();
+ }
+
+ /**
+ * Sets the locale specified. Input data is the equivalent of "ll_cc".getBytes(), where
+ * "ll" is the language code and "cc" is the country code.
+ * @param data the locale string in bytes.
+ */
+ void setLocaleData(byte[] data) {
+ // Check if locale was set by the user:
+ Configuration conf = mContext.getResources().getConfiguration();
+ Locale loc = conf.locale;
+ if (conf.userSetLocale) return; // Don't change if user set it in the SetupWizard
+
+ final String[] availableLocales = mContext.getAssets().getLocales();
+ String localeCode = new String(data);
+ String language = new String(data, 0, 2);
+ String country = data.length > 4 ? new String(data, 3, 2) : "";
+ loc = null;
+ for (int i = 0; i < availableLocales.length; i++) {
+ if (availableLocales[i].equals(localeCode)) {
+ loc = new Locale(language, country);
+ break;
+ }
+ }
+ if (loc == null) return; // Couldn't find the saved locale in this version of the software
+
+ try {
+ IActivityManager am = ActivityManagerNative.getDefault();
+ Configuration config = am.getConfiguration();
+ config.locale = loc;
+ // indicate this isn't some passing default - the user wants this remembered
+ config.userSetLocale = true;
+
+ am.updateConfiguration(config);
+ } catch (RemoteException e) {
+ // Intentionally left blank
+ }
+
+ }
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index a21bf32..2abf8b3 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -18,7 +18,7 @@ package com.android.providers.settings;
import java.io.FileNotFoundException;
-import android.backup.IBackupManager;
+import android.backup.BackupManager;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
@@ -46,6 +46,8 @@ public class SettingsProvider extends ContentProvider {
private static final String TABLE_OLD_FAVORITES = "old_favorites";
private DatabaseHelper mOpenHelper;
+
+ private BackupManager mBackupManager;
/**
* Decode a content URL into the table, projection, and arguments
@@ -140,16 +142,7 @@ public class SettingsProvider extends ContentProvider {
}
// Inform the backup manager about a data change
- IBackupManager ibm = IBackupManager.Stub.asInterface(
- ServiceManager.getService(Context.BACKUP_SERVICE));
- if (ibm != null) {
- try {
- ibm.dataChanged(getContext().getPackageName());
- } catch (Exception e) {
- // Try again later
- }
- }
-
+ mBackupManager.dataChanged();
// Now send the notification through the content framework.
String notify = uri.getQueryParameter("notify");
@@ -189,6 +182,7 @@ public class SettingsProvider extends ContentProvider {
@Override
public boolean onCreate() {
mOpenHelper = new DatabaseHelper(getContext());
+ mBackupManager = new BackupManager(getContext());
return true;
}