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
1996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.app.SearchManager;
2096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.content.Context;
2196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.content.Intent;
2296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.content.SharedPreferences;
23c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamathimport android.content.SharedPreferences.Editor;
2496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertimport android.util.Log;
25ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood
26ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwoodimport com.android.common.SharedPreferencesCompat;
2796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
2896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert/**
2996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert * Manages user settings.
3096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert */
3196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringertpublic class SearchSettingsImpl implements SearchSettings {
3296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
3396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    private static final boolean DBG = false;
3496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    private static final String TAG = "QSB.SearchSettingsImpl";
3596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
3696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    // Name of the preferences file used to store search preference
3796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    public static final String PREFERENCES_NAME = "SearchSettings";
3896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
3996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    /**
4096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     * Preference key used for storing the index of the next voice search hint to show.
4196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     */
4296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    private static final String NEXT_VOICE_SEARCH_HINT_INDEX_PREF = "next_voice_search_hint";
4396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
4496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    /**
4596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     * Preference key used to store the time at which the first voice search hint was displayed.
4696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     */
4796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    private static final String FIRST_VOICE_HINT_DISPLAY_TIME = "first_voice_search_hint_time";
4896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
4996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    /**
5096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     * Preference key for the version of voice search we last got hints from.
5196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     */
5296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    private static final String LAST_SEEN_VOICE_SEARCH_VERSION = "voice_search_version";
5396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
5496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    /**
558074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath     * Preference key for storing whether searches always go to google.com. Public
568074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath     * so that it can be used by PreferenceControllers.
57c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath     */
588074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath    public static final String USE_GOOGLE_COM_PREF = "use_google_com";
59c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
603ee5c8a646ac4d49c0ae6040c7e383d2ad8e985bNarayan Kamath    /**
613ee5c8a646ac4d49c0ae6040c7e383d2ad8e985bNarayan Kamath     * Preference key for the base search URL. This value is normally set by
623ee5c8a646ac4d49c0ae6040c7e383d2ad8e985bNarayan Kamath     * a SearchBaseUrlHelper instance. Public so classes can listen to changes
633ee5c8a646ac4d49c0ae6040c7e383d2ad8e985bNarayan Kamath     * on this key.
643ee5c8a646ac4d49c0ae6040c7e383d2ad8e985bNarayan Kamath     */
658f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath    public static final String SEARCH_BASE_DOMAIN_PREF = "search_base_domain";
66c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
67c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    /**
68c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath     * This is the time at which the base URL was stored, and is set using
69c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath     * @link{System.currentTimeMillis()}.
70c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath     */
718f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath    private static final String SEARCH_BASE_DOMAIN_APPLY_TIME = "search_base_domain_apply_time";
72c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
7396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    private final Context mContext;
7496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
7596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    private final Config mConfig;
7696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
7796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    public SearchSettingsImpl(Context context, Config config) {
7896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        mContext = context;
7996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        mConfig = config;
8096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
8196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
8296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    protected Context getContext() {
8396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        return mContext;
8496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
8596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
8696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    protected Config getConfig() {
8796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        return mConfig;
8896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
8996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
90ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood    @Override
9196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    public void upgradeSettingsIfNeeded() {
9296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
9396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
94b1cdcbce5d9c5edb20309c59b7cb52f76bbfac72Narayan Kamath    public SharedPreferences getSearchPreferences() {
9596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        return getContext().getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
9696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
9796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
98d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    protected void storeBoolean(String name, boolean value) {
99269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert        SharedPreferencesCompat.apply(getSearchPreferences().edit().putBoolean(name, value));
100d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    }
101d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert
102d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    protected void storeInt(String name, int value) {
103269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert        SharedPreferencesCompat.apply(getSearchPreferences().edit().putInt(name, value));
104d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    }
105d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert
106d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    protected void storeLong(String name, long value) {
107269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert        SharedPreferencesCompat.apply(getSearchPreferences().edit().putLong(name, value));
108d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    }
109d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert
110d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    protected void storeString(String name, String value) {
111269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert        SharedPreferencesCompat.apply(getSearchPreferences().edit().putString(name, value));
112d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    }
113d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert
114d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    protected void removePref(String name) {
115269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert        SharedPreferencesCompat.apply(getSearchPreferences().edit().remove(name));
116d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    }
117d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert
11896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    /**
11996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     * Informs our listeners about the updated settings data.
12096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert     */
121ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood    @Override
12296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    public void broadcastSettingsChanged() {
12396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        // We use a message broadcast since the listeners could be in multiple processes.
12496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        Intent intent = new Intent(SearchManager.INTENT_ACTION_SEARCH_SETTINGS_CHANGED);
12596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        Log.i(TAG, "Broadcasting: " + intent);
12696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        getContext().sendBroadcast(intent);
12796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
12896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
129ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood    @Override
13096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    public int getNextVoiceSearchHintIndex(int size) {
13196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            int i = getAndIncrementIntPreference(getSearchPreferences(),
13296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert                    NEXT_VOICE_SEARCH_HINT_INDEX_PREF);
13396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            return i % size;
13496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
13596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
13696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    // TODO: Could this be made atomic to avoid races?
137d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert    private int getAndIncrementIntPreference(SharedPreferences prefs, String name) {
13896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        int i = prefs.getInt(name, 0);
139d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert        storeInt(name, i + 1);
14096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        return i;
14196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
14296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
143ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood    @Override
14496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    public void resetVoiceSearchHintFirstSeenTime() {
145d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert        storeLong(FIRST_VOICE_HINT_DISPLAY_TIME, System.currentTimeMillis());
14696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
14796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
148ecf356c15143ab0583c64682de16d94a57f7dd1cMathew Inwood    @Override
14996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    public boolean haveVoiceSearchHintsExpired(int currentVoiceSearchVersion) {
15096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        SharedPreferences prefs = getSearchPreferences();
15196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
15296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        if (currentVoiceSearchVersion != 0) {
15396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            long currentTime = System.currentTimeMillis();
15496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            int lastVoiceSearchVersion = prefs.getInt(LAST_SEEN_VOICE_SEARCH_VERSION, 0);
15596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            long firstHintTime = prefs.getLong(FIRST_VOICE_HINT_DISPLAY_TIME, 0);
15696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            if (firstHintTime == 0 || currentVoiceSearchVersion != lastVoiceSearchVersion) {
157269256d0aff25596395479cbfcd7cca5f60a2531Bjorn Bringert                SharedPreferencesCompat.apply(prefs.edit()
15896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert                        .putInt(LAST_SEEN_VOICE_SEARCH_VERSION, currentVoiceSearchVersion)
159d84f30fc2964eded2bf559c06d6d8e77ae26a2d0Bjorn Bringert                        .putLong(FIRST_VOICE_HINT_DISPLAY_TIME, currentTime));
16096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert                firstHintTime = currentTime;
16196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            }
16296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            if (currentTime - firstHintTime > getConfig().getVoiceSearchHintActivePeriod()) {
16396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert                if (DBG) Log.d(TAG, "Voice seach hint period expired; not showing hints.");
16496fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert                return true;
16596fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            } else {
16696fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert                return false;
16796fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            }
16896fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        } else {
16996fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            if (DBG) Log.d(TAG, "Could not determine voice search version; not showing hints.");
17096fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert            return true;
17196fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert        }
17296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert    }
17396fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert
174c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    /**
175c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath     * @return true if user searches should always be based at google.com, false
176c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath     *     otherwise.
177c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath     */
178c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    @Override
179c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    public boolean shouldUseGoogleCom() {
180c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath        // Note that this preserves the old behaviour of using google.com
181c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath        // for searches, with the gl= parameter set.
1828074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath        return getSearchPreferences().getBoolean(USE_GOOGLE_COM_PREF, true);
183c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    }
184c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
185c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    @Override
186c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    public void setUseGoogleCom(boolean useGoogleCom) {
1878074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath        storeBoolean(USE_GOOGLE_COM_PREF, useGoogleCom);
188c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    }
189c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
1908074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath    @Override
1918f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath    public long getSearchBaseDomainApplyTime() {
1928f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath        return getSearchPreferences().getLong(SEARCH_BASE_DOMAIN_APPLY_TIME, -1);
193c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    }
194c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
1958074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath    @Override
1968f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath    public String getSearchBaseDomain() {
197f4e4f922ad11b7d5bdc6347436f1e129fbae9041Narayan Kamath        // Note that the only time this will return null is on the first run
198f4e4f922ad11b7d5bdc6347436f1e129fbae9041Narayan Kamath        // of the app, or when settings have been cleared. Callers should
199f4e4f922ad11b7d5bdc6347436f1e129fbae9041Narayan Kamath        // ideally check that getSearchBaseDomainApplyTime() is not -1 before
200f4e4f922ad11b7d5bdc6347436f1e129fbae9041Narayan Kamath        // calling this function.
2018f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath        return getSearchPreferences().getString(SEARCH_BASE_DOMAIN_PREF, null);
202c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    }
203c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
2048074f659cbe5406f0a31c8d1cd764660964f0d53Narayan Kamath    @Override
2058f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath    public void setSearchBaseDomain(String searchBaseUrl) {
206c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath        Editor sharedPrefEditor = getSearchPreferences().edit();
2078f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath        sharedPrefEditor.putString(SEARCH_BASE_DOMAIN_PREF, searchBaseUrl);
2088f65daa6e6df644d6cc6a9a2e100c01feb33bbd2Narayan Kamath        sharedPrefEditor.putLong(SEARCH_BASE_DOMAIN_APPLY_TIME, System.currentTimeMillis());
209c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath
210c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath        SharedPreferencesCompat.apply(sharedPrefEditor);
211c953ef06f0fc1fb4157fe67aa145cf702ee204d0Narayan Kamath    }
21296fec862c3d494aebcb4e1d93589a241385a2ba7Bjorn Bringert}
213