Bug 1233602 - Don't depend on search suggestions to show search history r=liuche
--- a/mobile/android/base/java/org/mozilla/gecko/home/BrowserSearch.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/BrowserSearch.java
@@ -10,37 +10,40 @@ import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
+import android.content.SharedPreferences;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.mozilla.gecko.AppConstants;
import org.mozilla.gecko.EventDispatcher;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.GeckoEvent;
+import org.mozilla.gecko.GeckoSharedPrefs;
import org.mozilla.gecko.PrefsHelper;
import org.mozilla.gecko.R;
import org.mozilla.gecko.SuggestClient;
import org.mozilla.gecko.Tab;
import org.mozilla.gecko.Tabs;
import org.mozilla.gecko.Telemetry;
import org.mozilla.gecko.TelemetryContract;
import org.mozilla.gecko.annotation.RobocopTarget;
import org.mozilla.gecko.db.BrowserContract;
import org.mozilla.gecko.db.BrowserContract.History;
import org.mozilla.gecko.db.BrowserContract.URLColumns;
import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
import org.mozilla.gecko.home.SearchLoader.SearchCursorLoader;
+import org.mozilla.gecko.preferences.GeckoPreferences;
import org.mozilla.gecko.toolbar.AutocompleteHandler;
import org.mozilla.gecko.util.GeckoEventListener;
import org.mozilla.gecko.util.StringUtils;
import org.mozilla.gecko.util.ThreadUtils;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
@@ -152,16 +155,19 @@ public class BrowserSearch extends HomeF
// Track the locale that was last in use when we filled mSearchEngines.
// Access to this member must only occur from the UI thread.
private Locale mLastLocale;
// Whether search suggestions are enabled or not
private boolean mSuggestionsEnabled;
+ // Whether history suggestions are enabled or not
+ private boolean mSavedSearchesEnabled;
+
// Callbacks used for the search loader
private CursorLoaderCallbacks mCursorLoaderCallbacks;
// Callbacks used for the search suggestion loader
private SearchEngineSuggestionLoaderCallbacks mSearchEngineSuggestionLoaderCallbacks;
private SearchHistorySuggestionLoaderCallbacks mSearchHistorySuggestionLoaderCallback;
// Autocomplete handler used when filtering results
@@ -583,17 +589,17 @@ public class BrowserSearch extends HomeF
return searchDomains(searchTerm);
}
public void resetScrollState() {
mSearchEngineBar.scrollToPosition(0);
}
private void filterSuggestions() {
- if (mSuggestClient == null || !mSuggestionsEnabled) {
+ if (mSuggestClient == null || (!mSuggestionsEnabled && !mSavedSearchesEnabled)) {
return;
}
// Suggestions from search engine
if (mSearchEngineSuggestionLoaderCallbacks == null) {
mSearchEngineSuggestionLoaderCallbacks = new SearchEngineSuggestionLoaderCallbacks();
}
getLoaderManager().restartLoader(LOADER_ID_SUGGESTION, null, mSearchEngineSuggestionLoaderCallbacks);
@@ -648,16 +654,18 @@ public class BrowserSearch extends HomeF
try {
final JSONObject suggest = data.getJSONObject("suggest");
final String suggestEngine = suggest.optString("engine", null);
final String suggestTemplate = suggest.optString("template", null);
final boolean suggestionsPrompted = suggest.getBoolean("prompted");
final JSONArray engines = data.getJSONArray("searchEngines");
mSuggestionsEnabled = suggest.getBoolean("enabled");
+ final SharedPreferences prefs = GeckoSharedPrefs.forApp(getContext());
+ mSavedSearchesEnabled = prefs.getBoolean(GeckoPreferences.PREFS_HISTORY_SAVED_SEARCH, true);
ArrayList<SearchEngine> searchEngines = new ArrayList<SearchEngine>();
for (int i = 0; i < engines.length(); i++) {
final JSONObject engineJSON = engines.getJSONObject(i);
final SearchEngine engine = new SearchEngine((Context) getActivity(), engineJSON);
if (engine.name.equals(suggestEngine) && suggestTemplate != null) {
// Suggest engine should be at the front of the list.