package com.mopub.mobileads; import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.Map; import com.mopub.mobileads.CustomEventInterstitial; import com.mopub.mobileads.CustomEventInterstitial.CustomEventInterstitialListener; import android.content.Context; import android.util.Log; public class CustomEventInterstitialAdapter extends BaseInterstitialAdapter implements CustomEventInterstitialListener { private CustomEventInterstitial mCustomEventInterstitial; private Context mContext; private Map<String, Object> mLocalExtras = new HashMap<String, Object>(); private Map<String, String> mServerExtras = new HashMap<String, String>(); @Override public void init(MoPubInterstitial moPubInterstitial, String className) { init(moPubInterstitial, className, null); } public void init(MoPubInterstitial moPubInterstitial, String className, String jsonParams) { super.init(moPubInterstitial, jsonParams); mContext = moPubInterstitial.getActivity(); Log.d("MoPub", "Attempting to invoke custom event: " + className); try { // Instantiate the provided custom event class, if possible Class<? extends CustomEventInterstitial> interstitialClass = Class.forName(className) .asSubclass(CustomEventInterstitial.class); Constructor<?> interstitialConstructor = interstitialClass.getConstructor((Class[]) null); mCustomEventInterstitial = (CustomEventInterstitial) interstitialConstructor.newInstance(); } catch (Exception exception) { Log.d("MoPub", "Couldn't locate or instantiate custom event: " + className + "."); if (mAdapterListener != null) mAdapterListener.onNativeInterstitialFailed(this, MoPubErrorCode.ADAPTER_NOT_FOUND); } // Attempt to load the JSON extras into mServerExtras. try { mServerExtras = Utils.jsonStringToMap(jsonParams); } catch (Exception exception) { Log.d("MoPub", "Failed to create Map from JSON: " + jsonParams); } mLocalExtras = mInterstitial.getLocalExtras(); } @Override public void loadInterstitial() { if (isInvalidated() || mCustomEventInterstitial == null) return; mCustomEventInterstitial.loadInterstitial(mContext, this, mLocalExtras, mServerExtras); } @Override public void showInterstitial() { if (isInvalidated() || mCustomEventInterstitial == null) return; mCustomEventInterstitial.showInterstitial(); } @Override public void invalidate() { if (mCustomEventInterstitial != null) mCustomEventInterstitial.onInvalidate(); mCustomEventInterstitial = null; mContext = null; mServerExtras = null; mLocalExtras = null; super.invalidate(); } /* * CustomEventInterstitial.Listener implementation */ @Override public void onInterstitialLoaded() { if (isInvalidated()) return; if (mAdapterListener != null) mAdapterListener.onNativeInterstitialLoaded(this); } @Override public void onInterstitialFailed(MoPubErrorCode errorCode) { if (isInvalidated()) return; if (mAdapterListener != null) { if (errorCode == null) { errorCode = MoPubErrorCode.UNSPECIFIED; } mAdapterListener.onNativeInterstitialFailed(this, errorCode); } } @Override public void onInterstitialShown() { if (isInvalidated()) return; if (mAdapterListener != null) mAdapterListener.onNativeInterstitialShown(this); } @Override public void onInterstitialClicked() { if (isInvalidated()) return; if (mAdapterListener != null) mAdapterListener.onNativeInterstitialClicked(this); } @Override public void onLeaveApplication() { onInterstitialClicked(); } @Override public void onInterstitialDismissed() { if (isInvalidated()) return; if (mAdapterListener != null) mAdapterListener.onNativeInterstitialDismissed(this); } }