summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2010-03-11 18:14:23 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-03-11 18:14:23 -0800
commit8abb26ee6c77e01a23d26c305a65b25a33710024 (patch)
tree22c60f32d5f7ab29ea2b089766a97be5e16aa344
parentcea6ac367114ecaf7125685859baf3678fac35bb (diff)
parentd2671e1fcf1d7f1b8e25a2615d514cf3c26b6a9c (diff)
downloadframeworks_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.java19
-rw-r--r--core/java/android/appwidget/AppWidgetManager.java10
-rw-r--r--core/java/android/appwidget/AppWidgetProviderInfo.java12
-rw-r--r--services/java/com/android/server/AppWidgetService.java7
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>&lt;receiver&gt;</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>&lt;meta-data /&gt;</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;