Update the search widget icon if the global search provider changes.

Note that this change is necessary because the launcher might
receive the PM broadcast before the SearchManagerService does.

Change-Id: I5a03e2fb16dee232a83d24b834ef6bd0eaabe774
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 489f3fb..a2e4bd0 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -317,6 +317,7 @@
         // If we have a saved version of these external icons, we load them up immediately
         if (sGlobalSearchIcon == null || sVoiceSearchIcon == null || sAppMarketIcon == null) {
             updateIconsAffectedByPackageManagerChanges();
+            updateGlobalSearchIcon();
         }
         if (sGlobalSearchIcon != null) {
              updateGlobalSearchIcon(sGlobalSearchIcon);
@@ -3133,10 +3134,14 @@
      */
     private void updateIconsAffectedByPackageManagerChanges() {
         updateAppMarketIcon();
-        updateGlobalSearchIcon();
         updateVoiceSearchIcon();
     }
 
+    @Override
+    public void bindSearchablesChanged() {
+        updateGlobalSearchIcon();
+    }
+
     /**
      * Add the icons for all apps.
      *
@@ -3147,6 +3152,7 @@
             mAppsCustomizeContent.setApps(apps);
         }
         updateIconsAffectedByPackageManagerChanges();
+        updateGlobalSearchIcon();
     }
 
     /**
diff --git a/src/com/android/launcher2/LauncherApplication.java b/src/com/android/launcher2/LauncherApplication.java
index db3a4cb..94163ac 100644
--- a/src/com/android/launcher2/LauncherApplication.java
+++ b/src/com/android/launcher2/LauncherApplication.java
@@ -17,6 +17,7 @@
 package com.android.launcher2;
 
 import android.app.Application;
+import android.app.SearchManager;
 import android.content.ContentResolver;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -57,6 +58,9 @@
         filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
         filter.addAction(Intent.ACTION_LOCALE_CHANGED);
         registerReceiver(mModel, filter);
+        filter = new IntentFilter();
+        filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED);
+        registerReceiver(mModel, filter);
 
         // Register for changes to the favorites
         ContentResolver resolver = getContentResolver();
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 331f124..b4e632a 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -16,6 +16,7 @@
 
 package com.android.launcher2;
 
+import android.app.SearchManager;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
 import android.content.BroadcastReceiver;
@@ -129,6 +130,7 @@
         public void bindAppsRemoved(ArrayList<ApplicationInfo> apps, boolean permanent);
         public void bindPackagesUpdated();
         public boolean isAllAppsVisible();
+        public void bindSearchablesChanged();
     }
 
     LauncherModel(LauncherApplication app, IconCache iconCache) {
@@ -513,6 +515,7 @@
      * Call from the handler for ACTION_PACKAGE_ADDED, ACTION_PACKAGE_REMOVED and
      * ACTION_PACKAGE_CHANGED.
      */
+    @Override
     public void onReceive(Context context, Intent intent) {
         if (DEBUG_LOADERS) Log.d(TAG, "onReceive intent=" + intent);
 
@@ -570,6 +573,9 @@
             mAllAppsLoaded = false;
             mWorkspaceLoaded = false;
             startLoaderFromBackground();
+        } else if (SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED.equals(action)) {
+            Callbacks callbacks = mCallbacks.get();
+            callbacks.bindSearchablesChanged();
         }
     }