init
MoPubRecyclerAdapter(
streamAdPlacer: MoPubStreamAdPlacer(activity, adPositioning),
originalAdapter,
visibilityTracker: VisibilityTracker(activity)
)
MoPubRecyclerAdapter(
activity!!,
originalAdapter,
adPositioning=MoPubServerPositioning()
) {
this@MoPubRecyclerAdapter(
streamAdPlacer=new MoPubStreamAdPlacer(activity, adPositioning),
originalAdapter,
visibilityTracker=new VisibilityTracker(activity)
) {
mStreamAdPlacer = streamAdPlacer;
mStreamAdPlacer.setAdLoadedListener(...)
mStreamAdPlacer.setItemCount(...)
mOriginalAdapter = originalAdapter;
setHasStableIdsInternal(mOriginalAdapter.hasStableIds());
mOriginalAdapter.registerAdapterDataObserver(mAdapterDataObserver);
mVisibilityTracker = visibilityTracker;
mVisibilityTracker.setVisibilityTrackerListener(...)
mViewPositionMap = new WeakHashMap<>();
}
}
All content manipulation happens through an AdapterDataObserver
that the MoPub SDK registers on your original adapter.
MoPubStreamAdPlacer(
activity,
adSource: NativeAdSource(),
positioningSource: ServerPositioningSource(activity)
)
NativeAdSource(
nativeAdCache: ArrayList<TimestampWrapper<NativeAd>>(CACHE_LIMIT),
replenishCacheHandler: Handler(),
adRendererRegistry: AdRendererRegistry()
)
this@MoPubRecyclerAdapter(
streamAdPlacer=new MoPubStreamAdPlacer(activity, adPositioning) {
this@MoPubStreamAdPlacer(
activity,
adSource=new NativeAdSource() {
this@NativeAdSource(
nativeAdCache=new ArrayList<TimestampWrapper<NativeAd>>(CACHE_LIMIT),
replenishCacheHandler=new Handler(),
adRendererRegistry=new AdRendererRegistry()) {
mNativeAdCache = nativeAdCache;
mReplenishCacheHandler = replenishCacheHandler;
mReplenishCacheRunnable = new Runnable() {...}
mAdRendererRegistry = adRendererRegistry;
mMoPubNativeNetworkListener: MoPubNativeNetworkListener {...}
mSequenceNumber = 0;
resetRetryTime();
}
},
positioningSource=new ServerPositioningSource(activity)
) {
mActivity = activity;
mAdSource = adSource;
mPositioningSource = positioningSource;
mNativeAdMap: WeakHashMap
mViewMap: HashMap
mPlacementHandler: Handler
mPlacementRunnable = new Runnable() {...}
mVisibleRangeStart = 0;
mVisibleRangeEnd = 0;
}
},
originalAdapter,
visibilityTracker=new VisibilityTracker(activity)
)
loadAds
@MoPubRecyclerAdapter
recyclerAdapter.loadAds(adUnitId, requestParameters) {
@MoPubStreamAdPlacer
mStreamAdPlacer.loadAds(adUnitId, requestParameters) {
mAdUnitId = adUnitId;
mPositioningSource.loadPositions()
mAdSource.setAdSourceListener() {...}
mAdSource.loadAds(mActivity, adUnitId, requestParameters) {
@NativeAdSource
loadAds(
requestParameters,
moPubNative=new MoPubNative(activity, adUnitId, mMoPubNativeNetworkListener)
) {
moPubNative.registerAdRenderer(renderer)
mRequestParameters = requestParameters;
mMoPubNative = moPubNative;
replenishCache() {
@MoPubNative
mMoPubNative.makeRequest(mRequestParameters, mSequenceNumber) {
loadNativeAd(requestParameters, sequenceNumber) {
requestNativeAd(endpointUrl, null) {
mAdLoader = new AdLoader(...)
mAdLoader.loadNextAd()
}
}
}
}
}
}
}
}