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;
}