package com.jdroid.android.google.admob.helpers; import android.app.Activity; import android.text.format.DateUtils; import android.view.View; import android.view.ViewGroup; import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.jdroid.android.application.AbstractApplication; import com.jdroid.android.context.AppContext; import com.jdroid.android.google.admob.AdMobAppModule; import com.jdroid.android.google.admob.HouseAdBuilder; import com.jdroid.android.location.LocationHelper; public abstract class BaseAdViewHelper implements AdHelper { public static final String TEST_AD_UNIT_ID = "ca-app-pub-3940256099942544/6300978111"; private BaseAdViewWrapper baseAdViewWrapper; private ViewGroup adViewContainer; private AdSize adSize; private String adUnitId; private HouseAdBuilder houseAdBuilder; private Boolean displayAds = false; public BaseAdViewHelper() { adUnitId = AdMobAppModule.get().getAdMobAppContext().getDefaultAdUnitId(); } @Override public void loadAd(Activity activity, final ViewGroup adViewContainer) { if (adViewContainer != null) { if ((getAdSize() != null) && AdMobAppModule.get().getAdMobAppContext().areAdsEnabled()) { if (adUnitId != null) { baseAdViewWrapper = createBaseAdViewWrapper(activity); if (!AbstractApplication.get().getAppContext().isProductionEnvironment() && AdMobAppModule.get().getAdMobAppContext().isTestAdUnitIdEnabled()) { baseAdViewWrapper.setAdUnitId(BaseAdViewHelper.TEST_AD_UNIT_ID); } else { baseAdViewWrapper.setAdUnitId(adUnitId); } baseAdViewWrapper.setAdSize(getAdSize()); final View customView = getHouseAdBuilder() != null ? getHouseAdBuilder().build(activity) : null; if (customView != null) { adViewContainer.setVisibility(View.VISIBLE); adViewContainer.addView(customView); baseAdViewWrapper.setAdListener(new AdListener() { @Override public void onAdLoaded() { if (displayAds) { baseAdViewWrapper.getBaseAdView().setVisibility(View.VISIBLE); customView.setVisibility(View.GONE); } else { baseAdViewWrapper.getBaseAdView().postDelayed(new Runnable() { @Override public void run() { displayAds = true; if ((baseAdViewWrapper != null) && (customView != null)) { baseAdViewWrapper.getBaseAdView().setVisibility(View.VISIBLE); customView.setVisibility(View.GONE); } } }, DateUtils.SECOND_IN_MILLIS * 10); } } @Override public void onAdClosed() { baseAdViewWrapper.getBaseAdView().setVisibility(View.GONE); customView.setVisibility(View.VISIBLE); } @Override public void onAdFailedToLoad(int errorCode) { baseAdViewWrapper.getBaseAdView().setVisibility(View.GONE); customView.setVisibility(View.VISIBLE); } }); } else { baseAdViewWrapper.setAdListener(new AdListener() { @Override public void onAdLoaded() { adViewContainer.setVisibility(View.VISIBLE); baseAdViewWrapper.getBaseAdView().setVisibility(View.VISIBLE); } @Override public void onAdClosed() { adViewContainer.setVisibility(View.GONE); baseAdViewWrapper.getBaseAdView().setVisibility(View.GONE); } @Override public void onAdFailedToLoad(int errorCode) { adViewContainer.setVisibility(View.GONE); baseAdViewWrapper.getBaseAdView().setVisibility(View.GONE); } }); } AppContext applicationContext = AbstractApplication.get().getAppContext(); AdRequest.Builder builder = createBuilder(applicationContext); try { baseAdViewWrapper.loadAd(builder.build()); adViewContainer.addView(baseAdViewWrapper.getBaseAdView()); } catch (Exception e) { AbstractApplication.get().getExceptionHandler().logWarningException("Error when loading ad", e); } } else { AbstractApplication.get().getExceptionHandler().logWarningException("Missing ad unit ID on activity " + activity.getClass().getSimpleName()); } } else { adViewContainer.setVisibility(View.GONE); } } } protected abstract BaseAdViewWrapper createBaseAdViewWrapper(Activity activity); protected AdRequest.Builder createBuilder(AppContext applicationContext) { final AdRequest.Builder builder = new AdRequest.Builder(); if (!applicationContext.isProductionEnvironment()) { builder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR); for (String deviceId : AdMobAppModule.get().getAdMobAppContext().getTestDevicesIds()) { builder.addTestDevice(deviceId); } } builder.setLocation(LocationHelper.get().getLocation()); return builder; } public AdHelper setAdSize(AdSize adSize) { this.adSize = adSize; return this; } public AdSize getAdSize() { return adSize; } public AdHelper setHouseAdBuilder(HouseAdBuilder houseAdBuilder) { this.houseAdBuilder = houseAdBuilder; return this; } public HouseAdBuilder getHouseAdBuilder() { return houseAdBuilder; } @Override public AdHelper setAdUnitId(String adUnitId) { this.adUnitId = adUnitId; return this; } public void onBeforePause() { if (baseAdViewWrapper != null) { baseAdViewWrapper.pause(); } } public void onResume() { if (baseAdViewWrapper != null) { if (AdMobAppModule.get().getAdMobAppContext().areAdsEnabled()) { baseAdViewWrapper.resume(); } else if (adViewContainer != null) { adViewContainer.removeView(baseAdViewWrapper.getBaseAdView()); adViewContainer.setVisibility(View.GONE); baseAdViewWrapper = null; adViewContainer = null; } } } public void onBeforeDestroy() { if (baseAdViewWrapper != null) { baseAdViewWrapper.destroy(); baseAdViewWrapper = null; adViewContainer = null; } } }