package com.edufound.reader.presenter; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Build; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebResourceRequest; import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; import com.edufound.reader.base.BasePresenter; import com.edufound.reader.bean.HttpResultBean; import com.edufound.reader.bean.PayResultBean; import com.edufound.reader.contract.WebContract; import com.edufound.reader.jsinterfaces.WebActivityJsInterfaces; import com.edufound.reader.model.PayModel; import com.edufound.reader.receiver.ShowPageLoadingReceiver; import com.edufound.reader.util.tmailsdk.TMailSDKUtil; import com.edufound.reader.util.Consts; import com.edufound.reader.util.DeviceUtil; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.okhttplib.HttpInfo; import com.okhttplib.callback.Callback; import com.orhanobut.logger.Logger; import java.io.IOException; public class WebPresenter extends BasePresenter implements WebContract.Presenter { PayModel mPayModel; WebActivityJsInterfaces mJsInterfaces; String activityId; public WebPresenter() { mPayModel = new PayModel(); } @Override public void attachView(WebContract.View view) { super.attachView(view); mJsInterfaces = new WebActivityJsInterfaces(mView); } @Override public WebView initWebView(Intent intent) { // WebView webview = new WebView(Consts.getmApplicAtion()); WebView webview = new WebView(mView.getActivity()); webview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); if (Build.VERSION.SDK_INT >= 19) { webview.getSettings().setLoadsImagesAutomatically(true); } else { webview.getSettings().setLoadsImagesAutomatically(false); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } webview.requestFocus(View.FOCUS_DOWN); webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹出窗口 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { webview.getSettings().setMediaPlaybackRequiresUserGesture(false); } webview.getSettings().setBlockNetworkImage(false); // webview.getSettings().set webview.setBackgroundColor(Color.TRANSPARENT); // webview.setBackgroundResource(); webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); webview.getSettings().setLoadWithOverviewMode(true); webview.getSettings().setTextZoom(100); webview.getSettings().setUseWideViewPort(true); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setDomStorageEnabled(false); webview.getSettings().setSupportZoom(true); webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); webview.getSettings().setLoadWithOverviewMode(true); webview.getSettings().setUseWideViewPort(true); webview.setWebChromeClient(new WebChromeClient() { @Override public Bitmap getDefaultVideoPoster() { return null; } @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); } }); webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // webview.removeAllViews(); 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(""); } @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { super.onReceivedHttpError(view, request, errorResponse); // int statusCode = 0; // if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { // statusCode = errorResponse.getStatusCode(); // } // System.out.println("onReceivedHttpError code = " + statusCode); // if (404 == statusCode) { // view.loadUrl("about:blank");// 避免出现默认的错误界面 // showDisConnNeWorkWindow(); // } } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { if (!webview.getSettings().getLoadsImagesAutomatically()) { webview.getSettings().setLoadsImagesAutomatically(true); } if (mView != null) { mView.hideLoading(); } super.onPageFinished(view, url); } }); webview.addJavascriptInterface(mJsInterfaces, "efunboxJS"); //加载地址 String url = intent.getStringExtra("loadUrl").trim(); Gson gson = new Gson(); StringBuffer buffer = new StringBuffer(); if (!TextUtils.isEmpty(intent.getStringExtra("paramsJson"))) { WebParams params = gson.fromJson(intent.getStringExtra("paramsJson"), WebParams.class); if (!TextUtils.isEmpty(params.channelCode)) { if (url.contains("?")) { buffer.append("&channelCode=" + params.channelCode); } else { buffer.append("?channelCode=" + params.channelCode); } } else { buffer.append("&a=a"); } if (!TextUtils.isEmpty(params.uid)) { buffer.append("&uid=" + params.uid); } if (!TextUtils.isEmpty(params.versionCode)) { buffer.append("&versionCode=" + params.versionCode); } if (!TextUtils.isEmpty(params.activityId)) { buffer.append("&activityId=" + params.activityId); activityId = params.activityId; } buffer.append("&width=" + DeviceUtil.getWidth(mView.getActivity())); buffer.append("&height=" + DeviceUtil.getHeight(mView.getActivity())); } url += buffer.toString(); webview.loadUrl(url); Intent hideLoading = new Intent(ShowPageLoadingReceiver.PAGE_LOADING_HIDE); Consts.getmApplicAtion().getApplicationContext().sendBroadcast(hideLoading); return webview; } @Override public WebActivityJsInterfaces getJSInterfaces() { return mJsInterfaces; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == TMailSDKUtil.TMAIL_PAY_RESULT_CODE && resultCode == Activity.RESULT_OK) { if (data != null) { boolean isPaySuccess = data.getBooleanExtra("isPaySuccess", false); String paySuccessDataJson = data.getStringExtra("paySuccessData"); int payErrorCode = data.getIntExtra("payErrorCode", -1); String payErrorMsg = data.getStringExtra("payErrorMsg"); Logger.e("qrcode, isPaySuccess=" + isPaySuccess + ";paySuccessDataJson=" + paySuccessDataJson + ";payErrorCode=" + payErrorCode + ";payErrorMsg=" + payErrorMsg); mView.loadJSMethodPost("TMailPayCallBack('" + isPaySuccess + "','" + paySuccessDataJson + "')"); } } } @Override public void isPaySuccess(String orderId) { if (TextUtils.isEmpty(orderId)) { Logger.e("orderId是空的"); return; } mPayModel.isPay(mView.getActivity(), orderId, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); Logger.e("bean.get:" + info.getRetDetail()); Logger.e("status:" + bean.getData().getPayStatus()); if (bean.getData().getPayStatus().equals("SUCCESS")) { mView.loadJSMethodPost("TMailPayCallBack('" + true + "','{\"status\":\"" + bean.getData().getPayStatus() + "\"}')"); } else { mView.loadJSMethodPost("TMailPayCallBack('" + false + "','{\"status\":\"" + bean.getData().getPayStatus() + "\"}')"); } } @Override public void onFailure(HttpInfo info) throws IOException { } }); } @Override public String getActivityId() { return activityId; } class WebParams { private String channelCode; private String uid; private String versionCode; private String activityId; } }