Index: components/dom_distiller/android/java/src/org/chromium/components/dom_distiller/core/DistilledPagePrefs.java |
diff --git a/components/dom_distiller/android/java/src/org/chromium/components/dom_distiller/core/DistilledPagePrefs.java b/components/dom_distiller/android/java/src/org/chromium/components/dom_distiller/core/DistilledPagePrefs.java |
index 3ec91baca8c91ad490fec48100bb72e9609e96e9..d69d4fb8adaaa486d85fe3872f551ad39c4dfd74 100644 |
--- a/components/dom_distiller/android/java/src/org/chromium/components/dom_distiller/core/DistilledPagePrefs.java |
+++ b/components/dom_distiller/android/java/src/org/chromium/components/dom_distiller/core/DistilledPagePrefs.java |
@@ -4,7 +4,12 @@ |
package org.chromium.components.dom_distiller.core; |
+import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
+import org.chromium.base.NativeCall; |
+ |
+import java.util.HashMap; |
+import java.util.Map; |
/** |
* Wrapper for the dom_distiller::DistilledPagePrefs. |
@@ -13,25 +18,85 @@ import org.chromium.base.JNINamespace; |
public final class DistilledPagePrefs { |
private final long mDistilledPagePrefsAndroid; |
+ private Map<Observer, DistilledPagePrefsObserverWrapper> mObserverMap; |
+ |
+ /** |
+ * Observer interface for observing DistilledPagePrefs changes. |
+ */ |
+ public interface Observer { |
+ void onChangeTheme(Theme theme); |
+ } |
+ |
+ /** |
+ * Wrapper for dom_distiller::android::DistilledPagePrefsObserverAndroid. |
+ */ |
+ private static class DistilledPagePrefsObserverWrapper { |
+ private final Observer mDistilledPagePrefsObserver; |
+ private final long mNativeDistilledPagePrefsObserverAndroidPtr; |
+ |
+ public DistilledPagePrefsObserverWrapper(Observer observer) { |
+ mNativeDistilledPagePrefsObserverAndroidPtr = nativeInitObserverAndroid(); |
+ mDistilledPagePrefsObserver = observer; |
+ } |
+ |
+ @CalledByNative("DistilledPagePrefsObserverWrapper") |
+ private void onChangeTheme(int theme) { |
+ mDistilledPagePrefsObserver.onChangeTheme(Theme.getThemeForValue(theme)); |
+ } |
+ |
+ public void destroy() { |
+ nativeDestroyObserverAndroid(mNativeDistilledPagePrefsObserverAndroidPtr); |
+ } |
+ |
+ public long getNativePtr() { |
+ return mNativeDistilledPagePrefsObserverAndroidPtr; |
+ } |
+ |
+ @NativeCall("DistilledPagePrefsObserverWrapper") |
+ private native long nativeInitObserverAndroid(); |
+ |
+ @NativeCall("DistilledPagePrefsObserverWrapper") |
+ private native void nativeDestroyObserverAndroid( |
+ long nativeDistilledPagePrefsObserverAndroid); |
+ } |
DistilledPagePrefs(long distilledPagePrefsPtr) { |
mDistilledPagePrefsAndroid = nativeInit(distilledPagePrefsPtr); |
+ mObserverMap = new HashMap<Observer, DistilledPagePrefsObserverWrapper>(); |
+ } |
+ |
+ public void addObserver(Observer obs) { |
+ DistilledPagePrefsObserverWrapper wrappedObserver = |
+ new DistilledPagePrefsObserverWrapper(obs); |
+ nativeAddObserver(mDistilledPagePrefsAndroid, wrappedObserver.getNativePtr()); |
+ mObserverMap.put(obs, wrappedObserver); |
+ } |
+ |
+ public void removeObserver(Observer obs) { |
+ DistilledPagePrefsObserverWrapper wrappedObserver = mObserverMap.remove(obs); |
+ if (wrappedObserver != null) { |
+ nativeRemoveObserver(mDistilledPagePrefsAndroid, wrappedObserver.getNativePtr()); |
+ wrappedObserver.destroy(); |
+ } |
} |
- // TODO(sunangel): Add observer support from this Java class to native |
- // counterpart so UI can be updated across tabs. |
public void setTheme(Theme theme) { |
nativeSetTheme(mDistilledPagePrefsAndroid, theme.asNativeEnum()); |
} |
public Theme getTheme() { |
- return Theme.getThemeForValue( |
- nativeGetTheme(mDistilledPagePrefsAndroid)); |
+ return Theme.getThemeForValue(nativeGetTheme(mDistilledPagePrefsAndroid)); |
} |
private native long nativeInit(long distilledPagePrefPtr); |
- private native void nativeSetTheme(long nativeDistilledPagePrefsAndroid, |
- int theme); |
- private native int nativeGetTheme( |
- long nativeDistilledPagePrefsAndroid); |
+ |
+ private native void nativeSetTheme(long nativeDistilledPagePrefsAndroid, int theme); |
+ |
+ private native int nativeGetTheme(long nativeDistilledPagePrefsAndroid); |
+ |
+ private native void nativeAddObserver(long nativeDistilledPagePrefsAndroid, |
+ long nativeObserverPtr); |
+ |
+ private native void nativeRemoveObserver(long nativeDistilledPagePrefsAndroid, |
+ long nativeObserverPtr); |
} |