123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- package com.edufound.mobile.xxt.main;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.app.Dialog;
- import android.content.Context;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.graphics.Color;
- import android.os.Build;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.support.annotation.Nullable;
- import android.view.Display;
- import android.view.Gravity;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.Window;
- import android.view.WindowManager;
- 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 com.edufound.mobile.xxt.application.EApplication;
- import com.edufound.mobile.xxt.base.BaseModel;
- import com.edufound.mobile.xxt.base.BasePersenter;
- import com.edufound.mobile.xxt.interfaces.EfunboxPayInterfaces;
- import com.edufound.mobile.xxt.interfaces.JsInterfaces;
- import com.edufound.mobile.xxt.util.ContextUtil;
- import com.edufound.mobile.xxt.util.DeviceUtil;
- import com.edufound.mobile.xxt.util.DeviceUuidFactory;
- import com.edufound.mobile.xxt.util.Logger;
- import com.edufound.mobile.xxt.util.SPutil;
- import com.edufound.mobile.xxt.util.ToastUtil;
- import com.edufound.mobile.xxt.view.ErrorView;
- public class MainPersenter implements MainIPersenter {
- public static final int WECHAT_LOGIN = 0x76761;
- public static final int PAY_RESULT = 0x76762;
- private static MainView mView = null;
- private MainModel mModel = null;
- private JsInterfaces mJsInterfaces = null;
- private EfunboxPayInterfaces mPayInterfaces = null;
- private String mLoadUrl;
- ErrorView mErrorView;
- Dialog mErrorViewDialog;
- private DeviceUtil deviceUtil;
- public MainPersenter(MainView view) {
- mView = view;
- mModel = new MainModel();
- deviceUtil = new DeviceUtil();
- mJsInterfaces = new JsInterfaces(mView);
- mPayInterfaces = new EfunboxPayInterfaces(mView);
- }
- @Override
- public void loadData() {
- mModel.LoadData(new BaseModel.LoadDataBack() {
- @Override
- public void success(String datajson) {
- Logger.e("datajson:" + datajson);
- mView.showData(datajson);
- }
- @Override
- public void failure() {
- Logger.e("failure");
- }
- });
- }
- // 设置WebView
- @SuppressLint("JavascriptInterface")
- @Override
- public void initWebView(final WebView webview) {
- 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().setJavaScriptEnabled(true);
- webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹出窗口
- webview.getSettings().setDomStorageEnabled(true);
- // 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().setUseWideViewPort(true);
- webview.getSettings().setLoadWithOverviewMode(true);
- webview.getSettings().setTextZoom(100);
- webview.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);
- }
- });
- 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("");
- showDisConnNeWorkWindow();
- }
- @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);
- }
- mView.hideLoading();
- super.onPageFinished(view, url);
- }
- });
- webview.addJavascriptInterface(mJsInterfaces, "efunboxJS");
- webview.addJavascriptInterface(mPayInterfaces, "efunboxPay");
- }
- public int dip2px(Context context, float dpValue) {
- final float scale = context.getResources().getDisplayMetrics().density;
- return (int) (dpValue * scale + 0.5f);
- }
- @Override
- public JsInterfaces getJsInterfaces() {
- return mJsInterfaces;
- }
- @Override
- public EfunboxPayInterfaces getPayInterfaces() {
- return mPayInterfaces;
- }
- @Override
- public void openWeb(Intent intent) {
- mView.loadUrl("");
- mLoadUrl = mModel.getDefaultLoadUrl();
- String intent_url = intent.getStringExtra("url");
- Logger.e("-----------------------------");
- Logger.e("intent_url:" + intent_url);
- Logger.e("-----------------------------");
- if (intent_url != null && !intent_url.isEmpty()) {
- mLoadUrl = intent_url;
- }
- String preuuid = SPutil.getPrefString(ContextUtil.getContext(), DeviceUuidFactory.UUID_SPKEY, "");
- if (preuuid.equals("")) {
- preuuid = DeviceUuidFactory.getUuid().toString();
- }
- StringBuffer buffer = new StringBuffer();
- buffer.append("appCode=" + EApplication.getAppCode());
- buffer.append("&uuid=" + preuuid);
- buffer.append("&width=" + deviceUtil.getWidth(mView.getActivity()));
- buffer.append("&height=" + deviceUtil.getHeight(mView.getActivity()));
- buffer.append("&version=" + deviceUtil.getVersionCode(mView.getActivity()));
- mLoadUrl += buffer.toString();
- Logger.DebugE("LOADURL=" + mLoadUrl);
- mView.loadUrl(mLoadUrl);
- }
- @Override
- public boolean onKeyDown(int keycode, KeyEvent event) {
- switch (keycode) {
- case KeyEvent.KEYCODE_DPAD_CENTER:
- case KeyEvent.KEYCODE_ENTER:
- mView.loadJsMehtod("boxEventHandler('key_down','KEY_SELECT')");
- break;
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- mView.loadJsMehtod("boxEventHandler('key_down','KEY_BACK')");
- return true;
- case KeyEvent.KEYCODE_HOME:
- // Home键 -,- P.S:不一定能监听到
- Logger.DebugE("click home");
- EApplication.exitApp();
- break;
- case KeyEvent.KEYCODE_DPAD_UP:
- // 上
- mView.loadJsMehtod("boxEventHandler('key_down','KEY_UP')");
- break;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- // 右
- mView.loadJsMehtod("boxEventHandler('key_down','KEY_RIGHT')");
- break;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- // 下
- mView.loadJsMehtod("boxEventHandler('key_down','KEY_DOWN')");
- break;
- case KeyEvent.KEYCODE_DPAD_LEFT:
- // 左
- mView.loadJsMehtod("boxEventHandler('key_down','KEY_LEFT')");
- break;
- }
- return false;
- }
- @Override
- public boolean onKeyUp(int keycode, KeyEvent event) {
- // getJsInterfaces().clickMusic("1", "1");
- if (mView.getActivityPay()) {
- return true;
- }
- switch (keycode) {
- case KeyEvent.KEYCODE_DPAD_CENTER:
- case KeyEvent.KEYCODE_ENTER:
- // 确认键
- mView.loadJsMehtod("boxEventHandler('key_up','KEY_SELECT')");
- break;
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- // 返回键
- mView.loadJsMehtod("boxEventHandler('key_up','KEY_BACK')");
- // mJsInterfaces.closeApp();
- return true;
- case KeyEvent.KEYCODE_DPAD_UP:
- // 上
- mView.loadJsMehtod("boxEventHandler('key_up','KEY_UP')");
- break;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- // 右
- mView.loadJsMehtod("boxEventHandler('key_up','KEY_RIGHT')");
- break;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- // 下
- mView.loadJsMehtod("boxEventHandler('key_up','KEY_DOWN')");
- break;
- case KeyEvent.KEYCODE_DPAD_LEFT:
- // 左
- mView.loadJsMehtod("boxEventHandler('key_up','KEY_LEFT')");
- break;
- }
- return false;
- }
- @Override
- public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- switch (requestCode) {
- case EfunboxPayInterfaces.START_PAY_DB:
- if (resultCode == Activity.RESULT_OK) {
- Bundle bundle = data.getExtras();
- int back = bundle.getInt("back");
- //back为返回值
- String Out_trade_no = bundle.getString("Out_trade_no");
- // Out_trade_no为订单号
- } else if (requestCode == Activity.RESULT_CANCELED) {
- }
- break;
- case EfunboxPayInterfaces.START_PAY_HUANWANG:
- break;
- case EfunboxPayInterfaces.START_PAY_SKYWORTH:
- // ToastUtil.showToast("START_PAY_SKYWORTH");
- break;
- case EfunboxPayInterfaces.START_PAY_XIAOMI:
- // ToastUtil.showToast("START_PAY_XIAOMI");
- break;
- }
- mView.acPostDelayed(new Runnable() {
- @Override
- public void run() {
- mView.setActivityPay(false);
- }
- }, 1000);
- }
- @Override
- public void onDisConnNetWork() {
- // ToastUtil.showToast("断网了。。");
- mView.stopWebView();
- showDisConnNeWorkWindow();
- }
- @Override
- public void onConnNetWork() {
- Logger.e("onConnNetWork");
- // if (mErrorViewDialog != null) {
- // mErrorViewDialog.dismiss();
- // mView.resumeWebView();
- // }
- }
- void showDisConnNeWorkWindow() {
- if (mErrorView == null) {
- mErrorViewDialog = new Dialog(mView.getActivity());
- try {
- int dividerID = mView.getActivity().getResources().getIdentifier("android:id/titleDivider", null, null);
- View divider = mErrorViewDialog.findViewById(dividerID);
- divider.setBackgroundColor(Color.TRANSPARENT);
- } catch (Exception e) {
- //上面的代码,是用来去除Holo主题的蓝色线条
- e.printStackTrace();
- }
- mErrorView = new ErrorView(mView);
- mErrorView.setViewBgColor(Color.TRANSPARENT);
- mErrorView.setBtnClickListener(new ErrorView.BtnClickListener() {
- @Override
- public void clickRelase() {
- //重新加载
- if (ContextUtil.getNetWorkState()) {
- mView.destroyWeb();
- mErrorViewDialog.dismiss();
- mView.resumeWebView();
- openWeb(mView.getActivity().getIntent());
- } else {
- ToastUtil.showToast("请检查网络连接状况");
- }
- }
- @Override
- public void clickExit() {
- //退出
- mErrorViewDialog.dismiss();
- mView.getActivity().finish();
- EApplication.clearActivity();
- }
- });
- mErrorViewDialog.setCancelable(false);
- mErrorViewDialog.setContentView(mErrorView);
- Window dialogWindow = mErrorViewDialog.getWindow();
- dialogWindow.setGravity(Gravity.CENTER);
- dialogWindow.getDecorView().setPadding(0, 0, 0, 0);
- dialogWindow.getDecorView().setBackgroundColor(Color.TRANSPARENT);
- WindowManager m = mView.getActivity().getWindowManager();
- Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
- WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
- p.height = (int) (d.getHeight() * 1);
- p.width = WindowManager.LayoutParams.MATCH_PARENT;
- p.horizontalMargin = 0;
- dialogWindow.setAttributes(p);
- }
- if (!mErrorViewDialog.isShowing()) {
- mErrorViewDialog.show();
- }
- }
- public static Handler mPersenterHandler = new Handler(new Handler.Callback() {
- @Override
- public boolean handleMessage(Message msg) {
- switch (msg.what) {
- case WECHAT_LOGIN:
- // Logger.e("微信用户信息:" + msg.obj.toString());
- mView.loadJsMehtod("WeChatLoginSuccess('" + msg.obj.toString() + "')");
- break;
- case PAY_RESULT:
- mView.loadJsMehtod("commonPayResult(" + msg.obj.toString() + ")");
- Intent intent_restart = new Intent(ContextUtil.CLOSE_ACTIVITY_PAY);
- mView.getActivity().sendBroadcast(intent_restart);
- break;
- }
- return false;
- }
- });
- }
- interface MainIPersenter extends BasePersenter {
- void initWebView(WebView webview);
- JsInterfaces getJsInterfaces();
- EfunboxPayInterfaces getPayInterfaces();
- void openWeb(Intent intent);
- boolean onKeyDown(int keycode, KeyEvent event);
- boolean onKeyUp(int keycode, KeyEvent event);
- void onActivityResult(int requestCode, int resultCode, @Nullable Intent data);
- }
|