16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)package org.chromium.chrome.browser.accessibility;
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import android.content.Context;
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import android.content.SharedPreferences;
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import android.preference.PreferenceManager;
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import org.chromium.base.CalledByNative;
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import org.chromium.base.NativeCall;
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import org.chromium.base.ThreadUtils;
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import java.util.HashMap;
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import java.util.Map;
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/**
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Singleton wrapper class for native FontSizePrefs. Provides support for preferences for Font
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Scale Factor, Force Enable Zoom, and User Set Force Enable Zoom. User Set Force Enable Zoom
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * tracks whether the user  has manually set the force enable zoom button, while Force Enable Zoom
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * tracks whether force enable zoom is on or off. Font Scale Factor reflects the global font scale.
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)public class FontSizePrefs implements OnSharedPreferenceChangeListener {
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public static final String PREF_FORCE_ENABLE_ZOOM = "force_enable_zoom";
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public static final String PREF_TEXT_SCALE = "text_scale";
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public static final String PREF_USER_SET_FORCE_ENABLE_ZOOM = "user_set_force_enable_zoom";
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private static FontSizePrefs sFontSizePrefs;
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private final long mFontSizePrefsAndroidPtr;
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private final SharedPreferences mSharedPreferences;
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private final Map<Observer, FontSizePrefsObserverWrapper> mObserverMap;
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Observer interface for observing changes in FontScaleFactor, ForceEnableZoom and
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * UserSetForceEnableZoom.
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public interface Observer {
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        void onChangeFontSize(float newFontSize);
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        void onChangeForceEnableZoom(boolean enabled);
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        void onChangeUserSetForceEnableZoom(boolean enabled);
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Wrapper for FontSizePrefsObserverAndroid.
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private static class FontSizePrefsObserverWrapper {
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        private final Observer mFontSizePrefsObserver;
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        private final long mNativeFontSizePrefsObserverWrapperPtr;
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public FontSizePrefsObserverWrapper(Observer observer) {
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            mNativeFontSizePrefsObserverWrapperPtr = nativeInitObserverAndroid();
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            mFontSizePrefsObserver = observer;
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public long getNativePtr() {
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            return mNativeFontSizePrefsObserverWrapperPtr;
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public void destroy() {
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            nativeDestroyObserverAndroid(mNativeFontSizePrefsObserverWrapperPtr);
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        @CalledByNative("FontSizePrefsObserverWrapper")
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public void onChangeFontSize(float newFontSize) {
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            mFontSizePrefsObserver.onChangeFontSize(newFontSize);
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        @CalledByNative("FontSizePrefsObserverWrapper")
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public void onChangeForceEnableZoom(boolean enabled) {
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            mFontSizePrefsObserver.onChangeForceEnableZoom(enabled);
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public void onChangeUserSetForceEnableZoom(boolean enabled) {
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            mFontSizePrefsObserver.onChangeUserSetForceEnableZoom(enabled);
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        @NativeCall("FontSizePrefsObserverWrapper")
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        private native long nativeInitObserverAndroid();
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        @NativeCall("FontSizePrefsObserverWrapper")
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        private native void nativeDestroyObserverAndroid(long nativeFontSizePrefsObserverAndroid);
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private FontSizePrefs(Context context) {
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        mSharedPreferences.registerOnSharedPreferenceChangeListener(this);
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        mFontSizePrefsAndroidPtr = nativeInit();
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        mObserverMap = new HashMap<Observer, FontSizePrefsObserverWrapper>();
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Returns the FontSizePrefs corresponding to the inputted Profile. If no FontSizePrefs existed,
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * this method will create one.
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public static FontSizePrefs getInstance(Context context) {
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        ThreadUtils.assertOnUiThread();
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (sFontSizePrefs == null) {
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            sFontSizePrefs = new FontSizePrefs(context);
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return sFontSizePrefs;
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Adds the observer to listen for Font Scale and Force Enable Zoom preferences.
1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * @return true if the observerMap was changed as a result of the call.
1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean addObserver(Observer obs) {
1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        if (mObserverMap.containsKey(obs)) return false;
1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        FontSizePrefsObserverWrapper wrappedObserver =
1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                new FontSizePrefsObserverWrapper(obs);
1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        nativeAddObserver(mFontSizePrefsAndroidPtr, wrappedObserver.getNativePtr());
1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        mObserverMap.put(obs, wrappedObserver);
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return true;
1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Removes the observer and unregisters it from Font Scale and Force Enable Zoom changes.
1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * @return true if an observer was removed as a result of the call.
1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean removeObserver(Observer obs) {
1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        FontSizePrefsObserverWrapper wrappedObserver = mObserverMap.remove(obs);
1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        if (wrappedObserver == null) return false;
1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        nativeRemoveObserver(mFontSizePrefsAndroidPtr, wrappedObserver.getNativePtr());
1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        wrappedObserver.destroy();
1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return true;
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Sets UserSetForceEnableZoom. This is the only one of three preferences stored through
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * SharedPreferences.
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setUserSetForceEnableZoom(boolean enabled) {
1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit();
1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        sharedPreferencesEditor.putBoolean(PREF_USER_SET_FORCE_ENABLE_ZOOM, enabled);
1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        sharedPreferencesEditor.apply();
1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Returns true if user has manually set ForceEnableZoom and false otherwise.
1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean getUserSetForceEnableZoom() {
1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mSharedPreferences.getBoolean(PREF_USER_SET_FORCE_ENABLE_ZOOM,
1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                false);
1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setFontScaleFactor(float fontScaleFactor) {
1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        nativeSetFontScaleFactor(mFontSizePrefsAndroidPtr, fontScaleFactor);
1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @Override
1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        if (PREF_USER_SET_FORCE_ENABLE_ZOOM.equals(key)) {
1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            for (FontSizePrefsObserverWrapper obsWrapper : mObserverMap.values()) {
1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                obsWrapper.onChangeUserSetForceEnableZoom(getUserSetForceEnableZoom());
1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            }
1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public float getFontScaleFactor() {
1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return nativeGetFontScaleFactor(mFontSizePrefsAndroidPtr);
1636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setForceEnableZoom(boolean enabled) {
1666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        nativeSetForceEnableZoom(mFontSizePrefsAndroidPtr, enabled);
1676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean getForceEnableZoom() {
1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return nativeGetForceEnableZoom(mFontSizePrefsAndroidPtr);
1716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private native void nativeAddObserver(long nativeFontSizePrefsAndroid,
1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            long nativeObserverPtr);
1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private native void nativeRemoveObserver(long nativeFontSizePrefsAndroid,
1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            long nativeObserverPtr);
1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private native long nativeInit();
1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private native void nativeSetFontScaleFactor(long nativeFontSizePrefsAndroid, float font);
1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private native float nativeGetFontScaleFactor(long nativeFontSizePrefsAndroid);
1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private native boolean nativeGetForceEnableZoom(long nativeFontSizePrefsAndroid);
1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private native void nativeSetForceEnableZoom(long nativeFontSizePrefsAndroid, boolean enabled);
1886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
189