package com.heyzap.sdk; import com.heyzap.http.RequestParams; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; import android.webkit.WebView; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RelativeLayout; public class AdOverlay extends ClickableToast { private Context context; private WebView webview; private long shownAt; private String promotedGamePackage; private String strategy; private RelativeLayout closeWrapper; private RelativeLayout adWrapper; private boolean hasData = false; private String impressionId; private String clickUrl; private static final float MAX_SIZE_PERCENT = 0.98f; private static final int MAX_SIZE_DP_WIDTH = 360; private static final int MAX_SIZE_DP_HEIGHT = 360; public static enum AdState { NONE, LOADING, LOADED }; public AdOverlay(final Context context) { super(context.getApplicationContext()); this.context = context; this.setContentView(Rzap.layout("ad_layout")); this.setFocusable(true); this.setFocusableInTouchMode(true); this.context = context; Activity activity = (Activity) context; int width = (int) Math.round(activity.getWindowManager().getDefaultDisplay().getWidth() * MAX_SIZE_PERCENT); int height = (int) Math.round(activity.getWindowManager().getDefaultDisplay().getHeight() * MAX_SIZE_PERCENT); width = (int) Math.min(Utils.getScaledSize(context, MAX_SIZE_DP_WIDTH), width); height = (int) Math.min(Utils.getScaledSize(context, MAX_SIZE_DP_HEIGHT), height); width = (int) Math.min(width, height); height = (int) Math.min(width, height); adWrapper = (RelativeLayout) findViewById(Rzap.id("ad_wrapper")); webview = (WebView) findViewById(Rzap.id("web_view")); android.view.ViewGroup.LayoutParams layoutParams = adWrapper.getLayoutParams(); layoutParams.width = width; layoutParams.height = height; adWrapper.setLayoutParams(layoutParams); webview.setVerticalScrollBarEnabled(false); webview.setHorizontalScrollBarEnabled(false); webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); closeWrapper = (RelativeLayout) findViewById(Rzap.id("close_wrapper")); closeWrapper.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { AdOverlay.this.hide(); return true; } }); // Set up Heyzap Logo ImageView logo = (ImageView) findViewById(Rzap.id("heyzap_corner")); // if a newish Heyzap is installed, launch game details. // if an older Heyzap is installed, just launch Heyzap. // if Heyzap isn't installed, open it in the market. logo.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { AdOverlay.this.hide(); String gamePackage = promotedGamePackage == null ? "null" : promotedGamePackage; if (Utils.heyzapIsInstalled(context)) { Intent i = new Intent(Intent.ACTION_MAIN); i.setAction(Utils.HEYZAP_PACKAGE); i.putExtra("from_ad_for_game_package", gamePackage); // i.addCategory(Intent.CATEGORY_LAUNCHER); i.putExtra("packageName", context.getPackageName()); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (promotedGamePackage != null && Utils.heyzapVersion(context) >= Utils.GAME_DETAILS_PACKAGE_VERSION) { i.setComponent(new ComponentName(Utils.HEYZAP_PACKAGE, Utils.HEYZAP_PACKAGE + ".activity.GameDetails")); i.putExtra("game_package", promotedGamePackage); } else { i.setComponent(new ComponentName(Utils.HEYZAP_PACKAGE, Utils.HEYZAP_PACKAGE + ".activity.CheckinHub")); } context.startActivity(i); } else { Utils.installHeyzap(context, String.format("action=ad_heyzap_logo&game_package=%s", gamePackage)); } } }); webview.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if ((System.currentTimeMillis() - shownAt) > 500) { HeyzapLib.logAdClickAndGoToMarket(AdOverlay.this.context, promotedGamePackage, strategy, impressionId, clickUrl); } return true; } }); webview.setBackgroundColor(0x00000000); webview.loadDataWithBaseURL( null, "<style> .body { margin:0; padding:0; } #container { margin: 0; width: 100%; height: 100%; overflow: hidden; -webkit-border-radius: 20px; border-radius: 20px; background-color: #FFFFFF; } </style><body><div id='container'><center><img style='padding: 60px' src='http://www.heyzap.com/images/common/spinners/64.gif'/></center></div></body>", "text/html", "utf-8", null); } public void update(String strategy, String promotedGamePackage, String adHTML) { webview.loadDataWithBaseURL(null, adHTML, "text/html", "utf-8", null); webview.setVisibility(View.VISIBLE); this.hasData = true; this.strategy = strategy; this.promotedGamePackage = promotedGamePackage; } public void setClickUrl(String clickUrl){ this.clickUrl = clickUrl; } @Override public WindowManager.LayoutParams getWmParams() { WindowManager.LayoutParams params = super.getWmParams(); params.gravity = Gravity.CENTER; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.verticalMargin = 0.0f; params.horizontalMargin = 0.0f; params.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; params.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.flags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; params.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; return params; } public void setContext(Context context){ this.context = context; } @Override public void hide() { super.hide(); HeyzapLib.closeAd(context, false); } @Override public void show() { shownAt = System.currentTimeMillis(); if( !this.isShown() ) { super.show(); RequestParams params = new RequestParams(); params.put("impression_id", impressionId); params.put("promoted_android_package", this.promotedGamePackage); SDKRestClient.post(context, "http://ads.heyzap.com/in_game_api/ads/register_impression", params); } } private boolean isOutOfBounds(MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); final int slop = ViewConfiguration.get(getContext()).getScaledWindowTouchSlop(); final View decorView = this; return (x < -slop) || (y < -slop) || (x > (decorView.getWidth() + slop)) || (y > (decorView.getHeight() + slop)); } @Override public boolean onTouchEvent(MotionEvent event) { return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { this.hide(); return true; } else { return super.onKeyDown(keyCode, event); } } public void setImpressionId(String currentImpressionId) { this.impressionId = currentImpressionId; } }