package com.yanni.etalk.views;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.yanni.etalk.R;
import com.yanni.etalk.utilities.LogManage.JavaLog;
/**
* Created by Administrator on 2016/3/16.
*/
public class ProgressWebView extends WebView {
private static final String TAG = ProgressWebView.class.getSimpleName();
private Context context;
private ProgressBar progressBar;
private OnLongClickListener onLongClickListener = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
};
private WebChromeClient webChromeClient = new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
progressBar.setVisibility(GONE);
} else {
if (progressBar.getVisibility() == GONE)
progressBar.setVisibility(VISIBLE);
progressBar.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
try {
AlertDialog(context, view.getTitle(), message);
} catch (Exception e) {
JavaLog.e(TAG, e);
}
result.confirm();
return true;
}
@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
try {
ConfirmDialog(context, view.getTitle(), message, result);
} catch (Exception e) {
JavaLog.e(TAG, e);
}
return true;
}
};
public ProgressWebView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 8, 0, 0));
Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_status);
progressBar.setProgressDrawable(drawable);
addView(progressBar);
setWebChromeClient(webChromeClient);
setVerticalScrollBarEnabled(false);
setHorizontalScrollBarEnabled(false);
/**屏蔽长按**/
//setOnLongClickListener(onLongClickListener);
setWebSettings(getSettings());
}
private void setWebSettings(WebSettings settings) {
/**把所有内容放到WebView组件等宽的一列中**/
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
/**启用js**/
settings.setJavaScriptEnabled(true);
/**允许js弹出窗口**/
settings.setJavaScriptCanOpenWindowsAutomatically(true);
/**设置HTML5的缓存打开,默认关闭**/
settings.setAppCacheEnabled(true);
/**设置缓存模式**/
/**LOAD_DEFAULT 默认模式,当缓存资源是可用的不过期,就使用,否次网络加载**/
/**LOAD_NORMAL 过时了,不用管**/
/**LOAD_CACHE_ELSE_NETWORK 当缓存资源是可用的就使用,即使它是过期的,否次网络加载**/
/**LOAD_NO_CACHE 不使用缓存**/
/**LOAD_CACHE_ONLY 不使用网络**/
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
/**设置WebView自适应屏幕大小**/
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
/**关闭Zoom按钮**/
settings.setSupportZoom(false);
settings.setBuiltInZoomControls(false);
settings.setDomStorageEnabled(true);
settings.setAppCacheMaxSize(1024 * 1024 * 8);
String appCachePath = context.getCacheDir().getAbsolutePath();
settings.setAppCachePath(appCachePath);
settings.setAllowFileAccess(true);
}
/**
* 网页上的提示消息
*/
private void AlertDialog(Context context, String title, String message) throws Exception {
final Dialog alertDialog = new Dialog(context, R.style.myDialogStyle);
alertDialog.setContentView(R.layout.dialog_exit_media_room);
alertDialog.setCanceledOnTouchOutside(false);
// 将对话框的大小按屏幕大小的百分比设置
Window dialogWindow = alertDialog.getWindow();
Display d = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
p.height = (int) (d.getHeight() * 0.3); // 高度设置为屏幕的0.3
p.width = (int) (d.getWidth() * 0.9); // 宽度设置为屏幕的0.9
dialogWindow.setAttributes(p);
TextView text = (TextView) alertDialog.findViewById(R.id.textView_dialog_text);
text.setText(title + "\n\n" + message);
Button yes = (Button) alertDialog.findViewById(R.id.button_dialog_yes);
Button ok = (Button) alertDialog.findViewById(R.id.button_dialog_ok);
Button no = (Button) alertDialog.findViewById(R.id.button_dialog_no);
yes.setVisibility(View.INVISIBLE);
ok.setVisibility(View.VISIBLE);
ok.setText("确认");
no.setVisibility(View.INVISIBLE);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.cancel();
}
});
alertDialog.show();
}
/**
* 网页上的确认消息
*/
private void ConfirmDialog(Context context, String title, String message, final JsResult result) throws Exception {
final Dialog alertDialog = new Dialog(context, R.style.myDialogStyle);
alertDialog.setContentView(R.layout.dialog_exit_media_room);
alertDialog.setCanceledOnTouchOutside(false);
// 将对话框的大小按屏幕大小的百分比设置
Window dialogWindow = alertDialog.getWindow();
Display d = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
p.height = (int) (d.getHeight() * 0.3); // 高度设置为屏幕的0.3
p.width = (int) (d.getWidth() * 0.9); // 宽度设置为屏幕的0.9
dialogWindow.setAttributes(p);
TextView text = (TextView) alertDialog.findViewById(R.id.textView_dialog_text);
text.setText(title + "\n\n" + message);
Button yes = (Button) alertDialog.findViewById(R.id.button_dialog_yes);
Button ok = (Button) alertDialog.findViewById(R.id.button_dialog_ok);
Button no = (Button) alertDialog.findViewById(R.id.button_dialog_no);
yes.setVisibility(View.VISIBLE);
yes.setText("确认");
ok.setVisibility(View.GONE);
no.setVisibility(View.VISIBLE);
no.setText("取消");
yes.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
result.confirm();
alertDialog.cancel();