Adding callback for widget size changed, and potentially other extra info

Change-Id: I57738c92b6a0ba68ae66b19a533559470c64e6f1
diff --git a/services/java/com/android/server/AppWidgetServiceImpl.java b/services/java/com/android/server/AppWidgetServiceImpl.java
index b24823e..3b43b9b 100644
--- a/services/java/com/android/server/AppWidgetServiceImpl.java
+++ b/services/java/com/android/server/AppWidgetServiceImpl.java
@@ -113,6 +113,7 @@
         int appWidgetId;
         Provider provider;
         RemoteViews views;
+        Bundle extras;
         Host host;
     }
 
@@ -760,6 +761,38 @@
         }
     }
 
+    public void updateAppWidgetExtras(int appWidgetId, Bundle extras) {
+        synchronized (mAppWidgetIds) {
+            ensureStateLoadedLocked();
+            AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
+
+            if (id == null) {
+                return;
+            }
+            Provider p = id.provider;
+            id.extras = extras;
+
+            // send the broacast saying that this appWidgetId has been deleted
+            Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_EXTRAS_CHANGED);
+            intent.setComponent(p.info.provider);
+            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id.appWidgetId);
+            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_EXTRAS, extras);
+            mContext.sendBroadcast(intent, mUserId);
+        }
+    }
+
+    public Bundle getAppWidgetExtras(int appWidgetId) {
+        synchronized (mAppWidgetIds) {
+            ensureStateLoadedLocked();
+            AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
+            if (id != null && id.extras != null) {
+                return id.extras;
+            } else {
+                return Bundle.EMPTY;
+            }
+        }
+    }
+
     public void partiallyUpdateAppWidgetIds(int[] appWidgetIds, RemoteViews views) {
         if (appWidgetIds == null) {
             return;