package org.commcare.google.services.ads; import android.content.Context; import android.view.View; import android.widget.FrameLayout; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.MobileAds; import org.commcare.CommCareApplication; import org.commcare.dalvik.BuildConfig; import java.util.HashMap; import java.util.Map; /** * Controls all actions related to showing ads in consumer apps via AdMob * * @author Aliza Stone */ public class AdMobManager { private static final String TEST_BANNER_AD_UNIT_ID = "ca-app-pub-3940256099942544/6300978111"; public static void requestBannerAdForView(Context context, FrameLayout adContainer, AdLocation adLocation) { if (hasValidAdmobId()) { // TODO: It's probably bad not to validate this in any way, but any mechanism for doing // so would defeat the purpose of having made this configurable from the consumer apps resources AdView adView = buildBannerAdView(context, adLocation); adContainer.setVisibility(View.VISIBLE); adContainer.addView(adView); AdRequest adRequest = buildAdRequest(); adView.loadAd(adRequest); } else { adContainer.setVisibility(View.GONE); } } private static AdView buildBannerAdView(Context context, AdLocation adLocation) { AdView adView = new AdView(context); adView.setAdSize(AdSize.BANNER); adView.setAdUnitId(getBannerAdUnitIdForCurrentConsumerApp(adLocation)); return adView; } public static String getBannerAdUnitIdForCurrentConsumerApp(AdLocation adLocation) { if (BuildConfig.DEBUG) { return TEST_BANNER_AD_UNIT_ID; } else { switch(adLocation) { case EntityDetail: return BuildConfig.ENTITY_DETAIL_AD_UNIT_ID; case EntitySelect: return BuildConfig.ENTITY_SELECT_AD_UNIT_ID; case MenuGrid: return BuildConfig.MENU_GRID_AD_UNIT_ID; case MenuList: return BuildConfig.MENU_LIST_AD_UNIT_ID; default: return ""; } } } private static AdRequest buildAdRequest() { if (BuildConfig.DEBUG) { return buildTestAdRequest(); } else { return new AdRequest.Builder().build(); } } private static AdRequest buildTestAdRequest() { return new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .addTestDevice(CommCareApplication.instance().getPhoneId()) .build(); } public static void initAdsForCurrentConsumerApp(Context context) { if (hasValidAdmobId()) { MobileAds.initialize(context, BuildConfig.ADMOB_ID); } } private static boolean hasValidAdmobId() { return CommCareApplication.instance().isConsumerApp() && !"".equals(BuildConfig.ADMOB_ID); } }