Index: components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java |
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java |
index f14368f8158cde1e83e3283a11069bce6132581d..8c3a57ed42be530d5ef4925719c68ff6a3344485 100644 |
--- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java |
+++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java |
@@ -4,6 +4,8 @@ |
package org.chromium.components.offline_items_collection; |
+import android.os.Handler; |
+ |
import org.chromium.base.ObserverList; |
import org.chromium.base.annotations.CalledByNative; |
import org.chromium.base.annotations.JNINamespace; |
@@ -18,6 +20,8 @@ import java.util.ArrayList; |
*/ |
@JNINamespace("offline_items_collection::android") |
public class OfflineContentAggregatorBridge implements OfflineContentProvider { |
+ private final Handler mHandler = new Handler(); |
+ |
private long mNativeOfflineContentAggregatorBridge; |
private ObserverList<OfflineContentProvider.Observer> mObservers; |
private boolean mItemsAvailable; |
@@ -82,8 +86,22 @@ public class OfflineContentAggregatorBridge implements OfflineContentProvider { |
} |
@Override |
- public void addObserver(OfflineContentProvider.Observer observer) { |
+ public void getVisualsForItem(ContentId id, VisualsCallback callback) { |
+ nativeGetVisualsForItem( |
+ mNativeOfflineContentAggregatorBridge, id.namespace, id.id, callback); |
+ } |
+ |
+ @Override |
+ public void addObserver(final OfflineContentProvider.Observer observer) { |
mObservers.addObserver(observer); |
+ if (!areItemsAvailable()) return; |
+ |
+ mHandler.post(new Runnable() { |
+ @Override |
+ public void run() { |
+ notifyObserverOfItemsReady(observer); |
+ } |
+ }); |
} |
@Override |
@@ -91,6 +109,11 @@ public class OfflineContentAggregatorBridge implements OfflineContentProvider { |
mObservers.removeObserver(observer); |
} |
+ private void notifyObserverOfItemsReady(Observer observer) { |
+ if (!mObservers.hasObserver(observer)) return; |
+ observer.onItemsAvailable(); |
+ } |
+ |
// Methods called from C++ via JNI. |
@CalledByNative |
private void onItemsAvailable() { |
@@ -126,6 +149,12 @@ public class OfflineContentAggregatorBridge implements OfflineContentProvider { |
} |
} |
+ @CalledByNative |
+ private static void onVisualsAvailable( |
+ VisualsCallback callback, String nameSpace, String id, OfflineItemVisuals visuals) { |
+ callback.onVisualsAvailable(new ContentId(nameSpace, id), visuals); |
+ } |
+ |
/** |
* Called when the C++ OfflineContentAggregatorBridge is destroyed. This tears down the Java |
* component of the JNI bridge so that this class, which may live due to other references, no |
@@ -163,4 +192,6 @@ public class OfflineContentAggregatorBridge implements OfflineContentProvider { |
long nativeOfflineContentAggregatorBridge, String nameSpace, String id); |
private native ArrayList<OfflineItem> nativeGetAllItems( |
long nativeOfflineContentAggregatorBridge); |
+ private native void nativeGetVisualsForItem(long nativeOfflineContentAggregatorBridge, |
+ String nameSpace, String id, VisualsCallback callback); |
} |