| 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();
|
| + }
|
| }
|
| }
|
|
|