WebPresenter.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.edufound.reader.presenter;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Color;
  6. import android.os.Build;
  7. import android.text.TextUtils;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.webkit.JsResult;
  11. import android.webkit.WebChromeClient;
  12. import android.webkit.WebResourceRequest;
  13. import android.webkit.WebResourceResponse;
  14. import android.webkit.WebSettings;
  15. import android.webkit.WebView;
  16. import android.webkit.WebViewClient;
  17. import android.widget.FrameLayout;
  18. import com.edufound.reader.base.BasePresenter;
  19. import com.edufound.reader.bean.HttpResultBean;
  20. import com.edufound.reader.bean.PayResultBean;
  21. import com.edufound.reader.contract.WebContract;
  22. import com.edufound.reader.jsinterfaces.WebActivityJsInterfaces;
  23. import com.edufound.reader.model.PayModel;
  24. import com.edufound.reader.receiver.ShowPageLoadingReceiver;
  25. import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
  26. import com.edufound.reader.util.Consts;
  27. import com.edufound.reader.util.DeviceUtil;
  28. import com.google.gson.Gson;
  29. import com.google.gson.reflect.TypeToken;
  30. import com.okhttplib.HttpInfo;
  31. import com.okhttplib.callback.Callback;
  32. import com.orhanobut.logger.Logger;
  33. import java.io.IOException;
  34. public class WebPresenter extends BasePresenter<WebContract.View> implements WebContract.Presenter {
  35. PayModel mPayModel;
  36. WebActivityJsInterfaces mJsInterfaces;
  37. String activityId;
  38. public WebPresenter() {
  39. mPayModel = new PayModel();
  40. }
  41. @Override
  42. public void attachView(WebContract.View view) {
  43. super.attachView(view);
  44. mJsInterfaces = new WebActivityJsInterfaces(mView);
  45. }
  46. @Override
  47. public WebView initWebView(Intent intent) {
  48. // WebView webview = new WebView(Consts.getmApplicAtion());
  49. WebView webview = new WebView(mView.getActivity());
  50. webview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
  51. if (Build.VERSION.SDK_INT >= 19) {
  52. webview.getSettings().setLoadsImagesAutomatically(true);
  53. } else {
  54. webview.getSettings().setLoadsImagesAutomatically(false);
  55. }
  56. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  57. webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
  58. }
  59. webview.requestFocus(View.FOCUS_DOWN);
  60. webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹出窗口
  61. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
  62. webview.getSettings().setMediaPlaybackRequiresUserGesture(false);
  63. }
  64. webview.getSettings().setBlockNetworkImage(false);
  65. // webview.getSettings().set
  66. webview.setBackgroundColor(Color.TRANSPARENT);
  67. // webview.setBackgroundResource();
  68. webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  69. webview.getSettings().setLoadWithOverviewMode(true);
  70. webview.getSettings().setTextZoom(100);
  71. webview.getSettings().setUseWideViewPort(true);
  72. webview.getSettings().setJavaScriptEnabled(true);
  73. webview.getSettings().setDomStorageEnabled(false);
  74. webview.getSettings().setSupportZoom(true);
  75. webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
  76. webview.getSettings().setLoadWithOverviewMode(true);
  77. webview.getSettings().setUseWideViewPort(true);
  78. webview.setWebChromeClient(new WebChromeClient() {
  79. @Override
  80. public Bitmap getDefaultVideoPoster() {
  81. return null;
  82. }
  83. @Override
  84. public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
  85. return super.onJsAlert(view, url, message, result);
  86. }
  87. @Override
  88. public void onShowCustomView(View view, CustomViewCallback callback) {
  89. super.onShowCustomView(view, callback);
  90. }
  91. @Override
  92. public void onProgressChanged(WebView view, int newProgress) {
  93. if (newProgress >= 100) {
  94. }
  95. super.onProgressChanged(view, newProgress);
  96. }
  97. });
  98. webview.setWebViewClient(new WebViewClient() {
  99. @Override
  100. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  101. // webview.removeAllViews();
  102. view.loadUrl(url);
  103. return true;
  104. }
  105. @Override
  106. public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
  107. super.onReceivedError(view, errorCode, description, failingUrl);
  108. view.loadUrl("");
  109. }
  110. @Override
  111. public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
  112. super.onReceivedHttpError(view, request, errorResponse);
  113. // int statusCode = 0;
  114. // if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
  115. // statusCode = errorResponse.getStatusCode();
  116. // }
  117. // System.out.println("onReceivedHttpError code = " + statusCode);
  118. // if (404 == statusCode) {
  119. // view.loadUrl("about:blank");// 避免出现默认的错误界面
  120. // showDisConnNeWorkWindow();
  121. // }
  122. }
  123. @Override
  124. public void onPageStarted(WebView view, String url, Bitmap favicon) {
  125. super.onPageStarted(view, url, favicon);
  126. }
  127. @Override
  128. public void onPageFinished(WebView view, String url) {
  129. if (!webview.getSettings().getLoadsImagesAutomatically()) {
  130. webview.getSettings().setLoadsImagesAutomatically(true);
  131. }
  132. if (mView != null) {
  133. mView.hideLoading();
  134. }
  135. super.onPageFinished(view, url);
  136. }
  137. });
  138. webview.addJavascriptInterface(mJsInterfaces, "efunboxJS");
  139. //加载地址
  140. String url = intent.getStringExtra("loadUrl").trim();
  141. Gson gson = new Gson();
  142. StringBuffer buffer = new StringBuffer();
  143. if (!TextUtils.isEmpty(intent.getStringExtra("paramsJson"))) {
  144. WebParams params = gson.fromJson(intent.getStringExtra("paramsJson"), WebParams.class);
  145. if (!TextUtils.isEmpty(params.channelCode)) {
  146. if (url.contains("?")) {
  147. buffer.append("&channelCode=" + params.channelCode);
  148. } else {
  149. buffer.append("?channelCode=" + params.channelCode);
  150. }
  151. } else {
  152. buffer.append("&a=a");
  153. }
  154. if (!TextUtils.isEmpty(params.uid)) {
  155. buffer.append("&uid=" + params.uid);
  156. }
  157. if (!TextUtils.isEmpty(params.versionCode)) {
  158. buffer.append("&versionCode=" + params.versionCode);
  159. }
  160. if (!TextUtils.isEmpty(params.activityId)) {
  161. buffer.append("&activityId=" + params.activityId);
  162. activityId = params.activityId;
  163. }
  164. buffer.append("&width=" + DeviceUtil.getWidth(mView.getActivity()));
  165. buffer.append("&height=" + DeviceUtil.getHeight(mView.getActivity()));
  166. }
  167. url += buffer.toString();
  168. webview.loadUrl(url);
  169. Intent hideLoading = new Intent(ShowPageLoadingReceiver.PAGE_LOADING_HIDE);
  170. Consts.getmApplicAtion().getApplicationContext().sendBroadcast(hideLoading);
  171. return webview;
  172. }
  173. @Override
  174. public WebActivityJsInterfaces getJSInterfaces() {
  175. return mJsInterfaces;
  176. }
  177. @Override
  178. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  179. if (requestCode == TMailSDKUtil.TMAIL_PAY_RESULT_CODE && resultCode == Activity.RESULT_OK) {
  180. if (data != null) {
  181. boolean isPaySuccess = data.getBooleanExtra("isPaySuccess", false);
  182. String paySuccessDataJson = data.getStringExtra("paySuccessData");
  183. int payErrorCode = data.getIntExtra("payErrorCode", -1);
  184. String payErrorMsg = data.getStringExtra("payErrorMsg");
  185. Logger.e("qrcode, isPaySuccess=" + isPaySuccess +
  186. ";paySuccessDataJson=" + paySuccessDataJson +
  187. ";payErrorCode=" + payErrorCode +
  188. ";payErrorMsg=" + payErrorMsg);
  189. mView.loadJSMethodPost("TMailPayCallBack('" + isPaySuccess + "','" + paySuccessDataJson + "')");
  190. }
  191. }
  192. }
  193. @Override
  194. public void isPaySuccess(String orderId) {
  195. if (TextUtils.isEmpty(orderId)) {
  196. Logger.e("orderId是空的");
  197. return;
  198. }
  199. mPayModel.isPay(mView.getActivity(), orderId, new Callback() {
  200. @Override
  201. public void onSuccess(HttpInfo info) throws IOException {
  202. HttpResultBean<PayResultBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<PayResultBean>>() {
  203. }.getType());
  204. Logger.e("bean.get:" + info.getRetDetail());
  205. Logger.e("status:" + bean.getData().getPayStatus());
  206. if (bean.getData().getPayStatus().equals("SUCCESS")) {
  207. mView.loadJSMethodPost("TMailPayCallBack('" + true + "','{\"status\":\"" + bean.getData().getPayStatus() + "\"}')");
  208. } else {
  209. mView.loadJSMethodPost("TMailPayCallBack('" + false + "','{\"status\":\"" + bean.getData().getPayStatus() + "\"}')");
  210. }
  211. }
  212. @Override
  213. public void onFailure(HttpInfo info) throws IOException {
  214. }
  215. });
  216. }
  217. @Override
  218. public String getActivityId() {
  219. return activityId;
  220. }
  221. class WebParams {
  222. private String channelCode;
  223. private String uid;
  224. private String versionCode;
  225. private String activityId;
  226. }
  227. }