123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- package com.edufound.bytedance.mvp.presenter;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Color;
- import android.net.Uri;
- import android.os.Build;
- import android.view.KeyEvent;
- import android.view.View;
- import android.webkit.JavascriptInterface;
- import android.webkit.JsResult;
- import android.webkit.WebChromeClient;
- import android.webkit.WebResourceError;
- import android.webkit.WebResourceRequest;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import android.webkit.WebViewClient;
- import com.edufound.bytedance.R;
- import com.edufound.bytedance.application.MyApplication;
- import com.edufound.bytedance.base.BasePresenter;
- import com.edufound.bytedance.mvp.model.MainModel;
- import com.edufound.bytedance.mvp.view.MainView;
- import com.edufound.bytedance.util.ContextUtil;
- import com.edufound.bytedance.util.Logger;
- import com.edufound.bytedance.util.OkHttpUtil;
- import com.edufound.bytedance.util.SharedPerfenceUtil;
- import com.edufound.bytedance.util.ToastUtil;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.util.Iterator;
- import okhttp3.Request;
- public class MainPersenter extends BasePresenter<MainModel, MainView> {
- private String mLoadUrl;
- private MainJsMethod mMainJsMethod;
- private Bitmap mVideoBitmap;
- public void initWeb() {
- if (Build.VERSION.SDK_INT >= 19) {
- getView().getWebView().getSettings().setLoadsImagesAutomatically(true);
- } else {
- getView().getWebView().getSettings().setLoadsImagesAutomatically(false);
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- getView().getWebView().getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
- }
- getView().getWebView().requestFocus(View.FOCUS_DOWN);
- getView().getWebView().getSettings().setJavaScriptEnabled(true);
- getView().getWebView().getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹出窗口
- getView().getWebView().getSettings().setDomStorageEnabled(true);
- getView().getWebView().getSettings().setBlockNetworkImage(false);
- getView().getWebView().setBackgroundColor(Color.TRANSPARENT);
- getView().getWebView().getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
- getView().getWebView().getSettings().setUseWideViewPort(true);
- getView().getWebView().getSettings().setLoadWithOverviewMode(true);
- getView().getWebView().getSettings().setTextZoom(100);
- mVideoBitmap = BitmapFactory.decodeResource(getView().getActivity().getResources(),
- R.drawable.videoposterblack);
- getView().getWebView().setWebChromeClient(new WebChromeClient() {
- @Override
- public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
- return super.onJsAlert(view, url, message, result);
- }
- @Override
- public void onShowCustomView(View view, CustomViewCallback callback) {
- super.onShowCustomView(view, callback);
- }
- @Override
- public void onProgressChanged(WebView view, int newProgress) {
- if (newProgress >= 100) {
- }
- super.onProgressChanged(view, newProgress);
- }
- @Override
- public Bitmap getDefaultVideoPoster() {
- return mVideoBitmap;
- }
- });
- getView().getWebView().setWebViewClient(new WebViewClient() {
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
- return true;
- }
- @Override
- public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
- super.onReceivedError(view, errorCode, description, failingUrl);
- view.loadUrl("");// 避免出现默认的错误界面
- Logger.e("onReceivedError--4参数");
- getView().showDialogNetWork();
- }
- @Override
- public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
- view.loadUrl("");// 避免出现默认的错误界面
- Logger.e("onReceivedError--3参数");
- getView().showDialogNetWork();
- }
- @Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- super.onPageStarted(view, url, favicon);
- getView().showProgressDialog();
- }
- @Override
- public void onPageFinished(WebView view, String url) {
- if (!view.getSettings().getLoadsImagesAutomatically()) {
- view.getSettings().setLoadsImagesAutomatically(true);
- }
- if (getView() == null) {
- return;
- }
- getView().dismissProgressDialog();
- super.onPageFinished(view, url);
- }
- });
- mMainJsMethod = new MainJsMethod();
- getView().getWebView().addJavascriptInterface(mMainJsMethod, "efunboxJS");
- }
- public void openWeb(Intent intent) {
- try {
- getView().getWebView().loadUrl("");
- mLoadUrl = model.getDefaultWebUrl();
- Uri uri = intent.getData();
- String intent_url = "";
- if (uri != null) {
- intent_url = uri.getQueryParameter("url");
- } else {
- intent_url = intent.getStringExtra("url");
- }
- if (intent_url != null && !intent_url.isEmpty()) {
- mLoadUrl = intent_url;
- }
- StringBuffer buffer = new StringBuffer();
- String intent_params = intent.getStringExtra("params");
- if (intent_params != null && !intent_params.isEmpty()) {
- JSONObject jsonObject = null;
- jsonObject = new JSONObject(intent_params);
- Iterator it = jsonObject.keys();
- while (it.hasNext()) {
- String key = it.next().toString();
- buffer.append("&" + key + "=" + jsonObject.getString(key));
- }
- }
- mLoadUrl = mLoadUrl + model.getLoadParams(getView().getActivity()) + buffer.toString();
- Logger.e("mLoadUrl:" + mLoadUrl);
- getView().getWebView().loadUrl(mLoadUrl);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- @Override
- protected void onViewDestroy() {
- }
- public MainJsMethod getmMainJsMethod() {
- if (mMainJsMethod == null) {
- return null;
- }
- return mMainJsMethod;
- }
- public boolean onKeyDown(int keycode, KeyEvent event) {
- switch (keycode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- getView().loadJsMehtod("boxEventHandler('key_down','KEY_BACK')");
- return true;
- }
- return false;
- }
- public boolean onKeyUp(int keycode, KeyEvent event) {
- switch (keycode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- // 返回键
- getView().loadJsMehtod("boxEventHandler('key_up','KEY_BACK')");
- return true;
- }
- return false;
- }
- //--------------------------------------------------------JS方法
- /**
- * JS调用的Android方法类
- */
- public class MainJsMethod {
- AlertDialog.Builder mAlertBuilder;
- /**
- * 关闭应用
- */
- @JavascriptInterface
- public void closeApp() {
- Logger.e("closeApp");
- OkHttpUtil.postUserTime(new OkHttpUtil.ResultCallback() {
- @Override
- public void onError(Request request, Exception e) {
- Logger.e("上传使用时间:onError:" + request.toString());
- MyApplication.exitApp();
- android.os.Process.killProcess(android.os.Process.myPid());
- }
- @Override
- public void onResponse(Object response) {
- Logger.e("上传使用时间:" + response.toString());
- MyApplication.exitApp();
- android.os.Process.killProcess(android.os.Process.myPid());
- }
- });
- }
- /**
- * 根据key设置SP参数方法
- */
- @JavascriptInterface
- public void setPreData(String key, String json) {
- SharedPerfenceUtil.setPrefString(ContextUtil.getmApplicationContext(), key, json);
- }
- /**
- * 根据key获取SP参数方法
- */
- @JavascriptInterface
- public String getPreData(String key) {
- return SharedPerfenceUtil.getPrefString(ContextUtil.getmApplicationContext(), key, "");
- }
- /**
- * 根据key删除SP参数
- */
- @JavascriptInterface
- public void delPreData(String key) {
- SharedPerfenceUtil.clearRecourds(ContextUtil.getmApplicationContext(), key);
- }
- /**
- * 設置webview背景颜色
- */
- @JavascriptInterface
- public void setWebBackGroundColor(String colorString) {
- getView().getWebView().setBackgroundColor(Color.parseColor(colorString));
- }
- /**
- * 给JS弹出Toast
- */
- @JavascriptInterface
- public void showToast(String message) {
- ToastUtil.showToast(message);
- }
- /**
- * 给JS提供alert
- */
- @JavascriptInterface
- public void showAlert(String message) {
- if (mAlertBuilder == null) {
- mAlertBuilder = new AlertDialog.Builder(getView().getActivity());
- mAlertBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- dialogInterface.dismiss();
- }
- });
- }
- mAlertBuilder.setMessage(message);
- mAlertBuilder.create().show();
- }
- }
- }
|