package com.mopub.mobileads; import java.lang.reflect.Constructor; import java.util.HashMap; import android.util.Log; public abstract class BaseInterstitialAdapter { protected boolean mInvalidated; protected MoPubInterstitial mInterstitial; protected String mJsonParams; protected BaseInterstitialAdapterListener mAdapterListener; public interface BaseInterstitialAdapterListener { public void onNativeInterstitialLoaded(BaseInterstitialAdapter adapter); public void onNativeInterstitialFailed(BaseInterstitialAdapter adapter, MoPubErrorCode errorCode); public void onNativeInterstitialShown(BaseInterstitialAdapter adapter); public void onNativeInterstitialClicked(BaseInterstitialAdapter adapter); public void onNativeInterstitialDismissed(BaseInterstitialAdapter adapter); public void onNativeInterstitialExpired(BaseInterstitialAdapter adapter); } private static final HashMap<String, String> sInterstitialAdapterMap; static { sInterstitialAdapterMap = new HashMap<String, String>(); sInterstitialAdapterMap.put("mraid", "com.mopub.mobileads.MraidInterstitialAdapter"); sInterstitialAdapterMap.put("admob_full", "com.mopub.mobileads.GoogleAdMobInterstitialAdapter"); sInterstitialAdapterMap.put("millennial_full", "com.mopub.mobileads.MillennialInterstitialAdapter"); sInterstitialAdapterMap.put("custom_event", "com.mopub.mobileads.CustomEventInterstitialAdapter"); } public abstract void loadInterstitial(); public abstract void showInterstitial(); public void init(MoPubInterstitial interstitial, String jsonParams) { mInterstitial = interstitial; mJsonParams = jsonParams; mInvalidated = false; } public void invalidate() { mInterstitial = null; mAdapterListener = null; mInvalidated = true; } public boolean isInvalidated() { return mInvalidated; } public void setAdapterListener(BaseInterstitialAdapterListener listener) { mAdapterListener = listener; } public static BaseInterstitialAdapter getAdapterForType(String type) { if (type == null) return null; Class<?> adapterClass = classForAdapterType(type); if (adapterClass == null) return null; try { Constructor<?> constructor = adapterClass.getConstructor(); BaseInterstitialAdapter nativeAdapter = (BaseInterstitialAdapter) constructor.newInstance(); return nativeAdapter; } catch (Exception e) { Log.d("MoPub", "Couldn't create native interstitial adapter for type: " + type); return null; } } private static String classStringForAdapterType(String type) { return sInterstitialAdapterMap.get(type); } private static Class<?> classForAdapterType(String type) { String className = classStringForAdapterType(type); if (className == null) { Log.d("MoPub", "Couldn't find a handler for this ad type: " + type + "." + " MoPub for Android does not support it at this time."); return null; } try { return (Class<?>) Class.forName(className); } catch (ClassNotFoundException e) { Log.d("MoPub", "Couldn't find " + className + "class." + " Make sure the project includes the adapter library for " + className + " from the extras folder"); return null; } } }