| 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);
|
| }
|
|
|