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