Preserve widgets on upgrade.
Bug #2464545

Change-Id: I802878af49dc4d98210fb8049df0bbdc49268d99
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 @@
     }
 
     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 @@
 
             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;