Select search engine based on locale

- Allow user specific overrides of search engine based on locale.
- If user does not have an override for search engine
  use default locale specific search engine.

CR-Fixed:910238

Change-Id: I8775ce669c1625992954b53ec5ed39503f304596
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index fef0b44..fce0c10 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -24,6 +24,7 @@
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.os.Build;
+import android.preference.ListPreference;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.util.DisplayMetrics;
@@ -493,7 +494,7 @@
         return mAppCachePath;
     }
 
-    private void updateSearchEngine(boolean force) {
+    protected void updateSearchEngine(boolean force) {
         String searchEngineName = getSearchEngineName();
         if (force || mSearchEngine == null ||
                 !mSearchEngine.getName().equals(searchEngineName)) {
@@ -799,11 +800,11 @@
         // it creates the restriction and if enabled it sets the <default_search_engine_value>.
         SearchEngineRestriction.getInstance();
 
-        String defaultSearchEngineValue = mContext.getString(R.string.default_search_engine_value);
+        String defaultSearchEngineValue = getUserSearchEngine();
         if (defaultSearchEngineValue == null) {
             defaultSearchEngineValue = SearchEngine.GOOGLE;
         }
-        return mPrefs.getString(PREF_SEARCH_ENGINE, defaultSearchEngineValue);
+        return defaultSearchEngineValue;
     }
 
     public boolean allowAppTabs() {
@@ -854,6 +855,23 @@
                 mContext.getResources().getString(R.string.value_temporal_edge_swipe)).apply();
     }
 
+    public void setUserSearchEngine(String engine) {
+        if (!engine.equals(mContext.getResources().getString(R.string.default_search_engine_value)))
+            mPrefs.edit().putString(
+                PREF_USER_SEARCH_ENGINE + mContext.getResources().getConfiguration().locale,
+                engine).apply();
+        // ensure changing back to default clears the search engine
+        else
+            mPrefs.edit().remove(PREF_USER_SEARCH_ENGINE
+                    + mContext.getResources().getConfiguration().locale).apply();
+    }
+
+    public String getUserSearchEngine() {
+        return mPrefs.getString(
+                PREF_USER_SEARCH_ENGINE + mContext.getResources().getConfiguration().locale
+                , mContext.getResources().getString(R.string.default_search_engine_value));
+    }
+
     public void setEdgeSwipeSpatial() {
         mPrefs.edit().putString(PREF_EDGE_SWIPE,
                 mContext.getResources().getString(R.string.value_spatial_edge_swipe)).apply();
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e71bc27..4c05906 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -812,6 +812,8 @@
         }
         mActivityStopped = false;
         UpdateNotificationService.updateCheck(mActivity);
+        // reset the search engine based on locale
+        mSettings.updateSearchEngine(false);
         mSettings.setLastRunPaused(false);
         Tab current = mTabControl.getCurrentTab();
         if (current != null) {
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 15ec6a0..ce6c4cb 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -145,4 +145,8 @@
     static final String PREF_LEGAL_PRIVACY_POLICY = "legal_privacy_policy";
 
     static final String ACTION_RELOAD_PAGE = "reload";
+
+    // User preference
+    static final String PREF_USER_SEARCH_ENGINE = "user_search_engine-";
+
 }
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 6524767..1a87d64 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -146,6 +146,8 @@
 
         } else if (pref.getKey().equals(PreferenceKeys.PREF_SEARCH_ENGINE)) {
             ListPreference lp = (ListPreference) pref;
+            // update the user preference
+            BrowserSettings.getInstance().setUserSearchEngine((String) objValue);
             lp.setValue((String) objValue);
             updateListPreferenceSummary(lp);
             return false;