Accessibility tweaks

 Min font size now shows pt value
 Text size replaced with text zoom

Change-Id: Ic5906be094425bc5099a17571868c7a994a6cb86
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 3aef08f..fae59e2 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -87,6 +87,11 @@
     // Aka, the lower bounds for the min font size range
     // which is 1:5..24
     private static final int MIN_FONT_SIZE_OFFSET = 5;
+    // The initial value in the text zoom range
+    // This is what represents 100% in the SeekBarPreference range
+    private static final int TEXT_ZOOM_START_VAL = 10;
+    // The size of a single step in the text zoom range, in percent
+    private static final int TEXT_ZOOM_STEP = 5;
 
     private static BrowserSettings sInstance;
 
@@ -116,6 +121,31 @@
             // This is a release build, always startup with debug disabled
             setDebugEnabled(false);
         }
+        if (mPrefs.contains(PREF_TEXT_SIZE)) {
+            /*
+             * Update from TextSize enum to zoom percent
+             * SMALLEST is 50%
+             * SMALLER is 75%
+             * NORMAL is 100%
+             * LARGER is 150%
+             * LARGEST is 200%
+             */
+            switch (getTextSize()) {
+            case SMALLEST:
+                setTextZoom(50);
+                break;
+            case SMALLER:
+                setTextZoom(75);
+                break;
+            case LARGER:
+                setTextZoom(150);
+                break;
+            case LARGEST:
+                setTextZoom(200);
+                break;
+            }
+            mPrefs.edit().remove(PREF_TEXT_SIZE).apply();
+        }
         mAutofillHandler = new AutofillHandler(mContext);
         mManagedSettings = new LinkedList<WeakReference<WebSettings>>();
         mCustomUserAgents = new WeakHashMap<WebSettings, String>();
@@ -158,7 +188,7 @@
         settings.setMinimumLogicalFontSize(getMinimumFontSize());
         settings.setForceUserScalable(forceEnableUserScalable());
         settings.setPluginState(getPluginState());
-        settings.setTextSize(getTextSize());
+        settings.setTextZoom(getTextZoom());
         settings.setAutoFillEnabled(isAutofillEnabled());
         settings.setLayoutAlgorithm(getLayoutAlgorithm());
         settings.setJavaScriptCanOpenWindowsAutomatically(blockPopupWindows());
@@ -417,29 +447,51 @@
         }
     }
 
+    public static int getAdjustedMinimumFontSize(int rawValue) {
+        rawValue++; // Preference starts at 0, min font at 1
+        if (rawValue > 1) {
+            rawValue += (MIN_FONT_SIZE_OFFSET - 2);
+        }
+        return rawValue;
+    }
+
+    public static int getAdjustedTextZoom(int rawValue) {
+        rawValue = (rawValue - TEXT_ZOOM_START_VAL) * TEXT_ZOOM_STEP;
+        return rawValue + 100;
+    }
+
+    static int getRawTextZoom(int percent) {
+        return (percent - 100) / TEXT_ZOOM_STEP + TEXT_ZOOM_START_VAL;
+    }
+
     // -----------------------------
     // getter/setters for accessibility_preferences.xml
     // -----------------------------
 
-    // TODO: Cache
-    public TextSize getTextSize() {
+    @Deprecated
+    private TextSize getTextSize() {
         String textSize = mPrefs.getString(PREF_TEXT_SIZE, "NORMAL");
         return TextSize.valueOf(textSize);
     }
 
     public int getMinimumFontSize() {
         int minFont = mPrefs.getInt(PREF_MIN_FONT_SIZE, 0);
-        minFont++; // Preference starts at 0, min font at 1
-        if (minFont > 1) {
-            minFont += MIN_FONT_SIZE_OFFSET;
-        }
-        return minFont;
+        return getAdjustedMinimumFontSize(minFont);
     }
 
     public boolean forceEnableUserScalable() {
         return mPrefs.getBoolean(PREF_FORCE_USERSCALABLE, false);
     }
 
+    public int getTextZoom() {
+        int textZoom = mPrefs.getInt(PREF_TEXT_ZOOM, 10);
+        return getAdjustedTextZoom(textZoom);
+    }
+
+    public void setTextZoom(int percent) {
+        mPrefs.edit().putInt(PREF_TEXT_ZOOM, getRawTextZoom(percent)).apply();
+    }
+
     // -----------------------------
     // getter/setters for advanced_preferences.xml
     // -----------------------------
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index f7230df..c90213f 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -26,6 +26,7 @@
     // ----------------------
     static final String PREF_MIN_FONT_SIZE = "min_font_size";
     static final String PREF_TEXT_SIZE = "text_size";
+    static final String PREF_TEXT_ZOOM = "text_zoom";
     static final String PREF_FORCE_USERSCALABLE = "force_userscalable";
 
     // ----------------------
diff --git a/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
index d083f43..b7d06a1 100644
--- a/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
@@ -16,33 +16,44 @@
 
 package com.android.browser.preferences;
 
-import com.android.browser.PreferenceKeys;
-import com.android.browser.R;
-
-import android.content.res.Resources;
+import android.content.Context;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.PreferenceFragment;
-import android.view.View;
+
+import com.android.browser.BrowserSettings;
+import com.android.browser.PreferenceKeys;
+import com.android.browser.R;
+
+import java.text.NumberFormat;
 
 public class AccessibilityPreferencesFragment extends PreferenceFragment
         implements Preference.OnPreferenceChangeListener {
 
+    NumberFormat mFormat;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.accessibility_preferences);
+        BrowserSettings settings = BrowserSettings.getInstance();
+        mFormat = NumberFormat.getPercentInstance();
 
-        Preference e = findPreference(PreferenceKeys.PREF_TEXT_SIZE);
+        Preference e = findPreference(PreferenceKeys.PREF_MIN_FONT_SIZE);
         e.setOnPreferenceChangeListener(this);
-        e.setSummary(getVisualTextSizeName(
-                getPreferenceScreen().getSharedPreferences()
-                .getString(PreferenceKeys.PREF_TEXT_SIZE, null)) );
+        updateMinFontSummary(e, settings.getMinimumFontSize());
+        e = findPreference(PreferenceKeys.PREF_TEXT_ZOOM);
+        e.setOnPreferenceChangeListener(this);
+        updateTextZoomSummary(e, settings.getTextZoom());
     }
 
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
+    void updateMinFontSummary(Preference pref, int minFontSize) {
+        Context c = getActivity();
+        pref.setSummary(c.getString(R.string.pref_min_font_size_value, minFontSize));
+    }
+
+    void updateTextZoomSummary(Preference pref, int textZoom) {
+        pref.setSummary(mFormat.format(textZoom / 100.0));
     }
 
     @Override
