package com.mopub.mobileads; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.webkit.CookieSyncManager; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageButton; import android.widget.Toast; import com.mopub.mobileads.R; public class MraidBrowser extends Activity { public static final String URL_EXTRA = "extra_url"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_PROGRESS); getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); setContentView(R.layout.mraid_browser); Intent intent = getIntent(); initializeWebView(intent); initializeButtons(intent); enableCookies(); } private void initializeWebView(Intent intent) { WebView webView = (WebView) findViewById(R.id.webView); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); /* Pinch to zoom is apparently not enabled by default on all devices, so * declare zoom support explicitly. * http://stackoverflow.com/questions/5125851/enable-disable-zoom-in-android-webview */ webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); webSettings.setUseWideViewPort(true); webView.loadUrl(intent.getStringExtra(URL_EXTRA)); webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Activity a = (Activity) view.getContext(); Toast.makeText(a, "MRAID error: " + description, Toast.LENGTH_SHORT).show(); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url == null) return false; Uri uri = Uri.parse(url); String host = uri.getHost(); if ((url.startsWith("http:") || url.startsWith("https:")) && !"play.google.com".equals(host) && !"market.android.com".equals(host)) { return false; } try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); } catch (ActivityNotFoundException exception) { Log.w("MoPub", "Unable to start activity for " + url + ". " + "Ensure that your phone can handle this intent."); } finish(); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); ImageButton forwardButton = (ImageButton) findViewById(R.id.browserForwardButton); forwardButton.setImageResource(R.drawable.unrightarrow); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); ImageButton backButton = (ImageButton) findViewById(R.id.browserBackButton); int backImageResource = (view.canGoBack()) ? R.drawable.leftarrow : R.drawable.unleftarrow; backButton.setImageResource(backImageResource); ImageButton forwardButton = (ImageButton) findViewById(R.id.browserForwardButton); int fwdImageResource = (view.canGoForward()) ? R.drawable.rightarrow : R.drawable.unrightarrow; forwardButton.setImageResource(fwdImageResource); } }); webView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { Activity a = (Activity) view.getContext(); a.setTitle("Loading..."); a.setProgress(progress * 100); if (progress == 100) a.setTitle(view.getUrl()); } }); } private void initializeButtons(Intent intent) { ImageButton backButton = (ImageButton) findViewById(R.id.browserBackButton); backButton.setBackgroundColor(Color.TRANSPARENT); backButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { WebView webView = (WebView) findViewById(R.id.webView); if (webView.canGoBack()) webView.goBack(); } }); ImageButton forwardButton = (ImageButton) findViewById(R.id.browserForwardButton); forwardButton.setBackgroundColor(Color.TRANSPARENT); forwardButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { WebView webView = (WebView) findViewById(R.id.webView); if (webView.canGoForward()) webView.goForward(); } }); ImageButton refreshButton = (ImageButton) findViewById(R.id.browserRefreshButton); refreshButton.setBackgroundColor(Color.TRANSPARENT); refreshButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { WebView webView = (WebView) findViewById(R.id.webView); webView.reload(); } }); ImageButton closeButton = (ImageButton) findViewById(R.id.browserCloseButton); closeButton.setBackgroundColor(Color.TRANSPARENT); closeButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { MraidBrowser.this.finish(); } }); } private void enableCookies() { CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); } @Override protected void onPause() { super.onPause(); CookieSyncManager.getInstance().stopSync(); } @Override protected void onResume() { super.onResume(); CookieSyncManager.getInstance().startSync(); } }