Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(385)

Unified Diff: components/dom_distiller/android/java/src/org/chromium/components/dom_distiller/core/DistilledPagePrefs.java

Issue 403323005: Observer Support for DistilledPagePrefs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changed observerMap type from HashMap to Map Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698