package com.mopub.mobileads; import android.support.annotation.Nullable; import android.text.TextUtils; import com.mopub.common.VisibleForTesting; import com.mopub.common.logging.MoPubLog; import com.mopub.network.AdResponse; import java.lang.ref.WeakReference; import java.util.*; abstract class AdLoader { WeakReference<AdViewController> mWeakAdViewController; AdLoader(AdViewController adViewController) { mWeakAdViewController = new WeakReference<AdViewController>(adViewController); } abstract void load(); @Nullable static AdLoader fromAdResponse(AdResponse response, AdViewController adViewController) { MoPubLog.i("Performing custom event."); // If applicable, try to invoke the new custom event system (which uses custom classes) String adTypeCustomEventName = response.getCustomEventClassName(); if (adTypeCustomEventName != null) { Map<String, String> customEventData = response.getServerExtras(); return new CustomEventAdLoader(adViewController, adTypeCustomEventName, customEventData); } MoPubLog.i("Failed to create custom event."); return null; } static class CustomEventAdLoader extends AdLoader { private String mCustomEventClassName; private Map<String,String> mServerExtras; public CustomEventAdLoader(AdViewController adViewController, String customEventCLassName, Map<String, String> serverExtras) { super(adViewController); mCustomEventClassName = customEventCLassName; mServerExtras = serverExtras; } @Override void load() { AdViewController adViewController = mWeakAdViewController.get(); if (adViewController == null || adViewController.isDestroyed() || TextUtils.isEmpty(mCustomEventClassName)) { return; } adViewController.setNotLoading(); adViewController.getMoPubView().loadCustomEvent(mCustomEventClassName, mServerExtras); } @VisibleForTesting Map<String, String> getServerExtras() { return mServerExtras; } } }