123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657 |
- package com.edufound.android.xyyf.main;
- import android.annotation.SuppressLint;
- import android.annotation.TargetApi;
- 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.media.MediaMetadataRetriever;
- import android.media.ThumbnailUtils;
- import android.os.Build;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.os.Process;
- import android.provider.MediaStore;
- import android.support.annotation.Nullable;
- import android.view.Display;
- import android.view.Gravity;
- import android.view.KeyEvent;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- 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 android.widget.FrameLayout;
- import android.widget.TextView;
- import com.cncoderx.wheelview.OnWheelChangedListener;
- import com.cncoderx.wheelview.WheelView;
- import com.edufound.android.xyyf.R;
- import com.edufound.android.xyyf.application.EApplication;
- import com.edufound.android.xyyf.base.BaseModel;
- import com.edufound.android.xyyf.base.BasePersenter;
- import com.edufound.android.xyyf.interfaces.EfunboxPayInterfaces;
- import com.edufound.android.xyyf.interfaces.JsInterfaces;
- import com.edufound.android.xyyf.util.ContextUtil;
- import com.edufound.android.xyyf.util.DeviceUtil;
- import com.edufound.android.xyyf.util.DeviceUuidFactory;
- import com.edufound.android.xyyf.util.Logger;
- import com.edufound.android.xyyf.util.OKHttpUtil;
- import com.edufound.android.xyyf.util.SPutil;
- import com.edufound.android.xyyf.util.ToastUtil;
- import com.edufound.android.xyyf.view.ErrorView;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.HashMap;
- import java.util.List;
- import okhttp3.Call;
- import okhttp3.Callback;
- import okhttp3.Response;
- 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 postUserTime(long time) {
- try {
- OKHttpUtil.getInstance().doGetSync("?time=" + time, new Callback() {
- @Override
- public void onFailure(Call call, IOException e) {
- Logger.e("postUserTime---onFailure---");
- }
- @Override
- public void onResponse(Call call, Response response) throws IOException {
- Logger.e("postUserTime---onResponse---");
- EApplication.clearActivity();
- android.os.Process.killProcess(Process.myPid());
- }
- });
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @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;
- }
- });
- @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
- public Bitmap createVideoThumbnail(String url, int width, int height) {
- Bitmap bitmap = null;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- int kind = MediaStore.Video.Thumbnails.MINI_KIND;
- try {
- if (Build.VERSION.SDK_INT >= 14) {
- retriever.setDataSource(url, new HashMap<String, String>());
- } else {
- retriever.setDataSource(url);
- }
- bitmap = retriever.getFrameAtTime(1000);
- } catch (IllegalArgumentException ex) {
- // Assume this is a corrupt video file
- } catch (RuntimeException ex) {
- // Assume this is a corrupt video file.
- } finally {
- try {
- retriever.release();
- } catch (RuntimeException ex) {
- // Ignore failures while cleaning up.
- }
- }
- if (kind == MediaStore.Images.Thumbnails.MICRO_KIND && bitmap != null) {
- bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
- ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
- }
- return bitmap;
- }
- int getYear = 0;
- int getMonth = 0;
- int getDay = 0;
- int year_index = 0;
- List<String> view_y_list = new ArrayList<>();
- List<String> view_m_list = new ArrayList<>();
- List<String> view_d_list1 = new ArrayList<>();
- List<String> view_d_list2 = new ArrayList<>();
- List<String> view_d_list3 = new ArrayList<>();
- List<String> view_d_list4 = new ArrayList<>();
- @Override
- public void showDateView(final int show_type) {
- mView.getRootView().post(new Runnable() {
- @Override
- public void run() {
- Calendar selectedDate = Calendar.getInstance();
- // 获取年
- int year = selectedDate.get(Calendar.YEAR);
- // 获取月
- int month = selectedDate.get(Calendar.MONTH);
- // 获取日
- int date = selectedDate.get(Calendar.DATE);
- if (view_y_list.size() == 0) {
- for (int i = year - 50; i < year + 150; i++) {
- year_index++;
- if (i < year) {
- year_index++;
- }
- view_y_list.add(String.valueOf(i) + "年");
- }
- for (int i = 0; i < 12; i++) {
- view_m_list.add(String.valueOf(i + 1) + "月");
- }
- for (int i = 0; i < 31; i++) {
- view_d_list1.add(String.valueOf(i + 1) + "日");
- }
- for (int i = 0; i < 30; i++) {
- view_d_list2.add(String.valueOf(i + 1) + "日");
- }
- for (int i = 0; i < 28; i++) {
- view_d_list3.add(String.valueOf(i + 1) + "日");
- }
- for (int i = 0; i < 29; i++) {
- view_d_list4.add(String.valueOf(i + 1) + "日");
- }
- }
- final FrameLayout layout = (FrameLayout) LayoutInflater.from(mView.getActivity()).inflate(R.layout.date_view, null);
- layout.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
- TextView cancel = layout.findViewById(R.id.date_cancel);
- TextView ok = layout.findViewById(R.id.date_ok);
- TextView title = layout.findViewById(R.id.date_title);
- cancel.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mView.getRootView().removeView(layout);
- }
- });
- ok.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mView.loadJSMehtodPost("getAndroidDate('" + getYear + "','" + getMonth + "','" + getDay + "')");
- mView.getRootView().removeView(layout);
- }
- });
- WheelView view_y = layout.findViewById(R.id.date_whell_y);
- WheelView view_m = layout.findViewById(R.id.date_whell_m);
- final WheelView view_d = layout.findViewById(R.id.date_whell_d);
- if (show_type != 1) {
- view_y.setVisibility(View.GONE);
- title.setVisibility(View.GONE);
- }
- view_y.setEntries(view_y_list);
- view_m.setEntries(view_m_list);
- view_y.setOnWheelChangedListener(new OnWheelChangedListener() {
- @Override
- public void onChanged(WheelView view, int oldIndex, int newIndex) {
- CharSequence text = view.getItem(newIndex);
- // Logger.e("WheelView:" + String.format("index: %d, text: %s", newIndex, text));
- getYear = Integer.valueOf(text.subSequence(0, text.toString().indexOf("年")).toString());
- changeDay(view_d);
- }
- });
- view_m.setOnWheelChangedListener(new OnWheelChangedListener() {
- @Override
- public void onChanged(WheelView view, int oldIndex, int newIndex) {
- CharSequence text = view.getItem(newIndex);
- // Logger.e("WheelView:" + String.format("index: %d, text: %s", newIndex, text));
- getMonth = Integer.valueOf(text.subSequence(0, text.toString().indexOf("月")).toString());
- changeDay(view_d);
- }
- });
- view_d.setOnWheelChangedListener(new OnWheelChangedListener() {
- @Override
- public void onChanged(WheelView view, int oldIndex, int newIndex) {
- CharSequence text = view.getItem(newIndex);
- // Logger.e("WheelView:" + String.format("index: %d, text: %s", newIndex, text));
- getDay = Integer.valueOf(text.subSequence(0, text.toString().indexOf("日")).toString());
- }
- });
- view_y.setCurrentIndex(year_index);
- view_m.setCurrentIndex(month);
- view_d.setCurrentIndex(date - 1);
- mView.getRootView().addView(layout);
- }
- });
- }
- void changeDay(WheelView view_d) {
- switch (getMonth) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- view_d.setEntries(view_d_list1);
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- view_d.setEntries(view_d_list2);
- break;
- case 2:
- //平年
- if ((getYear % 4 == 0 && getYear % 100 != 0)
- || (getYear % 400 == 0)) {
- // System.out.println(input + "年闰年");
- view_d.setEntries(view_d_list4);
- } else {
- // System.out.println(input + "年平年");
- view_d.setEntries(view_d_list3);
- }
- break;
- }
- }
- }
- 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);
- void postUserTime(long time);
- void showDateView(int type);
- }
|