@@ -53,31 +64,15 @@
             return false;
         }
 
-        if (pref.getKey().equals(PreferenceKeys.PREF_TEXT_SIZE)) {
-            pref.setSummary(getVisualTextSizeName((String) objValue));
-            return true;
+        if (PreferenceKeys.PREF_MIN_FONT_SIZE.equals(pref.getKey())) {
+            updateMinFontSummary(pref, BrowserSettings
+                    .getAdjustedMinimumFontSize((Integer) objValue));
         }
-        return false;
-    }
-
-    private CharSequence getVisualTextSizeName(String enumName) {
-        Resources res = getActivity().getResources();
-        CharSequence[] visualNames = res.getTextArray(R.array.pref_text_size_choices);
-        CharSequence[] enumNames = res.getTextArray(R.array.pref_text_size_values);
-
-        // Sanity check
-        if (visualNames.length != enumNames.length) {
-            return "";
+        if (PreferenceKeys.PREF_TEXT_ZOOM.equals(pref.getKey())) {
+            updateTextZoomSummary(pref, BrowserSettings
+                    .getAdjustedTextZoom((Integer) objValue));
         }
-
-        int length = enumNames.length;
-        for (int i = 0; i < length; i++) {
-            if (enumNames[i].equals(enumName)) {
-                return visualNames[i];
-            }
-        }
-
-        return "";
+        return true;
     }
 
 }
\ No newline at end of file
diff --git a/src/com/android/browser/preferences/FontSizePreference.java b/src/com/android/browser/preferences/FontSizePreference.java
index 266a584..0ff1e6d 100644
--- a/src/com/android/browser/preferences/FontSizePreference.java
+++ b/src/com/android/browser/preferences/FontSizePreference.java
@@ -18,22 +18,62 @@
 
 import android.content.Context;
 import android.preference.SeekBarPreference;
+import android.text.TextUtils;
 import android.util.AttributeSet;
+import android.view.View;
 import android.widget.SeekBar;
+import android.widget.TextView;
+
+import com.android.browser.R;
 
 public class FontSizePreference extends SeekBarPreference {
 
+    CharSequence mSummary;
+    TextView mSummaryView;
+
     public FontSizePreference(
             Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
+        init();
     }
 
     public FontSizePreference(Context context, AttributeSet attrs) {
         super(context, attrs);
+        init();
     }
 
     public FontSizePreference(Context context) {
         super(context);
+        init();
+    }
+
+    void init() {
+        setWidgetLayoutResource(R.layout.font_size_widget);
+    }
+
+    @Override
+    public void setSummary(CharSequence summary) {
+        mSummary = summary;
+        if (mSummaryView != null) {
+            mSummaryView.setText(mSummary);
+        }
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        return null;
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+        mSummaryView = (TextView) view.findViewById(R.id.text);
+        if (TextUtils.isEmpty(mSummary)) {
+            mSummaryView.setVisibility(View.GONE);
+        } else {
+            mSummaryView.setVisibility(View.VISIBLE);
+            mSummaryView.setText(mSummary);
+        }
     }
 
     @Override
diff --git a/src/com/android/browser/preferences/WebViewPreview.java b/src/com/android/browser/preferences/WebViewPreview.java
index dca4d19..1886bed 100644
--- a/src/com/android/browser/preferences/WebViewPreview.java
+++ b/src/com/android/browser/preferences/WebViewPreview.java
@@ -33,7 +33,7 @@
 
 public class WebViewPreview extends Preference implements OnSharedPreferenceChangeListener {
 
-    static final String HTML_FORMAT = "<html><head><style type=\"text/css\">p { margin: 2px auto;}</style><body><p style=\"font-size: .4em\">%s</p><p style=\"font-size: .7em\">%s</p><p style=\"font-size: 1em\">%s</p><p style=\"font-size: 1.3em\">%s</p><p style=\"font-size: 1.6em\">%s</p></body></html>";
+    static final String HTML_FORMAT = "<html><head><style type=\"text/css\">p { margin: 2px auto;}</style><body><p style=\"font-size: 4pt\">%s</p><p style=\"font-size: 8pt\">%s</p><p style=\"font-size: 10pt\">%s</p><p style=\"font-size: 14pt\">%s</p><p style=\"font-size: 18pt\">%s</p></body></html>";
 
     String mHtml;
     private WebView mWebView;
@@ -67,7 +67,7 @@
         WebSettings ws = mWebView.getSettings();
         BrowserSettings bs = BrowserSettings.getInstance();
         ws.setMinimumFontSize(bs.getMinimumFontSize());
-        ws.setTextSize(bs.getTextSize());
+        ws.setTextZoom(bs.getTextZoom());
         mWebView.loadData(mHtml, "text/html", "utf-8");
     }