Move most visited to set homepage

 Bug: 4770245

Change-Id: If47b2f308ab3cd4b58dbcbf3a28cdb341481a885
diff --git a/src/com/android/browser/BrowserHomepagePreference.java b/src/com/android/browser/BrowserHomepagePreference.java
deleted file mode 100644
index cbe5b0d..0000000
--- a/src/com/android/browser/BrowserHomepagePreference.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.browser;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.util.AttributeSet;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-public class BrowserHomepagePreference extends EditTextPreference
-        implements OnEditorActionListener {
-    private String mCurrentPage;
-
-    public BrowserHomepagePreference(Context context, AttributeSet attrs,
-            int defStyle) {
-        super(context, attrs, defStyle);
-    }
-
-    public BrowserHomepagePreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public BrowserHomepagePreference(Context context) {
-        super(context);
-    }
-
-    @Override
-    protected void onAddEditTextToDialogView(View dialogView,
-            EditText editText) {
-        super.onAddEditTextToDialogView(dialogView, editText);
-        editText.setSelectAllOnFocus(true);
-        editText.setSingleLine(true);
-        editText.setImeActionLabel(null, EditorInfo.IME_ACTION_DONE);
-        editText.setOnEditorActionListener(this);
-        // Now the EditText has a parent.  Add a button to set to the current
-        // page.
-        createButtons((ViewGroup) editText.getParent());
-    }
-
-    @Override
-    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-        if (actionId == EditorInfo.IME_ACTION_DONE) {
-            onClick(getDialog(), DialogInterface.BUTTON_POSITIVE);
-            getDialog().dismiss();
-            return true;
-        }
-        return false;
-    }
-
-    void createButtons(ViewGroup parent) {
-        LayoutInflater inflater = (LayoutInflater) getContext()
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        View v = inflater.inflate(R.layout.pref_homepage_buttons, parent);
-        v.findViewById(R.id.use_current).setOnClickListener(mOnClick);
-        v.findViewById(R.id.use_default).setOnClickListener(mOnClick);
-    }
-
-    OnClickListener mOnClick = new OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            switch (v.getId()) {
-            case R.id.use_current:
-                getEditText().setText(mCurrentPage);
-                break;
-            case R.id.use_default:
-                getEditText().setText(
-                        BrowserSettings.getFactoryResetHomeUrl(getContext()));
-                break;
-            }
-        }
-    };
-
-    @Override
-    protected void onDialogClosed(boolean positiveResult) {
-        if (positiveResult) {
-            String url = getEditText().getText().toString().trim();
-            if (url.length() > 0) {
-                url = UrlUtils.smartUrlFilter(url);
-            }
-            getEditText().setText(url);
-        }
-        super.onDialogClosed(positiveResult);
-    }
-
-    /**
-     * Set the current page of the browser.
-     * @param currentPage This String will replace the text in the EditText
-     *          when the user clicks the "Use current page" button.
-     */
-    public void setCurrentPage(String currentPage) {
-        mCurrentPage = currentPage;
-    }
-
-    @Override
-    protected void showDialog(Bundle state) {
-        super.showDialog(state);
-        // The dialog has its width set to wrap_content.  Change it to
-        // match_parent so there is more room to type in a url.
-        Window window = getDialog().getWindow();
-        View decorView = window.getDecorView();
-        WindowManager.LayoutParams params
-                = (WindowManager.LayoutParams) decorView.getLayoutParams();
-        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
-        window.getWindowManager().updateViewLayout(decorView, params);
-    }
-}
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index fae59e2..4928e61 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -279,7 +279,7 @@
         }
     }
 
