update widgets model when package is updated

Fixing a bug where onProviderChanged is called before Package update.
And icon loaded on the widget tray is the default icon.

Change-Id: I4ffea846d057920fd894537432ac5881642bc570
diff --git a/src/com/android/launcher3/LauncherAppWidgetHost.java b/src/com/android/launcher3/LauncherAppWidgetHost.java
index e32e0d9..c274f2e 100644
--- a/src/com/android/launcher3/LauncherAppWidgetHost.java
+++ b/src/com/android/launcher3/LauncherAppWidgetHost.java
@@ -79,7 +79,8 @@
     }
 
     protected void onProvidersChanged() {
-        mLauncher.getModel().loadAndBindWidgetsAndShortcuts(mLauncher, mLauncher);
+        mLauncher.getModel().loadAndBindWidgetsAndShortcuts(mLauncher, mLauncher,
+                true /* refresh */);
         if (!mProviderChangeListeners.isEmpty()) {
             for (Runnable callback : new ArrayList<>(mProviderChangeListeners)) {
                 callback.run();
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 7fdd523..f283c2f 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -2867,7 +2867,7 @@
                     final Callbacks callbacks = tryGetCallbacks(oldCallbacks);
                     if (callbacks != null) {
                         callbacks.bindAllApplications(added);
-                        loadAndBindWidgetsAndShortcuts(mContext,callbacks);
+                        loadAndBindWidgetsAndShortcuts(mContext, callbacks, true /* refresh */);
                         if (DEBUG_LOADERS) {
                             Log.d(TAG, "bound " + added.size() + " apps in "
                                 + (SystemClock.uptimeMillis() - bindTime) + "ms");
@@ -3228,9 +3228,10 @@
                     }
                 });
             }
-            if (Build.VERSION.SDK_INT < 17) {
-                loadAndBindWidgetsAndShortcuts(context, callbacks);
-            }
+
+            // onProvidersChanged method (API >= 17) already refreshed the widget list
+            loadAndBindWidgetsAndShortcuts(context, callbacks, Build.VERSION.SDK_INT < 17);
+
             // Write all the logs to disk
             mHandler.post(new Runnable() {
                 public void run() {
@@ -3279,11 +3280,12 @@
         }
     }
 
-    public void loadAndBindWidgetsAndShortcuts(final Context context, final Callbacks callbacks) {
+    public void loadAndBindWidgetsAndShortcuts(final Context context, final Callbacks callbacks,
+            final boolean refresh) {
         runOnWorkerThread(new Runnable(){
             @Override
             public void run() {
-                final ArrayList<Object> list = getWidgetsAndShortcuts(context, true /* refresh */);
+                final ArrayList<Object> list = getWidgetsAndShortcuts(context, refresh);
                 mHandler.post(new Runnable() {
                     @Override
                     public void run() {