Fix bug #14323469 Settings crash on selecting keyword from recent searches
... after changing orientation

- set the SearchView for the SearchResultsFragment when the SearchView is
instantiated in the onCreateOptionsMenu(Menu)

- take care of the correct showing of the Recent Searched (suggestions)

Change-Id: Idfa17436d4a2436e0947ce1e1692355def3821a3
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 3c865a9..314b3c9 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -411,6 +411,10 @@
             return false;
         }
 
+        if (mSearchResultsFragment != null) {
+            mSearchResultsFragment.setSearchView(mSearchView);
+        }
+
         mSearchMenuItem.setOnActionExpandListener(this);
         mSearchView.setOnQueryTextListener(this);
         mSearchView.setOnCloseListener(this);
diff --git a/src/com/android/settings/dashboard/SearchResultsSummary.java b/src/com/android/settings/dashboard/SearchResultsSummary.java
index e8544ae..6a6431d 100644
--- a/src/com/android/settings/dashboard/SearchResultsSummary.java
+++ b/src/com/android/settings/dashboard/SearchResultsSummary.java
@@ -51,6 +51,8 @@
     private static final String EMPTY_QUERY = "";
     private static char ELLIPSIS = '\u2026';
 
+    private static final String SAVE_KEY_SHOW_ONLY_RESULTS = ":settings:show_only_results";
+
     private SearchView mSearchView;
 
     private ListView mResultsListView;
@@ -66,6 +68,8 @@
 
     private String mQuery;
 
+    private boolean mShowOnlyResults;
+
     /**
      * A basic AsyncTask for updating the query results cursor
      */
@@ -110,6 +114,17 @@
 
         mResultsAdapter = new SearchResultsAdapter(getActivity());
         mSuggestionsAdapter = new SuggestionsAdapter(getActivity());
+
+        if (savedInstanceState != null) {
+            mShowOnlyResults = savedInstanceState.getBoolean(SAVE_KEY_SHOW_ONLY_RESULTS);
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        outState.putBoolean(SAVE_KEY_SHOW_ONLY_RESULTS, mShowOnlyResults);
     }
 
     @Override
@@ -197,6 +212,7 @@
                 mQuery = cursor.getString(0);
                 mSearchView.setQuery(mQuery, false);
                 setSuggestionsVisibility(false);
+                mShowOnlyResults = true;
             }
         });
 
@@ -207,7 +223,9 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
-        showSomeSuggestions();
+        if (!mShowOnlyResults) {
+            showSomeSuggestions();
+        }
     }
 
     public void setSearchView(SearchView searchView) {
@@ -232,13 +250,30 @@
 
     public boolean onQueryTextSubmit(String query) {
         mQuery = getFilteredQueryString(query);
+        setSuggestionsVisibility(!mShowOnlyResults);
         updateSearchResults();
         return true;
     }
 
     public boolean onQueryTextChange(String query) {
-        mQuery = getFilteredQueryString(query);
-        updateSuggestions();
+        final String newQuery = getFilteredQueryString(query);
+
+        boolean isNewQuery;
+        if (!TextUtils.isEmpty(mQuery)) {
+            isNewQuery = !mQuery.equals(query);
+        } else {
+            isNewQuery = !TextUtils.isEmpty(query);
+        }
+
+        mQuery = newQuery;
+
+        if (isNewQuery) {
+            mShowOnlyResults = false;
+        }
+        if (!mShowOnlyResults) {
+            updateSuggestions();
+        }
+
         updateSearchResults();
         return true;
     }