/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.platform; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import com.happydroids.android.R; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.Window.FEATURE_NO_TITLE; import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; import static android.webkit.WebSettings.RenderPriority.HIGH; public class TowerWebBrowser extends Dialog { static final FrameLayout.LayoutParams FILL = new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); private WebView webView; private Activity activity; private ProgressDialog progressDialog; private FrameLayout container; private final String uriToLoad; private final Handler mainHandler; private final Runnable timeoutRunnable; public TowerWebBrowser(Context context, String uriToLoad) { super(context, android.R.style.Theme_Translucent_NoTitleBar); this.uriToLoad = uriToLoad; activity = (Activity) context; getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN); mainHandler = new Handler(activity.getMainLooper()); timeoutRunnable = new Runnable() { @Override public void run() { new AlertDialog.Builder(activity) .setTitle("Timeout!") .setPositiveButton("Okay", new OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { progressDialog.dismiss(); } }); } }; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); progressDialog = new ProgressDialog(getContext()); progressDialog.requestWindowFeature(FEATURE_NO_TITLE); progressDialog.getWindow().setLayout(MATCH_PARENT, MATCH_PARENT); progressDialog.setIndeterminate(true); progressDialog.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialogInterface) { webView.stopLoading(); } }); progressDialog.setMessage("Loading..."); requestWindowFeature(FEATURE_NO_TITLE); buildWebView(); container = new FrameLayout(getContext()); ImageView closeImage = new ImageView(getContext()); closeImage.setImageResource(R.drawable.close); closeImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { TowerWebBrowser.this.dismiss(); } }); int closeButtonWidth = closeImage.getDrawable().getIntrinsicWidth(); int webViewPadding = closeButtonWidth / 2; LinearLayout webViewContainer = new LinearLayout(getContext()); webViewContainer.addView(webView); webViewContainer.setPadding(webViewPadding, webViewPadding, webViewPadding, webViewPadding); container.addView(webViewContainer); container.addView(closeImage, new ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)); addContentView(container, FILL); setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { webView.loadUrl("about:blank"); } }); } private void buildWebView() { webView = new WebView(getContext()); webView.setLayoutParams(FILL); webView.setHorizontalScrollBarEnabled(false); webView.setVerticalScrollBarEnabled(false); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setSavePassword(false); webView.getSettings().setSaveFormData(false); webView.getSettings().setRenderPriority(HIGH); webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { activity.setProgress(newProgress); } }); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains("youtube.com")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); activity.startActivity(intent); dismiss(); return true; } return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { progressDialog.show(); progressDialog.getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN); mainHandler.postDelayed(timeoutRunnable, 1500); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); progressDialog.dismiss(); mainHandler.removeCallbacks(timeoutRunnable); setTitle(view.getTitle()); container.setBackgroundColor(Color.TRANSPARENT); } }); webView.addJavascriptInterface(new HappyDroidJavascriptInterface(getContext(), this), "happyDroid"); if (uriToLoad != null) { webView.loadUrl(uriToLoad); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the Back button and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } // If it wasn't the Back key or there's no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event); } }