From 8c3b0ce7120da882082eed533462090c4feadff8 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Mon, 12 May 2014 18:54:32 -0700 Subject: [PATCH] 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 --- .../android/settings/SettingsActivity.java | 4 ++ .../dashboard/SearchResultsSummary.java | 41 +++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 3c865a93beb..314b3c9a43e 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -411,6 +411,10 @@ public class SettingsActivity extends Activity 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 e8544aeb30a..6a6431d7020 100644 --- a/src/com/android/settings/dashboard/SearchResultsSummary.java +++ b/src/com/android/settings/dashboard/SearchResultsSummary.java @@ -51,6 +51,8 @@ public class SearchResultsSummary extends Fragment { 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 @@ public class SearchResultsSummary extends Fragment { private String mQuery; + private boolean mShowOnlyResults; + /** * A basic AsyncTask for updating the query results cursor */ @@ -110,6 +114,17 @@ public class SearchResultsSummary extends Fragment { 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 @@ public class SearchResultsSummary extends Fragment { mQuery = cursor.getString(0); mSearchView.setQuery(mQuery, false); setSuggestionsVisibility(false); + mShowOnlyResults = true; } }); @@ -207,7 +223,9 @@ public class SearchResultsSummary extends Fragment { public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - showSomeSuggestions(); + if (!mShowOnlyResults) { + showSomeSuggestions(); + } } public void setSearchView(SearchView searchView) { @@ -232,13 +250,30 @@ public class SearchResultsSummary extends Fragment { 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; }