Fix widget refresh issue on package install/uninstall

Culprit CL: https://googleplex-android-review.git.corp.google.com/#/c/592303/3/src/com/android/launcher3/LauncherModel.java

b/19658229

Change-Id: I02b0b2a0ed9bc3200bbe1edcb251cf0efe939e53
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 9c4632c..bf03f74 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -4103,7 +4103,7 @@
         }
         if (mAppsCustomizeContent != null) {
             mAppsCustomizeContent.onPackagesUpdated(
-                    LauncherModel.getSortedWidgetsAndShortcuts(this));
+                    LauncherModel.getSortedWidgetsAndShortcuts(this, false /* refresh */));
         }
         if (mLauncherCallbacks != null) {
             mLauncherCallbacks.bindAllApplications(apps);
diff --git a/src/com/android/launcher3/LauncherAppWidgetHost.java b/src/com/android/launcher3/LauncherAppWidgetHost.java
index 840508a..a28fd25 100644
--- a/src/com/android/launcher3/LauncherAppWidgetHost.java
+++ b/src/com/android/launcher3/LauncherAppWidgetHost.java
@@ -81,7 +81,8 @@
     protected void onProvidersChanged() {
         // Once we get the message that widget packages are updated, we need to rebind items
         // in AppsCustomize accordingly.
-        mLauncher.bindPackagesUpdated(LauncherModel.getSortedWidgetsAndShortcuts(mLauncher));
+        mLauncher.bindPackagesUpdated(LauncherModel.getSortedWidgetsAndShortcuts(mLauncher,
+                true /* refresh */));
 
         for (Runnable callback : mProviderChangeListeners) {
             callback.run();
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 3cada6f..2fd9db2 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -167,7 +167,6 @@
 
     // sBgWidgetProviders is the set of widget providers including custom internal widgets
     public static HashMap<ComponentName, LauncherAppWidgetProviderInfo> sBgWidgetProviders;
-    public static boolean sWidgetProvidersDirty;
 
     // sPendingPackages is a set of packages which could be on sdcard and are not available yet
     static final HashMap<UserHandleCompat, HashSet<String>> sPendingPackages =
@@ -3252,7 +3251,7 @@
             }
 
             final ArrayList<Object> widgetsAndShortcuts =
-                    getSortedWidgetsAndShortcuts(context);
+                    getSortedWidgetsAndShortcuts(context, true /* refresh */);
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
@@ -3275,9 +3274,10 @@
         }
     }
 
-    public static List<LauncherAppWidgetProviderInfo> getWidgetProviders(Context context) {
+    public static List<LauncherAppWidgetProviderInfo> getWidgetProviders(Context context,
+            boolean refresh) {
         synchronized (sBgLock) {
-            if (sBgWidgetProviders != null && !sWidgetProvidersDirty) {
+            if (sBgWidgetProviders != null && !refresh) {
                 return new ArrayList<LauncherAppWidgetProviderInfo>(sBgWidgetProviders.values());
             }
             sBgWidgetProviders = new HashMap<ComponentName, LauncherAppWidgetProviderInfo>();
@@ -3294,7 +3294,6 @@
                 info = new LauncherAppWidgetProviderInfo(context, widget);
                 sBgWidgetProviders.put(info.provider, info);
             }
-            sWidgetProvidersDirty = false;
             return new ArrayList<LauncherAppWidgetProviderInfo>(sBgWidgetProviders.values());
         }
     }
@@ -3302,17 +3301,17 @@
     public static LauncherAppWidgetProviderInfo getProviderInfo(Context ctx, ComponentName name) {
         synchronized (sBgLock) {
             if (sBgWidgetProviders == null) {
-                getWidgetProviders(ctx);
+                getWidgetProviders(ctx, false /* refresh */);
             }
             return sBgWidgetProviders.get(name);
         }
     }
 
     // Returns a list of ResolveInfos/AppWidgetInfos in sorted order
-    public static ArrayList<Object> getSortedWidgetsAndShortcuts(Context context) {
+    public static ArrayList<Object> getSortedWidgetsAndShortcuts(Context context, boolean refresh) {
         PackageManager packageManager = context.getPackageManager();
         final ArrayList<Object> widgetsAndShortcuts = new ArrayList<Object>();
-        widgetsAndShortcuts.addAll(getWidgetProviders(context));
+        widgetsAndShortcuts.addAll(getWidgetProviders(context, refresh));
         Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
         widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0));
         Collections.sort(widgetsAndShortcuts, new WidgetAndShortcutNameComparator(context));