/* * Copyright (c) 2010, MoPub Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'MoPub Inc.' nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.mopub.mobileads; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import android.location.Location; import android.util.Log; import android.view.Gravity; import android.widget.FrameLayout; import com.google.ads.Ad; import com.google.ads.AdListener; import com.google.ads.AdRequest; import com.google.ads.AdRequest.ErrorCode; import com.google.ads.AdSize; /* * Compatible with version 6.1.0 of the Google AdMob Ads SDK. */ public class GoogleAdMobAdapter extends BaseAdapter implements AdListener { private com.google.ads.AdView mAdMobView; @Override public void loadAd() { if (isInvalidated()) return; // Get the parameters to pass to AdMob JSONObject object; String adUnitId; AdSize adType = AdSize.BANNER; int adWidth, adHeight; try { object = (JSONObject) new JSONTokener(mJsonParams).nextValue(); adUnitId = object.getString("adUnitID"); adWidth = object.getInt("adWidth"); adHeight = object.getInt("adHeight"); } catch (JSONException e) { mMoPubView.loadFailUrl(MoPubErrorCode.ADAPTER_CONFIGURATION_ERROR); return; } // Use the smallest AdMob AdSize that will properly contain the adView if (adWidth <= AdSize.BANNER.getWidth() && adHeight <= AdSize.BANNER.getHeight()) adType = AdSize.BANNER; else if (adWidth <= AdSize.IAB_MRECT.getWidth() && adHeight <= AdSize.IAB_MRECT.getHeight()) adType = AdSize.IAB_MRECT; else if (adWidth <= AdSize.IAB_BANNER.getWidth() && adHeight <= AdSize.IAB_BANNER.getHeight()) adType = AdSize.IAB_BANNER; else if (adWidth <= AdSize.IAB_LEADERBOARD.getWidth() && adHeight <= AdSize.IAB_LEADERBOARD.getHeight()) adType = AdSize.IAB_LEADERBOARD; else { Log.e("MoPub", "Failed to retrieve ad from AdMob native. Unsupported ad size: " + adWidth + "x" + adHeight); mMoPubView.loadFailUrl(MoPubErrorCode.ADAPTER_CONFIGURATION_ERROR); return; } mAdMobView = new com.google.ads.AdView(mMoPubView.getActivity(), adType, adUnitId); mAdMobView.setAdListener(this); AdRequest request = new AdRequest(); // request.addTestDevice(AdRequest.TEST_EMULATOR); // Uncomment the line above to enable test ads on the emulator. Location location = mMoPubView.getLocation(); if (location != null) request.setLocation(location); mAdMobView.loadAd(request); } @Override public void invalidate() { if (mAdMobView != null) { mMoPubView.removeView(mAdMobView); mAdMobView.destroy(); } super.invalidate(); } //////////////////////////////////////////////////////////////////////////////////////////////// @Override public void onDismissScreen(Ad ad) { } @Override public void onFailedToReceiveAd(Ad ad, ErrorCode error) { if (isInvalidated()) return; Log.d("MoPub", "Google AdMob failed. Trying another"); mMoPubView.loadFailUrl(MoPubErrorCode.NETWORK_NO_FILL); } @Override public void onLeaveApplication(Ad ad) { } @Override public void onPresentScreen(Ad ad) { if (isInvalidated()) return; Log.d("MoPub", "Google AdMob clicked"); mMoPubView.registerClick(); } @Override public void onReceiveAd(Ad ad) { if (isInvalidated()) return; Log.d("MoPub", "Google AdMob load succeeded. Showing ad..."); mMoPubView.removeAllViews(); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT); layoutParams.gravity = Gravity.CENTER; mMoPubView.addView(mAdMobView, layoutParams); mMoPubView.nativeAdLoaded(); mMoPubView.trackNativeImpression(); } }