diff options
-rw-r--r-- | services/java/com/android/server/AppWidgetService.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java index f8b8ecc..6bf7102 100644 --- a/services/java/com/android/server/AppWidgetService.java +++ b/services/java/com/android/server/AppWidgetService.java @@ -51,6 +51,7 @@ import java.io.FileOutputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.HashMap; import java.util.HashSet; @@ -105,6 +106,7 @@ class AppWidgetService extends IAppWidgetService.Stub } Context mContext; + Locale mLocale; PackageManager mPackageManager; AlarmManager mAlarmManager; ArrayList<Provider> mInstalledProviders = new ArrayList<Provider>(); @@ -131,6 +133,11 @@ class AppWidgetService extends IAppWidgetService.Stub mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null); + // Register for configuration changes so we can update the names + // of the widgets when the locale changes. + mContext.registerReceiver(mBroadcastReceiver, + new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED), null, null); + // Register for broadcasts about package install, etc., so we can // update the provider list. IntentFilter filter = new IntentFilter(); @@ -1046,6 +1053,22 @@ class AppWidgetService extends IAppWidgetService.Stub //Log.d(TAG, "received " + action); if (Intent.ACTION_BOOT_COMPLETED.equals(action)) { sendInitialBroadcasts(); + } else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) { + Locale revised = Locale.getDefault(); + if (revised == null || mLocale == null || + !(revised.equals(mLocale))) { + mLocale = revised; + + synchronized (mAppWidgetIds) { + int N = mInstalledProviders.size(); + for (int i=N-1; i>=0; i--) { + Provider p = mInstalledProviders.get(i); + String pkgName = p.info.provider.getPackageName(); + updateProvidersForPackageLocked(pkgName); + } + saveStateLocked(); + } + } } else { Uri uri = intent.getData(); if (uri == null) { |