-    static String getFactoryResetHomeUrl(Context context) {
+    public static String getFactoryResetHomeUrl(Context context) {
         String url = context.getResources().getString(R.string.homepage_base);
         if (url.indexOf("{CID}") != -1) {
             url = url.replace("{CID}",
@@ -545,9 +545,6 @@
     // -----------------------------
 
     public String getHomePage() {
-        if (useMostVisitedHomepage()) {
-            return HomeProvider.MOST_VISITED;
-        }
         return mPrefs.getString(PREF_HOMEPAGE, getFactoryResetHomeUrl(mContext));
     }
 
@@ -657,7 +654,7 @@
     }
 
     public boolean useMostVisitedHomepage() {
-        return mPrefs.getBoolean(PREF_USE_MOST_VISITED_HOMEPAGE, false);
+        return HomeProvider.MOST_VISITED.equals(getHomePage());
     }
 
     public boolean useInstantSearch() {
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index c90213f..bc8d38f 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -76,7 +76,6 @@
     // Keys for lab_preferences.xml
     // ----------------------
     static final String PREF_ENABLE_QUICK_CONTROLS = "enable_quick_controls";
-    static final String PREF_USE_MOST_VISITED_HOMEPAGE = "use_most_visited_homepage";
     static final String PREF_USE_INSTANT_SEARCH = "use_instant_search";
     static final String PREF_FULLSCREEN = "fullscreen";
 
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index ccf9710..26f8e0e 100644
--- a/src/com/android/browser/UrlUtils.java
+++ b/src/com/android/browser/UrlUtils.java
@@ -84,7 +84,7 @@
      * @return Original or modified URL
      *
      */
-    protected static String smartUrlFilter(String url) {
+    public static String smartUrlFilter(String url) {
 
         String inUrl = url.trim();
         boolean hasSpace = inUrl.indexOf(' ') != -1;
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index af0fc50..05aa1a7 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -16,34 +16,65 @@
 
 package com.android.browser.preferences;
 
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.res.Resources;
 import android.os.Bundle;
+import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceFragment;
 import android.preference.PreferenceScreen;
+import android.text.InputType;
+import android.text.TextUtils;
 import android.util.Log;
+import android.view.KeyEvent;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
 
-import com.android.browser.BrowserHomepagePreference;
 import com.android.browser.BrowserPreferencesPage;
+import com.android.browser.BrowserSettings;
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
+import com.android.browser.UrlUtils;
+import com.android.browser.homepages.HomeProvider;
 
 public class GeneralPreferencesFragment extends PreferenceFragment
         implements Preference.OnPreferenceChangeListener {
+
     static final String TAG = "PersonalPreferencesFragment";
 
+    static final String BLANK_URL = "about:blank";
+    static final String CURRENT = "current";
+    static final String BLANK = "blank";
+    static final String DEFAULT = "default";
+    static final String MOST_VISITED = "most_visited";
+    static final String OTHER = "other";
+
+    static final String PREF_HOMEPAGE_PICKER = "homepage_picker";
+
+    String[] mChoices, mValues;
+    String mCurrentPage;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        Resources res = getActivity().getResources();
+        mChoices = res.getStringArray(R.array.pref_homepage_choices);
+        mValues = res.getStringArray(R.array.pref_homepage_values);
+        mCurrentPage = getActivity().getIntent()
+                .getStringExtra(BrowserPreferencesPage.CURRENT_PAGE);
 
         // Load the XML preferences file
         addPreferencesFromResource(R.xml.general_preferences);
 
-        Preference e = findPreference(PreferenceKeys.PREF_HOMEPAGE);
-        e.setOnPreferenceChangeListener(this);
-        e.setSummary(getPreferenceScreen().getSharedPreferences()
-                .getString(PreferenceKeys.PREF_HOMEPAGE, null));
-        ((BrowserHomepagePreference) e).setCurrentPage(
-                getActivity().getIntent().getStringExtra(BrowserPreferencesPage.CURRENT_PAGE));
+        ListPreference pref = (ListPreference) findPreference(PREF_HOMEPAGE_PICKER);
+        pref.setSummary(getHomepageSummary());
+        pref.setPersistent(false);
+        pref.setValue(getHomepageValue());
+        pref.setOnPreferenceChangeListener(this);
     }
 
     @Override
@@ -55,12 +86,114 @@
             return false;
         }
 
-        if (pref.getKey().equals(PreferenceKeys.PREF_HOMEPAGE)) {
-            pref.setSummary((String) objValue);
-            return true;
+        if (pref.getKey().equals(PREF_HOMEPAGE_PICKER)) {
+            BrowserSettings settings = BrowserSettings.getInstance();
+            if (CURRENT.equals(objValue)) {
+                settings.setHomePage(mCurrentPage);
+            }
+            if (BLANK.equals(objValue)) {
+                settings.setHomePage(BLANK_URL);
+            }
+            if (DEFAULT.equals(objValue)) {
+                settings.setHomePage(BrowserSettings.getFactoryResetHomeUrl(
+                        getActivity()));
+            }
+            if (MOST_VISITED.equals(objValue)) {
+                settings.setHomePage(HomeProvider.MOST_VISITED);
+            }
+            if (OTHER.equals(objValue)) {
+                promptForHomepage((ListPreference) pref);
+                return false;
+            }
+            pref.setSummary(getHomepageSummary());
+            ((ListPreference)pref).setValue(getHomepageValue());
+            return false;
         }
 
-        return false;
+        return true;
+    }
+
+    void promptForHomepage(final ListPreference pref) {
+        final BrowserSettings settings = BrowserSettings.getInstance();
+        final EditText editText = new EditText(getActivity());
+        editText.setInputType(InputType.TYPE_CLASS_TEXT
+                | InputType.TYPE_TEXT_VARIATION_URI);
+        editText.setText(settings.getHomePage());
+        editText.setSelectAllOnFocus(true);
+        editText.setSingleLine(true);
+        editText.setImeActionLabel(null, EditorInfo.IME_ACTION_DONE);
+        final AlertDialog dialog = new AlertDialog.Builder(getActivity())
+                .setView(editText)
+                .setPositiveButton(android.R.string.ok, new OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        String homepage = editText.getText().toString().trim();
+                        homepage = UrlUtils.smartUrlFilter(homepage);
+                        settings.setHomePage(homepage);
+                        pref.setValue(getHomepageValue());
+                        pref.setSummary(getHomepageSummary());
+                    }
+                })
+                .setNegativeButton(android.R.string.cancel, new OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        dialog.cancel();
+                    }
+                })
+                .setTitle(R.string.pref_set_homepage_to)
+                .create();
+        editText.setOnEditorActionListener(new OnEditorActionListener() {
+            @Override
+            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+                if (actionId == EditorInfo.IME_ACTION_DONE) {
+                    dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
+                    return true;
+                }
+                return false;
+            }
+        });
+        dialog.show();
+    }
+
+    String getHomepageValue() {
+        BrowserSettings settings = BrowserSettings.getInstance();
+        String homepage = settings.getHomePage();
+        if (TextUtils.isEmpty(homepage) || BLANK_URL.endsWith(homepage)) {
+            return BLANK;
+        }
+        if (HomeProvider.MOST_VISITED.equals(homepage)) {
+            return MOST_VISITED;
+        }
+        String defaultHomepage = BrowserSettings.getFactoryResetHomeUrl(
+                getActivity());
+        if (TextUtils.equals(defaultHomepage, homepage)) {
+            return DEFAULT;
+        }
+        if (TextUtils.equals(mCurrentPage, homepage)) {
+            return CURRENT;
+        }
+        return OTHER;
+    }
+
+    String getHomepageSummary() {
+        BrowserSettings settings = BrowserSettings.getInstance();
+        if (settings.useMostVisitedHomepage()) {
+            return getHomepageLabel(MOST_VISITED);
+        }
+        String homepage = settings.getHomePage();
+        if (TextUtils.isEmpty(homepage) || BLANK_URL.equals(homepage)) {
+            return getHomepageLabel(BLANK);
+        }
+        return homepage;
+    }
+
+    String getHomepageLabel(String value) {
+        for (int i = 0; i < mValues.length; i++) {
+            if (value.equals(mValues[i])) {
+                return mChoices[i];
+            }
+        }
+        return null;
     }
 
     @Override