com.cranberrygame.cordova.plugin.ad.admob.AdmobSplit.java Source code

Java tutorial

Introduction

Here is the source code for com.cranberrygame.cordova.plugin.ad.admob.AdmobSplit.java

Source

//Copyright (c) 2014 Sang Ki Kwon (Cranberrygame)
//Email: cranberrygame@yahoo.com
//Homepage: http://cranberrygame.github.io
//License: MIT (http://opensource.org/licenses/MIT)
package com.cranberrygame.cordova.plugin.ad.admob;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaWebView;
import android.app.Activity;
import android.util.Log;
//
import android.os.Build;
import android.os.Handler;
import android.util.Log;
import android.view.View;
//
import android.view.ViewGroup;
import android.widget.RelativeLayout;
//
import android.annotation.TargetApi;
//
import java.lang.reflect.Method;

//
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import com.google.android.gms.ads.AdView;

public class AdmobSplit extends AdmobOverlap {
    protected static final String LOG_TAG = "AdmobSplit";

    public AdmobSplit(Plugin plugin_) {
        super(plugin_);
    }

    //@SuppressLint("NewApi")
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    protected void handleLayoutChangeOverlap() {
        //http://stackoverflow.com/questions/24539578/cordova-plugin-listening-to-device-orientation-change-is-it-possible
        //http://developer.android.com/reference/android/view/View.OnLayoutChangeListener.html
        //https://gitshell.com/lvxudong/A530_packages_app_Camera/blob/master/src/com/android/camera/ActivityBase.java
        //plugin.getWebView().addOnLayoutChangeListener(new View.OnLayoutChangeListener(){//only for ~cordova4
        //plugin.getWebView().getRootView().addOnLayoutChangeListener(new View.OnLayoutChangeListener(){//only for ~cordova4
        //plugin.getWebView().getView().addOnLayoutChangeListener(new View.OnLayoutChangeListener(){//only for cordova5~
        getView(plugin.getWebView()).addOnLayoutChangeListener(new View.OnLayoutChangeListener() {

            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop,
                    int oldRight, int oldBottom) {
                if (left == oldLeft && top == oldTop && right == oldRight && bottom == oldBottom) {
                    return;
                }

                Log.d(LOG_TAG, "onLayoutChange");
                //Util.alert(cordova.getActivity(), "onLayoutChange");

                int orientation = Util.getDisplayRotation(plugin.getCordova().getActivity());
                if (orientation != lastOrientation) {
                    Log.d(LOG_TAG, String.format("orientation: %d", orientation));
                    //Util.alert(cordova.getActivity(), String.format("orientation: %d", orientation));
                    if (bannerPreviousSize != null && bannerPreviousSize.equals("SMART_BANNER")) {
                        Log.d(LOG_TAG, String.format("position: %s, size: %s", bannerPreviousPosition,
                                bannerPreviousSize));
                        //Util.alert(cordova.getActivity(), String.format("position: %s, size: %s", position, size));

                        //split
                        if (bannerView != null) {
                            //if banner is showing
                            ViewGroup parentView = (ViewGroup) bannerView.getParent();
                            if (parentView != null) {
                                //parentView.removeView(bannerView);
                                //bannerView.destroy();
                                //bannerView = null;
                                Log.d(LOG_TAG, String.format("position: %s, size: %s", bannerPreviousPosition,
                                        bannerPreviousSize));
                                //Util.alert(cordova.getActivity(), String.format("position: %s, size: %s", position, size));

                                //http://stackoverflow.com/questions/3072173/how-to-call-a-method-after-a-delay-in-android
                                final Handler handler = new Handler();
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        _showBannerAd(bannerPreviousPosition, bannerPreviousSize);
                                    }
                                }, 1);//after 1ms            
                            }
                        }
                    }
                }

                lastOrientation = orientation;
            }
        });
    }

    public static View getView(CordovaWebView webView) {
        if (View.class.isAssignableFrom(CordovaWebView.class)) {
            return (View) webView;
        }

        try {
            Method getViewMethod = CordovaWebView.class.getMethod("getView", (Class<?>[]) null);
            if (getViewMethod != null) {
                Object[] args = {};
                return (View) getViewMethod.invoke(webView, args);
            }
        } catch (Exception e) {
        }

        return null;
    }

    protected boolean bannerIsShowingOverlap() {
        boolean bannerIsShowing = false;
        if (bannerView != null) {
            //if banner is showing
            ViewGroup parentView = (ViewGroup) bannerView.getParent();
            if (parentView != null) {
                bannerIsShowing = true;
            }
        }

        return bannerIsShowing;
    }

    protected void addBannerViewOverlap(String position, String size) {
        ///*
        if (plugin.getWebView() != null) {
            //ViewGroup parentView = (ViewGroup)plugin.getWebView().getParent();//only for ~cordova4
            //ViewGroup parentView = (ViewGroup)plugin.getWebView().getRootView();//only for ~cordova4
            //ViewGroup parentView = (ViewGroup)plugin.getWebView().getView();//only for cordova5
            ViewGroup parentView = (ViewGroup) getView(plugin.getWebView());
            if (parentView != null) {
                if (position.equals("top-left") || position.equals("top-center") || position.equals("top-right")
                        || position.equals("left") || position.equals("center") || position.equals("right")) {
                    parentView.addView(bannerView, 0);
                } else {
                    parentView.addView(bannerView);
                }
                //parentView.bringToFront();
            }
        }

        Log.d("AdmobPlugin", "position: " + position);
        //*/
        /*   
                FrameLayout v = new FrameLayout(plugin.getCordova().getActivity());
                //http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html#FrameLayout.LayoutParams(int, int)
                //http://rerethink.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-LayoutParams-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-Gravity-%EC%A3%BC%EA%B8%B0
                //http://rerethink.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%ED%85%8C%EC%9D%B4%EB%B8%94%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-%EC%BD%94%EB%93%9C%EC%83%81-%EC%84%A4%EC%A0%95
                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
              bannerView.setLayoutParams(params);
              v.addView(bannerView);
                //v.addView(bannerView, params);
                    
              if (plugin.getWebView() != null) {
                 //ViewGroup parentView = (ViewGroup)plugin.getWebView().getParent();//only for ~cordova4
                 //ViewGroup parentView = (ViewGroup)plugin.getWebView().getRootView();//only for ~cordova4
                 //ViewGroup parentView = (ViewGroup)plugin.getWebView().getView();//only for cordova5
        //         ViewGroup parentView = (ViewGroup)getView(plugin.getWebView());
                 ViewGroup parentView = (ViewGroup)getView(plugin.getWebView()).getParent();
                 if (parentView != null) {
        if (position.equals("top-left") || position.equals("top-center")|| position.equals("top-right") || position.equals("left") || position.equals("center") || position.equals("right")) {   
           //parentView.addView(bannerView, 0);
           parentView.addView(v, 0);
        }
        else {      
           //parentView.addView(bannerView);
           parentView.addView(v);
        }
        //parentView.bringToFront();
                 }
              }
                  
              Log.d("AdmobPlugin", "position: " + position);
        */
    }

    protected void removeBannerViewOverlap() {
        if (bannerView == null)
            return;

        ViewGroup parentView = (ViewGroup) bannerView.getParent();
        if (parentView != null) {
            parentView.removeView(bannerView);
            bannerView.destroy();
            bannerView = null;
        }
    }
}