Show progress spinner while waiting for results in in app search.
diff --git a/core/java/android/app/SuggestionsAdapter.java b/core/java/android/app/SuggestionsAdapter.java
index 6fa4045..6e8bd78 100644
--- a/core/java/android/app/SuggestionsAdapter.java
+++ b/core/java/android/app/SuggestionsAdapter.java
@@ -83,6 +83,9 @@
     // holds the position that, when displayed, should result in notifying the cursor
     int mDisplayNotifyPos = NONE;
 
+    private final Runnable mStartSpinnerRunnable;
+    private final Runnable mStopSpinnerRunnable;
+
     public SuggestionsAdapter(Context context, SearchDialog searchDialog, SearchableInfo searchable,
             WeakHashMap<String, Drawable> outsideDrawablesCache, boolean globalSearchMode) {
         super(context,
@@ -103,6 +106,18 @@
 
         mOutsideDrawablesCache = outsideDrawablesCache;
         mGlobalSearchMode = globalSearchMode;
+
+        mStartSpinnerRunnable = new Runnable() {
+                public void run() {
+                    mSearchDialog.setWorking(true);
+                }
+            };
+
+        mStopSpinnerRunnable = new Runnable() {
+            public void run() {
+                mSearchDialog.setWorking(false);
+            }
+        };
     }
 
     /**
@@ -123,11 +138,27 @@
     public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
         if (DBG) Log.d(LOG_TAG, "runQueryOnBackgroundThread(" + constraint + ")");
         String query = (constraint == null) ? "" : constraint.toString();
+        if (!mGlobalSearchMode) {
+            /**
+             * for in app search we show the progress spinner until the cursor is returned with
+             * the results.  for global search we manage the progress bar using
+             * {@link DialogCursorProtocol#POST_REFRESH_RECEIVE_ISPENDING}.
+             */
+            mSearchDialog.getWindow().getDecorView().post(mStartSpinnerRunnable);
+        }
         try {
-            return SearchManager.getSuggestions(mContext, mSearchable, query);
+            final Cursor cursor = SearchManager.getSuggestions(mContext, mSearchable, query);
+            // trigger fill window so the spinner stays up until the results are copied over and
+            // closer to being ready
+            if (!mGlobalSearchMode) cursor.getCount();
+            return cursor;
         } catch (RuntimeException e) {
             Log.w(LOG_TAG, "Search suggestions query threw an exception.", e);
             return null;
+        } finally {
+            if (!mGlobalSearchMode) {
+                mSearchDialog.getWindow().getDecorView().post(mStopSpinnerRunnable);
+            }
         }
     }