From 961d35d6e9cd58d930d8572b91d7e0c9f928f1e8 Mon Sep 17 00:00:00 2001
From: John Reck <jreck@google.com>
Date: Thu, 23 Jun 2011 09:45:54 -0700
Subject: Move most visited to set homepage

 Bug: 4770245

Change-Id: If47b2f308ab3cd4b58dbcbf3a28cdb341481a885
---
 res/values/strings.xml                             |  30 ++--
 res/xml-sw600dp/lab_preferences.xml                |   6 -
 res/xml/general_preferences.xml                    |  10 +-
 res/xml/lab_preferences.xml                        |   5 -
 .../android/browser/BrowserHomepagePreference.java | 132 ------------------
 src/com/android/browser/BrowserSettings.java       |   7 +-
 src/com/android/browser/PreferenceKeys.java        |   1 -
 src/com/android/browser/UrlUtils.java              |   2 +-
 .../preferences/GeneralPreferencesFragment.java    | 155 +++++++++++++++++++--
 9 files changed, 171 insertions(+), 177 deletions(-)
 delete mode 100644 src/com/android/browser/BrowserHomepagePreference.java

diff --git a/res/values/strings.xml b/res/values/strings.xml
index 34ca824..55ab267 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -342,12 +342,25 @@
     <string name="pref_content_search_engine_summary">Select a search engine</string>
     <!-- Settings button label that to pick what to set the homepage to [CHAR LIMIT=40] -->
     <string name="pref_set_homepage_to">Set to\u2026</string>
-    <!-- Settings button label to set the homepage to the current page [CHAR LIMIT=40] -->
-    <string name="pref_use_current">Current page</string>
-    <!-- Settings button label to set the homepage to a blank page [CHAR LIMIT=40] -->
-    <string name="pref_use_blank">Blank page</string>
-    <!-- Settings button label to set the homepage to the default page [CHAR LIMIT=40] -->
-    <string name="pref_use_default">Default page</string>
+    <string-array name="pref_homepage_choices">
+        <!-- Setting choice to set the homepage to the current page [CHAR LIMIT=40] -->
+        <item>Current page</item>
+        <!-- Setting choice to set the homepage to a blank page [CHAR LIMIT=40] -->
+        <item>Blank page</item>
+        <!-- Setting choice to set the homepage to the default page [CHAR LIMIT=40] -->
+        <item>Default page</item>
+        <!-- Setting choice to set the homepage to the "Most Visited" homepage feature [CHAR LIMIT=40] -->
+        <item>Most-visited homepage</item>
+        <!-- Setting choice to set the homepage to a user entered URL [CHAR LIMIT=40] -->
+        <item>Other\u2026</item>
+    </string-array>
+    <string-array name="pref_homepage_values" translatable="false">
+        <item>current</item>
+        <item>blank</item>
+        <item>default</item>
+        <item>most_visited</item>
+        <item>other</item>
+    </string-array>
     <!-- Settings label -->
     <string name="pref_content_autofit">Auto-fit pages</string>
     <!-- Settings summary -->
@@ -643,11 +656,6 @@
     <!-- Summary for lab quick controls feature [CHAR LIMIT=80] -->
     <string name="pref_lab_quick_controls_summary">
         Swipe thumb from left or right edge to access quick controls and hide Application and URL bars</string>
-    <!-- Title for lab "Most Visited" homepage feature [CHAR LIMIT=40] -->
-    <string name="pref_lab_most_visited_homepage">Most-visited homepage</string>
-    <!-- Summary for lab "Most Visited" homepage feature [CHAR LIMIT=80] -->
-    <string name="pref_lab_most_visited_homepage_summary">
-        Your homepage displays your most-visited webpages.</string>
     <!-- Title for the "Instant search" lab feature [CHAR LIMIT=40] -->
     <string name="pref_use_instant_search">Google Instant</string>
     <!-- Summary for the "Instant search" lab feature [CHAR LIMIT=120] -->
diff --git a/res/xml-sw600dp/lab_preferences.xml b/res/xml-sw600dp/lab_preferences.xml
index 705f740..1dbec88 100644
--- a/res/xml-sw600dp/lab_preferences.xml
+++ b/res/xml-sw600dp/lab_preferences.xml
@@ -24,12 +24,6 @@
         android:summary="@string/pref_lab_quick_controls_summary" />
 
     <CheckBoxPreference
-        android:key="use_most_visited_homepage"
-        android:defaultValue="false"
-        android:title="@string/pref_lab_most_visited_homepage"
-        android:summary="@string/pref_lab_most_visited_homepage_summary" />
-
-    <CheckBoxPreference
         android:key="use_instant_search"
         android:defaultValue="false"
         android:title="@string/pref_use_instant_search"
diff --git a/res/xml/general_preferences.xml b/res/xml/general_preferences.xml
index 7b26307..13f09c1 100644
--- a/res/xml/general_preferences.xml
+++ b/res/xml/general_preferences.xml
@@ -16,11 +16,11 @@
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <com.android.browser.BrowserHomepagePreference
-            android:key="homepage"
-            android:title="@string/pref_content_homepage"
-            android:hint="@string/http"
-            android:inputType="textUri|textMultiLine" />
+    <ListPreference
+        android:key="homepage_picker"
+        android:entries="@array/pref_homepage_choices"
+        android:entryValues="@array/pref_homepage_values"
+        android:title="@string/pref_content_homepage" />
 
     <PreferenceCategory android:title="@string/pref_general_autofill_title">
         <CheckBoxPreference android:key="autofill_enabled"
diff --git a/res/xml/lab_preferences.xml b/res/xml/lab_preferences.xml
index ee00463..3320cee 100644
--- a/res/xml/lab_preferences.xml
+++ b/res/xml/lab_preferences.xml
@@ -22,11 +22,6 @@
         android:title="@string/pref_lab_quick_controls"
         android:summary="@string/pref_lab_quick_controls_summary" />
     <CheckBoxPreference
-        android:key="use_most_visited_homepage"
-        android:defaultValue="false"
-        android:title="@string/pref_lab_most_visited_homepage"
-        android:summary="@string/pref_lab_most_visited_homepage_summary" />
-    <CheckBoxPreference
         android:key="fullscreen"
         android:defaultValue="false"
         android:title="@string/pref_lab_fullscreen"
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 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener,
         }
     }
 
-    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 class BrowserSettings implements OnSharedPreferenceChangeListener,
     // -----------------------------
 
     public String getHomePage() {
-        if (useMostVisitedHomepage()) {
-            return HomeProvider.MOST_VISITED;
-        }
         return mPrefs.getString(PREF_HOMEPAGE, getFactoryResetHomeUrl(mContext));
     }
 
@@ -657,7 +654,7 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener,
     }
 
     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 @@ public interface PreferenceKeys {
     // 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 @@ public class UrlUtils {
      * @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 @@ public class GeneralPreferencesFragment extends PreferenceFragment
             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 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;
+    }
 
-        return false;
+    String getHomepageLabel(String value) {
+        for (int i = 0; i < mValues.length; i++) {
+            if (value.equals(mValues[i])) {
+                return mChoices[i];
+            }
+        }
+        return null;
     }
 
     @Override
-- 
cgit v1.1