1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5package org.chromium.components.dom_distiller.core; 6 7import org.chromium.base.CalledByNative; 8import org.chromium.base.JNINamespace; 9import org.chromium.base.NativeCall; 10 11import java.util.HashMap; 12import java.util.Map; 13 14/** 15 * Wrapper for the dom_distiller::DistilledPagePrefs. 16 */ 17@JNINamespace("dom_distiller::android") 18public final class DistilledPagePrefs { 19 20 private final long mDistilledPagePrefsAndroid; 21 private Map<Observer, DistilledPagePrefsObserverWrapper> mObserverMap; 22 23 /** 24 * Observer interface for observing DistilledPagePrefs changes. 25 */ 26 public interface Observer { 27 void onChangeFontFamily(FontFamily font); 28 void onChangeTheme(Theme theme); 29 } 30 31 /** 32 * Wrapper for dom_distiller::android::DistilledPagePrefsObserverAndroid. 33 */ 34 private static class DistilledPagePrefsObserverWrapper { 35 private final Observer mDistilledPagePrefsObserver; 36 private final long mNativeDistilledPagePrefsObserverAndroidPtr; 37 38 public DistilledPagePrefsObserverWrapper(Observer observer) { 39 mNativeDistilledPagePrefsObserverAndroidPtr = nativeInitObserverAndroid(); 40 mDistilledPagePrefsObserver = observer; 41 } 42 43 @CalledByNative("DistilledPagePrefsObserverWrapper") 44 private void onChangeFontFamily(int fontFamily) { 45 mDistilledPagePrefsObserver.onChangeFontFamily( 46 FontFamily.getFontFamilyForValue(fontFamily)); 47 } 48 49 @CalledByNative("DistilledPagePrefsObserverWrapper") 50 private void onChangeTheme(int theme) { 51 mDistilledPagePrefsObserver.onChangeTheme(Theme.getThemeForValue(theme)); 52 } 53 54 public void destroy() { 55 nativeDestroyObserverAndroid(mNativeDistilledPagePrefsObserverAndroidPtr); 56 } 57 58 public long getNativePtr() { 59 return mNativeDistilledPagePrefsObserverAndroidPtr; 60 } 61 62 @NativeCall("DistilledPagePrefsObserverWrapper") 63 private native long nativeInitObserverAndroid(); 64 65 @NativeCall("DistilledPagePrefsObserverWrapper") 66 private native void nativeDestroyObserverAndroid( 67 long nativeDistilledPagePrefsObserverAndroid); 68 } 69 70 DistilledPagePrefs(long distilledPagePrefsPtr) { 71 mDistilledPagePrefsAndroid = nativeInit(distilledPagePrefsPtr); 72 mObserverMap = new HashMap<Observer, DistilledPagePrefsObserverWrapper>(); 73 } 74 75 /* 76 * Adds the observer to listen to changes in DistilledPagePrefs. 77 * @return whether the observerMap was changed as a result of the call. 78 */ 79 public boolean addObserver(Observer obs) { 80 if (mObserverMap.containsKey(obs)) return false; 81 DistilledPagePrefsObserverWrapper wrappedObserver = 82 new DistilledPagePrefsObserverWrapper(obs); 83 nativeAddObserver(mDistilledPagePrefsAndroid, wrappedObserver.getNativePtr()); 84 mObserverMap.put(obs, wrappedObserver); 85 return true; 86 } 87 88 /* 89 * Removes the observer and unregisters it from DistilledPagePrefs changes. 90 * @return whether the observer was removed as a result of the call. 91 */ 92 public boolean removeObserver(Observer obs) { 93 DistilledPagePrefsObserverWrapper wrappedObserver = mObserverMap.remove(obs); 94 if (wrappedObserver == null) return false; 95 nativeRemoveObserver(mDistilledPagePrefsAndroid, wrappedObserver.getNativePtr()); 96 wrappedObserver.destroy(); 97 return true; 98 } 99 100 public void setFontFamily(FontFamily fontFamily) { 101 nativeSetFontFamily(mDistilledPagePrefsAndroid, fontFamily.asNativeEnum()); 102 } 103 104 public FontFamily getFontFamily() { 105 return FontFamily.getFontFamilyForValue(nativeGetFontFamily(mDistilledPagePrefsAndroid)); 106 } 107 108 public void setTheme(Theme theme) { 109 nativeSetTheme(mDistilledPagePrefsAndroid, theme.asNativeEnum()); 110 } 111 112 public Theme getTheme() { 113 return Theme.getThemeForValue(nativeGetTheme(mDistilledPagePrefsAndroid)); 114 } 115 116 private native long nativeInit(long distilledPagePrefPtr); 117 118 private native void nativeSetFontFamily(long nativeDistilledPagePrefsAndroid, int fontFamily); 119 120 private native int nativeGetFontFamily(long nativeDistilledPagePrefsAndroid); 121 122 private native void nativeSetTheme(long nativeDistilledPagePrefsAndroid, int theme); 123 124 private native int nativeGetTheme(long nativeDistilledPagePrefsAndroid); 125 126 private native void nativeAddObserver(long nativeDistilledPagePrefsAndroid, 127 long nativeObserverPtr); 128 129 private native void nativeRemoveObserver(long nativeDistilledPagePrefsAndroid, 130 long nativeObserverPtr); 131} 132