Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEnginePreference.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEnginePreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEnginePreference.java |
index fbca965f2cb3a3563d552c968d90a1734b622f35..9ef7822c1d6f7f5d30a270cc627052c55e6c8892 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEnginePreference.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SearchEnginePreference.java |
@@ -1,33 +1,34 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
package org.chromium.chrome.browser.preferences; |
-import android.app.AlertDialog; |
-import android.content.Context; |
-import android.preference.DialogPreference; |
-import android.util.AttributeSet; |
+import android.os.Bundle; |
+import android.preference.PreferenceFragment; |
+import android.view.LayoutInflater; |
+import android.view.View; |
+import android.view.View.OnLayoutChangeListener; |
+import android.view.ViewGroup; |
+import android.widget.ListView; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.chrome.R; |
+import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
/** |
- * A dialog preference for picking a default search engine. |
- */ |
-public class SearchEnginePreference extends DialogPreference |
- implements SearchEngineAdapter.SelectSearchEngineCallback { |
+* A preference fragment for selecting a default search engine. |
+*/ |
+public class SearchEnginePreference extends PreferenceFragment |
+ implements View.OnClickListener, SearchEngineAdapter.SelectSearchEngineCallback, |
+ OnLayoutChangeListener { |
+ private ListView mListView; |
+ private View mCancelButton; |
+ private View mSaveButton; |
+ private View mDivider; |
- static final String PREF_SEARCH_ENGINE = "search_engine"; |
- |
- // The custom search engine adapter for the data to show in the dialog. |
private SearchEngineAdapter mSearchEngineAdapter; |
- |
- public SearchEnginePreference(Context context, AttributeSet attrs) { |
- super(context, attrs); |
- setEnabled(false); |
- mSearchEngineAdapter = new SearchEngineAdapter(getContext(), this); |
- } |
+ private int mSelectedIndex; |
@VisibleForTesting |
String getValueForTesting() { |
@@ -37,36 +38,68 @@ public class SearchEnginePreference extends DialogPreference |
@VisibleForTesting |
void setValueForTesting(String value) { |
mSearchEngineAdapter.setValueForTesting(value); |
+ TemplateUrlService.getInstance().setSearchEngine(mSelectedIndex); |
} |
- // DialogPreference: |
- |
- /** |
- * @see DialogPreference#showDialog |
- */ |
- public void showDialog() { |
- super.showDialog(null); |
+ @Override |
+ public void onCreate(Bundle savedInstanceState) { |
+ super.onCreate(savedInstanceState); |
+ getActivity().setTitle(R.string.prefs_search_engine); |
+ mSearchEngineAdapter = new SearchEngineAdapter(getActivity(), this); |
} |
@Override |
- protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { |
- super.onPrepareDialogBuilder(builder); |
+ public View onCreateView( |
+ LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { |
+ View view = inflater.inflate(R.layout.search_engine_layout, container, false); |
+ mListView = (ListView) view.findViewById(android.R.id.list); |
+ mListView.setAdapter(mSearchEngineAdapter); |
+ mListView.setDivider(null); |
+ mListView.addOnLayoutChangeListener(this); |
+ mCancelButton = view.findViewById(R.id.cancel_button); |
+ mCancelButton.setOnClickListener(this); |
+ mSaveButton = view.findViewById(R.id.save_button); |
+ mSaveButton.setOnClickListener(this); |
+ mDivider = view.findViewById(R.id.bottom_shadow); |
+ return view; |
+ } |
- builder.setNegativeButton(null, null) |
- .setPositiveButton(R.string.close, null) |
- .setSingleChoiceItems(mSearchEngineAdapter, 0, null); |
+ @Override |
+ public void onActivityCreated(Bundle savedInstanceState) { |
+ super.onActivityCreated(savedInstanceState); |
} |
- // SelectSearchEngineAdapter.SelectSearchEngineCallback: |
+ @Override |
+ public void onClick(View v) { |
+ if (v == mCancelButton) { |
+ getActivity().finish(); |
+ } else if (v == mSaveButton) { |
+ TemplateUrlService.getInstance().setSearchEngine(mSelectedIndex); |
+ getActivity().finish(); |
+ } |
+ } |
@Override |
- public void currentSearchEngineDetermined(String name) { |
- setSummary(name); |
- setEnabled(true); |
+ public void currentSearchEngineDetermined(int selectedIndex) { |
+ mSelectedIndex = selectedIndex; |
+ } |
+ |
+ /** |
+ * Displays the divider if the Listview is longer than its viewport. |
+ */ |
+ public void updateBottombarDivider() { |
+ if (mListView.getLastVisiblePosition() == mSearchEngineAdapter.getCount() - 1) { |
+ mDivider.setVisibility(View.INVISIBLE); |
+ } else { |
+ mDivider.setVisibility(View.VISIBLE); |
+ } |
} |
@Override |
- public void onDismissDialog() { |
- getDialog().dismiss(); |
+ public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, |
+ int oldTop, int oldRight, int oldBottom) { |
+ if (v == mListView) { |
+ updateBottombarDivider(); |
+ } |
} |
} |