diff options
author | Romain Guy <romainguy@android.com> | 2010-03-11 18:14:23 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-03-11 18:14:23 -0800 |
commit | 8abb26ee6c77e01a23d26c305a65b25a33710024 (patch) | |
tree | 22c60f32d5f7ab29ea2b089766a97be5e16aa344 | |
parent | cea6ac367114ecaf7125685859baf3678fac35bb (diff) | |
parent | d2671e1fcf1d7f1b8e25a2615d514cf3c26b6a9c (diff) | |
download | frameworks_base-8abb26ee6c77e01a23d26c305a65b25a33710024.zip frameworks_base-8abb26ee6c77e01a23d26c305a65b25a33710024.tar.gz frameworks_base-8abb26ee6c77e01a23d26c305a65b25a33710024.tar.bz2 |
Merge "Preserve widgets on upgrade. Bug #2464545"
-rw-r--r-- | core/java/android/app/Dialog.java | 19 | ||||
-rw-r--r-- | core/java/android/appwidget/AppWidgetManager.java | 10 | ||||
-rw-r--r-- | core/java/android/appwidget/AppWidgetProviderInfo.java | 12 | ||||
-rw-r--r-- | services/java/com/android/server/AppWidgetService.java | 7 |
4 files changed, 38 insertions, 10 deletions
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java index 981c237..f364def 100644 --- a/core/java/android/app/Dialog.java +++ b/core/java/android/app/Dialog.java @@ -27,7 +27,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.util.Log; import android.view.ContextMenu; import android.view.ContextThemeWrapper; import android.view.Gravity; @@ -271,14 +270,16 @@ public class Dialog implements DialogInterface, Window.Callback, return; } - mWindowManager.removeView(mDecor); - - mDecor = null; - mWindow.closeAllPanels(); - onStop(); - mShowing = false; - - sendDismissMessage(); + try { + mWindowManager.removeView(mDecor); + } finally { + mDecor = null; + mWindow.closeAllPanels(); + onStop(); + mShowing = false; + + sendDismissMessage(); + } } private void sendDismissMessage() { diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java index 3660001..d4ce6a1 100644 --- a/core/java/android/appwidget/AppWidgetManager.java +++ b/core/java/android/appwidget/AppWidgetManager.java @@ -183,6 +183,16 @@ public class AppWidgetManager { * @see AppWidgetProviderInfo */ public static final String META_DATA_APPWIDGET_PROVIDER = "android.appwidget.provider"; + + /** + * Field for the manifest meta-data tag used to indicate any previous name for the + * app widget receiver. + * + * @see AppWidgetProviderInfo + * + * @hide Pending API approval + */ + public static final String META_DATA_APPWIDGET_OLD_NAME = "android.appwidget.oldName"; static WeakHashMap<Context, WeakReference<AppWidgetManager>> sManagerCache = new WeakHashMap(); static IAppWidgetService sService; diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java index a2e0ba0a..cee2865 100644 --- a/core/java/android/appwidget/AppWidgetProviderInfo.java +++ b/core/java/android/appwidget/AppWidgetProviderInfo.java @@ -98,6 +98,18 @@ public class AppWidgetProviderInfo implements Parcelable { * the <code><receiver></code> element in the AndroidManifest.xml file. */ public int icon; + + + /** + * The previous name, if any, of the app widget receiver. If not supplied, it will be + * ignored. + * + * <p>This field corresponds to the <code><meta-data /></code> with the name + * <code>android.appwidget.oldName</code>. + * + * @hide Pending API approval + */ + public String oldName; public AppWidgetProviderInfo() { } diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java index 7350213..24526af 100644 --- a/services/java/com/android/server/AppWidgetService.java +++ b/services/java/com/android/server/AppWidgetService.java @@ -524,10 +524,11 @@ class AppWidgetService extends IAppWidgetService.Stub } Provider lookupProviderLocked(ComponentName provider) { + final String className = provider.getClassName(); final int N = mInstalledProviders.size(); for (int i=0; i<N; i++) { Provider p = mInstalledProviders.get(i); - if (p.info.provider.equals(provider)) { + if (p.info.provider.equals(provider) || className.equals(p.info.oldName)) { return p; } } @@ -706,6 +707,10 @@ class AppWidgetService extends IAppWidgetService.Stub p = new Provider(); AppWidgetProviderInfo info = p.info = new AppWidgetProviderInfo(); + // If metaData was null, we would have returned earlier when getting + // the parser No need to do the check here + info.oldName = activityInfo.metaData.getString( + AppWidgetManager.META_DATA_APPWIDGET_OLD_NAME); info.provider = component; p.uid = activityInfo.applicationInfo.uid; |