MainPersenter.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. package com.edufound.bytedance.mvp.presenter;
  2. import android.app.AlertDialog;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.graphics.Bitmap;
  6. import android.graphics.BitmapFactory;
  7. import android.graphics.Color;
  8. import android.net.Uri;
  9. import android.os.Build;
  10. import android.view.KeyEvent;
  11. import android.view.View;
  12. import android.webkit.JavascriptInterface;
  13. import android.webkit.JsResult;
  14. import android.webkit.WebChromeClient;
  15. import android.webkit.WebResourceError;
  16. import android.webkit.WebResourceRequest;
  17. import android.webkit.WebSettings;
  18. import android.webkit.WebView;
  19. import android.webkit.WebViewClient;
  20. import com.edufound.bytedance.R;
  21. import com.edufound.bytedance.application.MyApplication;
  22. import com.edufound.bytedance.base.BasePresenter;
  23. import com.edufound.bytedance.mvp.model.MainModel;
  24. import com.edufound.bytedance.mvp.view.MainView;
  25. import com.edufound.bytedance.util.ContextUtil;
  26. import com.edufound.bytedance.util.Logger;
  27. import com.edufound.bytedance.util.OkHttpUtil;
  28. import com.edufound.bytedance.util.SharedPerfenceUtil;
  29. import com.edufound.bytedance.util.ToastUtil;
  30. import org.json.JSONException;
  31. import org.json.JSONObject;
  32. import java.util.Iterator;
  33. import okhttp3.Request;
  34. public class MainPersenter extends BasePresenter<MainModel, MainView> {
  35. private String mLoadUrl;
  36. private MainJsMethod mMainJsMethod;
  37. private Bitmap mVideoBitmap;
  38. public void initWeb() {
  39. if (Build.VERSION.SDK_INT >= 19) {
  40. getView().getWebView().getSettings().setLoadsImagesAutomatically(true);
  41. } else {
  42. getView().getWebView().getSettings().setLoadsImagesAutomatically(false);
  43. }
  44. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  45. getView().getWebView().getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
  46. }
  47. getView().getWebView().requestFocus(View.FOCUS_DOWN);
  48. getView().getWebView().getSettings().setJavaScriptEnabled(true);
  49. getView().getWebView().getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹出窗口
  50. getView().getWebView().getSettings().setDomStorageEnabled(true);
  51. getView().getWebView().getSettings().setBlockNetworkImage(false);
  52. getView().getWebView().setBackgroundColor(Color.TRANSPARENT);
  53. getView().getWebView().getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  54. getView().getWebView().getSettings().setUseWideViewPort(true);
  55. getView().getWebView().getSettings().setLoadWithOverviewMode(true);
  56. getView().getWebView().getSettings().setTextZoom(100);
  57. mVideoBitmap = BitmapFactory.decodeResource(getView().getActivity().getResources(),
  58. R.drawable.videoposterblack);
  59. getView().getWebView().setWebChromeClient(new WebChromeClient() {
  60. @Override
  61. public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
  62. return super.onJsAlert(view, url, message, result);
  63. }
  64. @Override
  65. public void onShowCustomView(View view, CustomViewCallback callback) {
  66. super.onShowCustomView(view, callback);
  67. }
  68. @Override
  69. public void onProgressChanged(WebView view, int newProgress) {
  70. if (newProgress >= 100) {
  71. }
  72. super.onProgressChanged(view, newProgress);
  73. }
  74. @Override
  75. public Bitmap getDefaultVideoPoster() {
  76. return mVideoBitmap;
  77. }
  78. });
  79. getView().getWebView().setWebViewClient(new WebViewClient() {
  80. @Override
  81. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  82. view.loadUrl(url);
  83. return true;
  84. }
  85. @Override
  86. public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
  87. super.onReceivedError(view, errorCode, description, failingUrl);
  88. view.loadUrl("");// 避免出现默认的错误界面
  89. Logger.e("onReceivedError--4参数");
  90. getView().showDialogNetWork();
  91. }
  92. @Override
  93. public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
  94. view.loadUrl("");// 避免出现默认的错误界面
  95. Logger.e("onReceivedError--3参数");
  96. getView().showDialogNetWork();
  97. }
  98. @Override
  99. public void onPageStarted(WebView view, String url, Bitmap favicon) {
  100. super.onPageStarted(view, url, favicon);
  101. getView().showProgressDialog();
  102. }
  103. @Override
  104. public void onPageFinished(WebView view, String url) {
  105. if (!view.getSettings().getLoadsImagesAutomatically()) {
  106. view.getSettings().setLoadsImagesAutomatically(true);
  107. }
  108. if (getView() == null) {
  109. return;
  110. }
  111. getView().dismissProgressDialog();
  112. super.onPageFinished(view, url);
  113. }
  114. });
  115. mMainJsMethod = new MainJsMethod();
  116. getView().getWebView().addJavascriptInterface(mMainJsMethod, "efunboxJS");
  117. }
  118. public void openWeb(Intent intent) {
  119. try {
  120. getView().getWebView().loadUrl("");
  121. mLoadUrl = model.getDefaultWebUrl();
  122. Uri uri = intent.getData();
  123. String intent_url = "";
  124. if (uri != null) {
  125. intent_url = uri.getQueryParameter("url");
  126. } else {
  127. intent_url = intent.getStringExtra("url");
  128. }
  129. if (intent_url != null && !intent_url.isEmpty()) {
  130. mLoadUrl = intent_url;
  131. }
  132. StringBuffer buffer = new StringBuffer();
  133. String intent_params = intent.getStringExtra("params");
  134. if (intent_params != null && !intent_params.isEmpty()) {
  135. JSONObject jsonObject = null;
  136. jsonObject = new JSONObject(intent_params);
  137. Iterator it = jsonObject.keys();
  138. while (it.hasNext()) {
  139. String key = it.next().toString();
  140. buffer.append("&" + key + "=" + jsonObject.getString(key));
  141. }
  142. }
  143. mLoadUrl = mLoadUrl + model.getLoadParams(getView().getActivity()) + buffer.toString();
  144. Logger.e("mLoadUrl:" + mLoadUrl);
  145. getView().getWebView().loadUrl(mLoadUrl);
  146. } catch (JSONException e) {
  147. e.printStackTrace();
  148. }
  149. }
  150. @Override
  151. protected void onViewDestroy() {
  152. }
  153. public MainJsMethod getmMainJsMethod() {
  154. if (mMainJsMethod == null) {
  155. return null;
  156. }
  157. return mMainJsMethod;
  158. }
  159. public boolean onKeyDown(int keycode, KeyEvent event) {
  160. switch (keycode) {
  161. case KeyEvent.KEYCODE_BACK:
  162. case KeyEvent.KEYCODE_ESCAPE:
  163. getView().loadJsMehtod("boxEventHandler('key_down','KEY_BACK')");
  164. return true;
  165. }
  166. return false;
  167. }
  168. public boolean onKeyUp(int keycode, KeyEvent event) {
  169. switch (keycode) {
  170. case KeyEvent.KEYCODE_BACK:
  171. case KeyEvent.KEYCODE_ESCAPE:
  172. // 返回键
  173. getView().loadJsMehtod("boxEventHandler('key_up','KEY_BACK')");
  174. return true;
  175. }
  176. return false;
  177. }
  178. //--------------------------------------------------------JS方法
  179. /**
  180. * JS调用的Android方法类
  181. */
  182. public class MainJsMethod {
  183. AlertDialog.Builder mAlertBuilder;
  184. /**
  185. * 关闭应用
  186. */
  187. @JavascriptInterface
  188. public void closeApp() {
  189. Logger.e("closeApp");
  190. OkHttpUtil.postUserTime(new OkHttpUtil.ResultCallback() {
  191. @Override
  192. public void onError(Request request, Exception e) {
  193. Logger.e("上传使用时间:onError:" + request.toString());
  194. MyApplication.exitApp();
  195. android.os.Process.killProcess(android.os.Process.myPid());
  196. }
  197. @Override
  198. public void onResponse(Object response) {
  199. Logger.e("上传使用时间:" + response.toString());
  200. MyApplication.exitApp();
  201. android.os.Process.killProcess(android.os.Process.myPid());
  202. }
  203. });
  204. }
  205. /**
  206. * 根据key设置SP参数方法
  207. */
  208. @JavascriptInterface
  209. public void setPreData(String key, String json) {
  210. SharedPerfenceUtil.setPrefString(ContextUtil.getmApplicationContext(), key, json);
  211. }
  212. /**
  213. * 根据key获取SP参数方法
  214. */
  215. @JavascriptInterface
  216. public String getPreData(String key) {
  217. return SharedPerfenceUtil.getPrefString(ContextUtil.getmApplicationContext(), key, "");
  218. }
  219. /**
  220. * 根据key删除SP参数
  221. */
  222. @JavascriptInterface
  223. public void delPreData(String key) {
  224. SharedPerfenceUtil.clearRecourds(ContextUtil.getmApplicationContext(), key);
  225. }
  226. /**
  227. * 設置webview背景颜色
  228. */
  229. @JavascriptInterface
  230. public void setWebBackGroundColor(String colorString) {
  231. getView().getWebView().setBackgroundColor(Color.parseColor(colorString));
  232. }
  233. /**
  234. * 给JS弹出Toast
  235. */
  236. @JavascriptInterface
  237. public void showToast(String message) {
  238. ToastUtil.showToast(message);
  239. }
  240. /**
  241. * 给JS提供alert
  242. */
  243. @JavascriptInterface
  244. public void showAlert(String message) {
  245. if (mAlertBuilder == null) {
  246. mAlertBuilder = new AlertDialog.Builder(getView().getActivity());
  247. mAlertBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
  248. @Override
  249. public void onClick(DialogInterface dialogInterface, int i) {
  250. dialogInterface.dismiss();
  251. }
  252. });
  253. }
  254. mAlertBuilder.setMessage(message);
  255. mAlertBuilder.create().show();
  256. }
  257. }
  258. }