/* * Licensed under the MIT license * https://tapfortap.com/LICENSE.txt * Copyright (c) 2013 Tap for Tap */ package com.tapfortap.ane.functions; import android.app.Activity; import android.util.DisplayMetrics; import android.view.Gravity; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; import com.adobe.fre.FREInvalidObjectException; import com.adobe.fre.FREObject; import com.adobe.fre.FRETypeMismatchException; import com.adobe.fre.FREWrongThreadException; import com.tapfortap.Banner; import com.tapfortap.Banner.BannerListener; import com.tapfortap.ane.TapForTapExtensionContext; import android.util.Log; public class CreateAdViewFunction implements FREFunction { @Override public FREObject call(FREContext freContext, FREObject[] freObjects) { Activity activity = freContext.getActivity(); TapForTapExtensionContext extContext = (TapForTapExtensionContext)freContext; if(extContext.layout != null) { extContext.layout.removeAllViews(); } else { extContext.layout = new FrameLayout(activity); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); activity.addContentView(extContext.layout, layoutParams); } int horizontalAlignemnt = 0; int verticalAlignment = 0; int xOffset = 0; int yOffset = 0; double scale = 1; int gravity = 0; // Setup the adView DisplayMetrics metrics = activity.getResources().getDisplayMetrics(); int width = 320; int height = 50; if (extContext.autoScale) { width = (int)(320 * metrics.density); height = (int) (50 * metrics.density); } // Support for when a boolean determined if it was top or bottom Boolean atTop = displayAtTop(freObjects); if(atTop != null) { if(atTop) { gravity |= Gravity.TOP; } else { gravity |= Gravity.BOTTOM; } gravity |= Gravity.CENTER_HORIZONTAL; } else { // New API with position, offset and scale horizontalAlignemnt = getHorizontalAlignment(freObjects); verticalAlignment = getVerticalAlignment(freObjects); xOffset = getXOffset(freObjects); yOffset = getYOffset(freObjects); scale = getScale(freObjects); width *= scale; height *= scale; switch(horizontalAlignemnt) { case 1: gravity |= Gravity.LEFT; break; case 2: gravity |= Gravity.CENTER_HORIZONTAL; break; case 3: gravity |= Gravity.RIGHT; break; default: gravity |= Gravity.CENTER_HORIZONTAL; break; } switch(verticalAlignment) { case 1: gravity |= Gravity.TOP; break; case 2: gravity |= Gravity.CENTER_VERTICAL; break; case 3: gravity |= Gravity.BOTTOM; break; default: gravity |= Gravity.BOTTOM; break; } } Log.e("AIR TEST","Creating an ad."); FrameLayout.LayoutParams viewLayoutParams = new FrameLayout.LayoutParams(width, height, gravity); int leftMargin = extContext.autoScale ? (int)(xOffset * metrics.density) : xOffset; int topMargin = extContext.autoScale ? (int)(yOffset * metrics.density) : yOffset; viewLayoutParams.setMargins(leftMargin, topMargin, 0, 0); Banner banner = Banner.create(activity, new BannerListenerImplementation(freContext)); banner.setLayoutParams(viewLayoutParams); extContext.layout.addView(banner); extContext.banner = banner; try { return FREObject.newObject(true); } catch (FREWrongThreadException e) { return null; } } private class BannerListenerImplementation implements com.tapfortap.Banner.BannerListener { private FREContext freContext; BannerListenerImplementation(FREContext freContext) { this.freContext = freContext; } @Override public void bannerOnReceive(Banner banner) { freContext.dispatchStatusEventAsync("AdViewOnReceiveAd", ""); } @Override public void bannerOnFail(Banner banner, String reason, Throwable throwable) { freContext.dispatchStatusEventAsync("AdViewOnFailToReceiveAd", reason); } @Override public void bannerOnTap(Banner banner) { freContext.dispatchStatusEventAsync("AdViewOnTapAd", ""); } } private Boolean displayAtTop(FREObject[] freObjects) { try { return freObjects[0].getAsBool(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (FRETypeMismatchException e) { return null; } catch (FREInvalidObjectException e) { e.printStackTrace(); } catch (FREWrongThreadException e) { e.printStackTrace(); } return null; } private int getVerticalAlignment(FREObject[] freObjects) { try { return freObjects[0].getAsInt(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (FRETypeMismatchException e) { e.printStackTrace(); } catch (FREInvalidObjectException e) { e.printStackTrace(); } catch (FREWrongThreadException e) { e.printStackTrace(); } return 0; } private int getHorizontalAlignment(FREObject[] freObjects) { try { return freObjects[1].getAsInt(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (FRETypeMismatchException e) { e.printStackTrace(); } catch (FREInvalidObjectException e) { e.printStackTrace(); } catch (FREWrongThreadException e) { e.printStackTrace(); } return 0; } private int getXOffset(FREObject[] freObjects) { try { return freObjects[2].getAsInt(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (FRETypeMismatchException e) { e.printStackTrace(); } catch (FREInvalidObjectException e) { e.printStackTrace(); } catch (FREWrongThreadException e) { e.printStackTrace(); } return 0; } private int getYOffset(FREObject[] freObjects) { try { return freObjects[3].getAsInt(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (FRETypeMismatchException e) { e.printStackTrace(); } catch (FREInvalidObjectException e) { e.printStackTrace(); } catch (FREWrongThreadException e) { e.printStackTrace(); } return 0; } private double getScale(FREObject[] freObjects) { try { return freObjects[4].getAsDouble(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (FRETypeMismatchException e) { e.printStackTrace(); } catch (FREInvalidObjectException e) { e.printStackTrace(); } catch (FREWrongThreadException e) { e.printStackTrace(); } return 1; } }