package com.roboo.like.google;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.StateListDrawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import com.roboo.like.google.view.bounce.BounceListener;
import com.roboo.like.google.view.bounce.BounceScroller;
import com.roboo.like.google.view.bounce.BounceScroller.State;
/** 新闻详情 */
@SuppressLint("SetJavaScriptEnabled")
public class WebViewActivity extends BaseLayoutActivity
{
private static final String EXTRA_URL = "url";
private static final String EXTRA_TITLE = "title";
/**默认URL*/
private static final String DIDI_URL = "http://pay.xiaojukeji.com/api/v2/webapp?city=%E5%8C%97%E4%BA%AC&maptype=wgs84&fromlat=39.98096907577634&fromlng=116.30000865410719&fromaddr=%E9%93%B6%E7%A7%91%E5%A4%A7%E5%8E%A6&toaddr=%E8%A5%BF%E4%BA%8C%E6%97%97&toshop=%E5%BE%97%E5%AE%9E%E5%A4%A7%E5%8E%A6&channel=1224&d=130002030203";
/**默认标题*/
private static final String DIDI_TITLE = "嘀嘀打车";
/** WebView要加载的URL */
private String mUrl;
/** ActionBar标题 */
private String mTitle;
/**WebView */
private WebView mWebView;
/** WebView加载进度条 */
private ProgressBar mProgressBar;
/** 后退 */
private ImageButton mIBtnBrowserBack;
/** 前进 */
private ImageButton mIBtnBrowserForward;
/** 刷新 or 取消 */
private ImageButton mIBtnBrowserRefreshCancle;
private WebBackForwardList mBackForwardList;
public static void actionWebView(Activity activity)
{
actionWebView(activity, DIDI_URL);
}
public static void actionWebView(Activity activity, String url)
{
actionWebView(activity, url, DIDI_TITLE);
}
public static void actionWebView(Activity activity, String url, String title)
{
if (TextUtils.isEmpty(url))
{
url = DIDI_URL;
}
if (TextUtils.isEmpty(title))
{
title = DIDI_TITLE;
}
Intent intent = new Intent(activity, WebViewActivity.class);
intent.putExtra(EXTRA_URL, url);
intent.putExtra(EXTRA_TITLE, title);
activity.startActivity(intent);
}
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);// TODO
mUrl = getIntent().getStringExtra(EXTRA_URL);
initView();
initWebView();
customActionBar();
mWebView.loadUrl(mUrl);
setListener();
}
private void setListener()
{
OnClickListenerImpl onClickListenerImpl = new OnClickListenerImpl();
mIBtnBrowserBack.setOnClickListener(onClickListenerImpl);
mIBtnBrowserForward.setOnClickListener(onClickListenerImpl);
mIBtnBrowserRefreshCancle.setOnClickListener(onClickListenerImpl);
mWebView.cancelLongPress();
mWebView.setOnLongClickListener(new OnLongClickListener()
{
public boolean onLongClick(View v)
{
return true;
}
});
}
private void initWebView()
{
mWebView.clearHistory();
mWebView.requestFocus();
mWebView.setClickable(true);
mWebView.getSettings().setJavaScriptEnabled(true);// 可用JS
mWebView.getSettings().setPluginState(PluginState.ON);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.setInitialScale(100);
mWebView.getSettings().setPluginState(PluginState.ON);
mWebView.getSettings().setGeolocationEnabled(true);
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.getSettings().setDatabaseEnabled(true);
mWebView.getSettings().setDisplayZoomControls(false);
mWebView.getSettings().setDomStorageEnabled(true);
if (!mUrl.startsWith("http://m.weathercn.com"))
{
mWebView.getSettings().setCacheMode(
WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
else
{
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
}
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.setScrollBarStyle(0);
mWebView.cancelLongPress();
mWebView.getSettings().setSavePassword(false);// 设置不需要 弹出“是否保存密码” 对话框
mWebView.setWebViewClient(getWebViewClient());
mWebView.setWebChromeClient(getWebChromeClient());
}
private WebChromeClient getWebChromeClient()
{
return new WebChromeClient()
{
@Override
public void onProgressChanged(WebView view, int newProgress)
{
super.onProgressChanged(view, newProgress);
if (newProgress == 100)
{
mProgressBar.setVisibility(View.GONE);
mProgressBar.setProgress(0);
mIBtnBrowserRefreshCancle.setImageDrawable(getResources()
.getDrawable(R.drawable.browser_refresh_selector));
if (mWebView.canGoForward())
{
mIBtnBrowserForward.setEnabled(true);
}
else
{
mIBtnBrowserForward.setEnabled(false);
}
}
else
{
if (mProgressBar.getVisibility() == View.GONE)
{
mProgressBar.setVisibility(View.VISIBLE);
}
if (mProgressBar.getProgress() <= newProgress)
{
mProgressBar.setProgress(newProgress);
}
mIBtnBrowserRefreshCancle.setImageDrawable(getResources()
.getDrawable(R.drawable.browser_cancle_selector));
}
mBackForwardList = mWebView.copyBackForwardList();
if (null != mBackForwardList)
{
// System.out.println("mBackForwardList.getSize() = "
// + mBackForwardList.getSize());
}
}
};
}
private WebViewClient getWebViewClient()
{
return new WebViewClient()
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
mProgressBar.setProgress(0);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
return super.shouldOverrideUrlLoading(view, url);
}
};
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
public void initView()
{
mProgressBar = (ProgressBar) findViewById(R.id.pb_progress);
mWebView = (WebView) findViewById(R.id.wv_webview);
mIBtnBrowserBack = (ImageButton) findViewById(R.id.ibtn_browser_back);
mIBtnBrowserForward = (ImageButton) findViewById(R.id.ibtn_browser_forward);
mIBtnBrowserRefreshCancle = (ImageButton) findViewById(R.id.ibtn_browser_refresh_or_cancle);
mIBtnBrowserForward.setEnabled(false);
}
private void customActionBar()
{
mTitle = getIntent().getStringExtra(EXTRA_TITLE);
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setTitle(mTitle);
mActionBar.setLogo(R.drawable.ic_abs_didi_up);
}
@Override
public void onBackPressed()
{
goBack();
}
private void goBack()
{
if (mWebView.canGoBack())
{
mWebView.goBack();
mIBtnBrowserForward.setEnabled(true);
}
else
{
mIBtnBrowserForward.setEnabled(false);
finish();
}
}
/** 刷新 or 取消 */
public void refreshOrCancle()
{
StateListDrawable stateListDrawable = (StateListDrawable) mIBtnBrowserRefreshCancle
.getDrawable();
BitmapDrawable currentBitmapDrawable = (BitmapDrawable) stateListDrawable
.getCurrent();
BitmapDrawable refreshBitmapDrawable = (BitmapDrawable) getResources()
.getDrawable(R.drawable.ic_browser_refresh_pressed);
BitmapDrawable cancleBitmapDrawable = (BitmapDrawable) getResources()
.getDrawable(R.drawable.ic_browser_cancle_pressed);
System.out.println(currentBitmapDrawable.getBitmap() + " "
+ refreshBitmapDrawable.getBitmap() + " "
+ cancleBitmapDrawable.getBitmap());
if (currentBitmapDrawable.getBitmap() == refreshBitmapDrawable
.getBitmap())// 当前是刷新按钮
{
mWebView.reload();
}
else if (currentBitmapDrawable.getBitmap() == cancleBitmapDrawable
.getBitmap())// 当前是停止按钮
{
mWebView.stopLoading();
}
}
class OnClickListenerImpl implements OnClickListener
{
public void onClick(View v)
{
switch (v.getId())
{
case R.id.ibtn_browser_back:// 返回
goBack();
break;
case R.id.ibtn_browser_forward:// 前进
mWebView.goForward();
break;
case R.id.ibtn_browser_refresh_or_cancle:// 刷新or取消
refreshOrCancle();
break;
default:
break;
}
}
}
}