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() {