package com.zjmt.oa.ui.activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.HttpAuthHandler;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;
import com.zjmt.oa.Constant;
import com.zjmt.oa.R;
import com.zjmt.oa.ui.BaseActivity;
import com.zjmt.oa.util.AndroidBug5497Workaround;
import com.zjmt.oa.util.TLog;
import com.zjmt.oa.view.EmptyLayout;
/**
* Created by fanghua on 2016/7/4.
*/
public class BaseHtmlActivity extends BaseActivity implements View.OnClickListener {
protected EmptyLayout mErrorView;
protected WebView mWebView;
private ProgressBar progressBar;
ImageView topMenu;
private String mUrl = null;
private boolean mNeedResult = false;
@Override
protected int getLayoutId() {
return R.layout.activity_detail_advertisement;
}
@Override
public void initViews() {
super.initViews();
AndroidBug5497Workaround.assistActivity(this);
mErrorView = (EmptyLayout) findViewById(R.id.error_layout);
// mErrorView.setErrorType(EmptyLayout.NETWORK_LOADING);
mErrorView.setOnLayoutClickListener(listener);
progressBar = (ProgressBar) findViewById(R.id.progressbar);
topMenu = (ImageView) findViewById(R.id.top_menu);
topMenu.setVisibility(View.VISIBLE);
topMenu.setImageResource(R.mipmap.finish);
topMenu.setOnClickListener(this);
mWebView = (WebView) findViewById(R.id.advertise_webview);
initWebSettings();
Intent intent = getIntent();
if (intent != null) {
String title = intent.getStringExtra(Constant.TITLE);
mUrl = intent.getStringExtra(Constant.URL);
mNeedResult = intent.getBooleanExtra(Constant.RESULT,false);
mTitleView.setVisibility(View.VISIBLE);
mTitleView.setText(title);
TLog.log( "html url = " + mUrl);
doLoadSuccess(mUrl);
}
}
public void doLoadSuccess(String url) {
isReceiveError = false;
mWebView.loadUrl(url);
// mErrorView.setErrorType(EmptyLayout.HIDE_LAYOUT);
}
public void initWebSettings() {
//设置WebChromeClient类
mWebView.setWebChromeClient(new WebChromeClient() {
//获取加载进度
@Override
public void onProgressChanged(WebView view, int newProgress) {
TLog.log(newProgress+"");
if (newProgress < 100) {
progressBar.setProgress(newProgress);
} else if (newProgress == 100) {
progressBar.setVisibility(View.GONE);
TLog.log("onProgressChanged");
}
}
});
//设置WebViewClient类
mWebView.setWebViewClient(new WebViewClient() {
//设置加载前的函数
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressBar.setVisibility(View.VISIBLE);
}
//设置结束加载函数
@Override
public void onPageFinished(WebView view, String url) {
TLog.log("onPageFinished...url = "+url);
if (!isReceiveError) {
mErrorView.setErrorType(EmptyLayout.HIDE_LAYOUT);
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
TLog.log("error... 66");
doFail();
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
TLog.log("error...3");
super.onReceivedSslError(view, handler, error);
}
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
TLog.log("error...2");
super.onReceivedHttpAuthRequest(view, handler, host, realm);
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
TLog.log("error...1");
super.onReceivedHttpError(view, request, errorResponse);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
TLog.log("error...");
progressBar.setVisibility(View.GONE);
}
});
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
}
public boolean isReceiveError = false;
public void doFail() {
isReceiveError = true;
progressBar.setVisibility(View.GONE);
mErrorView.setErrorType(EmptyLayout.NETWORK_ERROR);
}
public View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
mErrorView.setErrorType(EmptyLayout.NETWORK_LOADING);
doLoadSuccess(mUrl);
}
};
//点击返回上一页面而不是退出浏览器
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
if (keyCode == KeyEvent.KEYCODE_BACK && mNeedResult) {
setResult(Constant.RESULT_CODE);
}
return super.onKeyDown(keyCode, event);
}
@Override
public void doBackClick() {
if ( mWebView.canGoBack()) {
mWebView.goBack();
return;
}
if (mNeedResult) {
setResult(Constant.RESULT_CODE);
}
super.doBackClick();
}
@Override
protected void onDestroy() {
if (mWebView != null) {
mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
mWebView.clearHistory();
((ViewGroup) mWebView.getParent()).removeView(mWebView);
mWebView.destroy();
mWebView = null;
}
super.onDestroy();
}
@Override
public void onClick(View view) {
if (mNeedResult) {
setResult(Constant.RESULT_CODE);
}
finish();
}
}