SearchSettingsImpl.java revision 8074f659cbe5406f0a31c8d1cd764660964f0d53
196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert/* 296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Copyright (C) 2009 The Android Open Source Project 396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * 496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * you may not use this file except in compliance with the License. 696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * You may obtain a copy of the License at 796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * 896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * 1096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 1196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 1296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * See the License for the specific language governing permissions and 1496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * limitations under the License. 1596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 1696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 1796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertpackage com.android.quicksearchbox; 1896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 19269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringertimport com.android.common.SharedPreferencesCompat; 20d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert 2196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.app.SearchManager; 2296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.content.Context; 2396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.content.Intent; 2496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.content.SharedPreferences; 25c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamathimport android.content.SharedPreferences.Editor; 2696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.util.Log; 2796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.view.Menu; 2896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.view.MenuInflater; 2996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.view.MenuItem; 3096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 3196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert/** 3296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Manages user settings. 3396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 3496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertpublic class SearchSettingsImpl implements SearchSettings { 3596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 3696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private static final boolean DBG = false; 3796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private static final String TAG = "QSB.SearchSettingsImpl"; 3896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 3996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert // Name of the preferences file used to store search preference 4096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public static final String PREFERENCES_NAME = "SearchSettings"; 4196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 4296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert // Intent action that opens the "Searchable Items" preference 4396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private static final String ACTION_SEARCHABLE_ITEMS = 4496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert "com.android.quicksearchbox.action.SEARCHABLE_ITEMS"; 4596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 4696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert /** 4796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Preference key used for storing the index of the next voice search hint to show. 4896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 4996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private static final String NEXT_VOICE_SEARCH_HINT_INDEX_PREF = "next_voice_search_hint"; 5096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 5196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert /** 5296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Preference key used to store the time at which the first voice search hint was displayed. 5396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 5496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private static final String FIRST_VOICE_HINT_DISPLAY_TIME = "first_voice_search_hint_time"; 5596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 5696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert /** 5796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Preference key for the version of voice search we last got hints from. 5896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 5996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private static final String LAST_SEEN_VOICE_SEARCH_VERSION = "voice_search_version"; 6096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 6196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert /** 628074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath * Preference key for storing whether searches always go to google.com. Public 638074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath * so that it can be used by PreferenceControllers. 64c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath */ 658074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath public static final String USE_GOOGLE_COM_PREF = "use_google_com"; 66c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 67c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath private static final String SEARCH_BASE_URL = "search_base_url"; 68c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 69c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath /** 70c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath * This is the time at which the base URL was stored, and is set using 71c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath * @link{System.currentTimeMillis()}. 72c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath */ 73c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath private static final String SEARCH_BASE_URL_APPLY_TIME = "search_base_url_apply_time"; 74c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 75c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath /** 7696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Prefix of per-corpus enable preference 7796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 7896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private static final String CORPUS_ENABLED_PREF_PREFIX = "enable_corpus_"; 7996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 8096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private final Context mContext; 8196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 8296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert private final Config mConfig; 8396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 8496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public SearchSettingsImpl(Context context, Config config) { 8596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert mContext = context; 8696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert mConfig = config; 8796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 8896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 8996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert protected Context getContext() { 9096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return mContext; 9196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 9296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 9396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert protected Config getConfig() { 9496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return mConfig; 9596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 9696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 9796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public void upgradeSettingsIfNeeded() { 9896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 9996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 10096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public Intent getSearchableItemsIntent() { 10196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert Intent intent = new Intent(ACTION_SEARCHABLE_ITEMS); 10296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert intent.setPackage(getContext().getPackageName()); 10396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return intent; 10496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 10596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 10696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert /** 10796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Gets the preference key of the preference for whether the given corpus 10896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * is enabled. The preference is stored in the {@link #PREFERENCES_NAME} 10996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * preferences file. 11096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 11196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public static String getCorpusEnabledPreference(Corpus corpus) { 11296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return CORPUS_ENABLED_PREF_PREFIX + corpus.getName(); 11396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 11496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 11596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public boolean isCorpusEnabled(Corpus corpus) { 11696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert boolean defaultEnabled = corpus.isCorpusDefaultEnabled(); 11796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert String sourceEnabledPref = getCorpusEnabledPreference(corpus); 11896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return getSearchPreferences().getBoolean(sourceEnabledPref, defaultEnabled); 11996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 12096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 12196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert protected SharedPreferences getSearchPreferences() { 12296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return getContext().getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); 12396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 12496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 125d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert protected void storeBoolean(String name, boolean value) { 126269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert SharedPreferencesCompat.apply(getSearchPreferences().edit().putBoolean(name, value)); 127d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert } 128d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert 129d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert protected void storeInt(String name, int value) { 130269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert SharedPreferencesCompat.apply(getSearchPreferences().edit().putInt(name, value)); 131d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert } 132d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert 133d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert protected void storeLong(String name, long value) { 134269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert SharedPreferencesCompat.apply(getSearchPreferences().edit().putLong(name, value)); 135d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert } 136d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert 137d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert protected void storeString(String name, String value) { 138269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert SharedPreferencesCompat.apply(getSearchPreferences().edit().putString(name, value)); 139d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert } 140d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert 141d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert protected void removePref(String name) { 142269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert SharedPreferencesCompat.apply(getSearchPreferences().edit().remove(name)); 143d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert } 144d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert 14596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert /** 14696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Informs our listeners about the updated settings data. 14796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */ 14896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public void broadcastSettingsChanged() { 14996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert // We use a message broadcast since the listeners could be in multiple processes. 15096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert Intent intent = new Intent(SearchManager.INTENT_ACTION_SEARCH_SETTINGS_CHANGED); 15196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert Log.i(TAG, "Broadcasting: " + intent); 15296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert getContext().sendBroadcast(intent); 15396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 15496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 15573a375928e0b8f0b2bfa09e4b252cfcbdad4ef84Bjorn Bringert public void addMenuItems(Menu menu, boolean showDisabled) { 15696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert MenuInflater inflater = new MenuInflater(getContext()); 15796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert inflater.inflate(R.menu.settings, menu); 15896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert MenuItem item = menu.findItem(R.id.menu_settings); 15996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert item.setIntent(getSearchSettingsIntent()); 16096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 16196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 16296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public Intent getSearchSettingsIntent() { 16396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert Intent settings = new Intent(SearchManager.INTENT_ACTION_SEARCH_SETTINGS); 16496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert settings.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 16596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert settings.setPackage(getContext().getPackageName()); 16696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return settings; 16796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 16896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 16996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public int getNextVoiceSearchHintIndex(int size) { 17096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert int i = getAndIncrementIntPreference(getSearchPreferences(), 17196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert NEXT_VOICE_SEARCH_HINT_INDEX_PREF); 17296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return i % size; 17396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 17496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 17596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert // TODO: Could this be made atomic to avoid races? 176d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert private int getAndIncrementIntPreference(SharedPreferences prefs, String name) { 17796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert int i = prefs.getInt(name, 0); 178d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert storeInt(name, i + 1); 17996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return i; 18096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 18196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 18296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public void resetVoiceSearchHintFirstSeenTime() { 183d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert storeLong(FIRST_VOICE_HINT_DISPLAY_TIME, System.currentTimeMillis()); 18496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 18596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 18696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert public boolean haveVoiceSearchHintsExpired(int currentVoiceSearchVersion) { 18796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert SharedPreferences prefs = getSearchPreferences(); 18896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 18996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert if (currentVoiceSearchVersion != 0) { 19096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert long currentTime = System.currentTimeMillis(); 19196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert int lastVoiceSearchVersion = prefs.getInt(LAST_SEEN_VOICE_SEARCH_VERSION, 0); 19296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert long firstHintTime = prefs.getLong(FIRST_VOICE_HINT_DISPLAY_TIME, 0); 19396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert if (firstHintTime == 0 || currentVoiceSearchVersion != lastVoiceSearchVersion) { 194269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert SharedPreferencesCompat.apply(prefs.edit() 19596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert .putInt(LAST_SEEN_VOICE_SEARCH_VERSION, currentVoiceSearchVersion) 196d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert .putLong(FIRST_VOICE_HINT_DISPLAY_TIME, currentTime)); 19796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert firstHintTime = currentTime; 19896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 19996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert if (currentTime - firstHintTime > getConfig().getVoiceSearchHintActivePeriod()) { 20096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert if (DBG) Log.d(TAG, "Voice seach hint period expired; not showing hints."); 20196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return true; 20296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } else { 20396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return false; 20496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 20596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } else { 20696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert if (DBG) Log.d(TAG, "Could not determine voice search version; not showing hints."); 20796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert return true; 20896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 20996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert } 21096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert 2118749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert public boolean allowWebSearchShortcuts() { 2128749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert return true; 2138749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert } 2148749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert 215c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath /** 216c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath * @return true if user searches should always be based at google.com, false 217c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath * otherwise. 218c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath */ 219c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath @Override 220c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath public boolean shouldUseGoogleCom() { 221c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath // Note that this preserves the old behaviour of using google.com 222c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath // for searches, with the gl= parameter set. 2238074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath return getSearchPreferences().getBoolean(USE_GOOGLE_COM_PREF, true); 224c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath } 225c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 226c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath @Override 227c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath public void setUseGoogleCom(boolean useGoogleCom) { 2288074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath storeBoolean(USE_GOOGLE_COM_PREF, useGoogleCom); 229c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath } 230c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 2318074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath @Override 232c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath public long getSearchBaseUrlApplyTime() { 233c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath return getSearchPreferences().getLong(SEARCH_BASE_URL_APPLY_TIME, -1); 234c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath } 235c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 2368074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath @Override 237c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath public String getSearchBaseUrl() { 238c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath // Its better that an exception is thrown at this point, because 239c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath // this should always be called after checking that 240c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath // getSearchBaseUrlApplyTime() >= 0. 241c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath return getSearchPreferences().getString(SEARCH_BASE_URL, null); 242c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath } 243c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 2448074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath @Override 245c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath public void setSearchBaseUrl(String searchBaseUrl) { 246c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath Editor sharedPrefEditor = getSearchPreferences().edit(); 247c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath sharedPrefEditor.putString(SEARCH_BASE_URL, searchBaseUrl); 248c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath sharedPrefEditor.putLong(SEARCH_BASE_URL_APPLY_TIME, System.currentTimeMillis()); 249c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath 250c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath SharedPreferencesCompat.apply(sharedPrefEditor); 251c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath } 25296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert} 253