1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochpackage org.chromium.components.dom_distiller.core; 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.base.CalledByNative; 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport org.chromium.base.JNINamespace; 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.base.NativeCall; 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.util.HashMap; 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.util.Map; 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Wrapper for the dom_distiller::DistilledPagePrefs. 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@JNINamespace("dom_distiller::android") 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochpublic final class DistilledPagePrefs { 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private final long mDistilledPagePrefsAndroid; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private Map<Observer, DistilledPagePrefsObserverWrapper> mObserverMap; 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Observer interface for observing DistilledPagePrefs changes. 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public interface Observer { 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void onChangeFontFamily(FontFamily font); 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void onChangeTheme(Theme theme); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Wrapper for dom_distiller::android::DistilledPagePrefsObserverAndroid. 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private static class DistilledPagePrefsObserverWrapper { 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private final Observer mDistilledPagePrefsObserver; 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private final long mNativeDistilledPagePrefsObserverAndroidPtr; 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public DistilledPagePrefsObserverWrapper(Observer observer) { 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mNativeDistilledPagePrefsObserverAndroidPtr = nativeInitObserverAndroid(); 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mDistilledPagePrefsObserver = observer; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @CalledByNative("DistilledPagePrefsObserverWrapper") 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private void onChangeFontFamily(int fontFamily) { 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mDistilledPagePrefsObserver.onChangeFontFamily( 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FontFamily.getFontFamilyForValue(fontFamily)); 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @CalledByNative("DistilledPagePrefsObserverWrapper") 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private void onChangeTheme(int theme) { 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mDistilledPagePrefsObserver.onChangeTheme(Theme.getThemeForValue(theme)); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void destroy() { 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) nativeDestroyObserverAndroid(mNativeDistilledPagePrefsObserverAndroidPtr); 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public long getNativePtr() { 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return mNativeDistilledPagePrefsObserverAndroidPtr; 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @NativeCall("DistilledPagePrefsObserverWrapper") 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private native long nativeInitObserverAndroid(); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @NativeCall("DistilledPagePrefsObserverWrapper") 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private native void nativeDestroyObserverAndroid( 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long nativeDistilledPagePrefsObserverAndroid); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DistilledPagePrefs(long distilledPagePrefsPtr) { 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mDistilledPagePrefsAndroid = nativeInit(distilledPagePrefsPtr); 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mObserverMap = new HashMap<Observer, DistilledPagePrefsObserverWrapper>(); 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Adds the observer to listen to changes in DistilledPagePrefs. 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @return whether the observerMap was changed as a result of the call. 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public boolean addObserver(Observer obs) { 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (mObserverMap.containsKey(obs)) return false; 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DistilledPagePrefsObserverWrapper wrappedObserver = 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new DistilledPagePrefsObserverWrapper(obs); 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) nativeAddObserver(mDistilledPagePrefsAndroid, wrappedObserver.getNativePtr()); 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mObserverMap.put(obs, wrappedObserver); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Removes the observer and unregisters it from DistilledPagePrefs changes. 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @return whether the observer was removed as a result of the call. 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public boolean removeObserver(Observer obs) { 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DistilledPagePrefsObserverWrapper wrappedObserver = mObserverMap.remove(obs); 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (wrappedObserver == null) return false; 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) nativeRemoveObserver(mDistilledPagePrefsAndroid, wrappedObserver.getNativePtr()); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) wrappedObserver.destroy(); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void setFontFamily(FontFamily fontFamily) { 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) nativeSetFontFamily(mDistilledPagePrefsAndroid, fontFamily.asNativeEnum()); 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public FontFamily getFontFamily() { 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return FontFamily.getFontFamilyForValue(nativeGetFontFamily(mDistilledPagePrefsAndroid)); 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public void setTheme(Theme theme) { 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nativeSetTheme(mDistilledPagePrefsAndroid, theme.asNativeEnum()); 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public Theme getTheme() { 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return Theme.getThemeForValue(nativeGetTheme(mDistilledPagePrefsAndroid)); 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private native long nativeInit(long distilledPagePrefPtr); 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private native void nativeSetFontFamily(long nativeDistilledPagePrefsAndroid, int fontFamily); 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private native int nativeGetFontFamily(long nativeDistilledPagePrefsAndroid); 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private native void nativeSetTheme(long nativeDistilledPagePrefsAndroid, int theme); 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private native int nativeGetTheme(long nativeDistilledPagePrefsAndroid); 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private native void nativeAddObserver(long nativeDistilledPagePrefsAndroid, 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long nativeObserverPtr); 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private native void nativeRemoveObserver(long nativeDistilledPagePrefsAndroid, 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long nativeObserverPtr); 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 132