123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- package com.edufound.reader.presenter;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
- import android.view.View;
- import android.widget.FrameLayout;
- import android.widget.Toast;
- import com.chivox.aiengine.EvalResult;
- import com.edufound.reader.apiserver.UserApiServerImpl;
- import com.edufound.reader.base.BasePresenter;
- import com.edufound.reader.bean.ChannelCodeEnum;
- import com.edufound.reader.bean.HttpResultBean;
- import com.edufound.reader.bean.RecordResultBean;
- import com.edufound.reader.bean.ThroughType;
- import com.edufound.reader.bean.UserEventEnum;
- import com.edufound.reader.bean.UserRecordBean;
- import com.edufound.reader.botsdk.BotRegisterListener;
- import com.edufound.reader.contract.RecordContract;
- import com.edufound.reader.cusview.RvListJzvdStd;
- import com.edufound.reader.listener.PopupRecordStatusListener;
- import com.edufound.reader.model.RecordModel;
- import com.edufound.reader.popwindow.PopWindowUtil;
- import com.edufound.reader.services.RecordServices;
- import com.edufound.reader.util.Consts;
- import com.edufound.reader.util.DataCleanManager;
- import com.edufound.reader.util.GlideUtils;
- import com.edufound.reader.util.ThroughUtil;
- import com.edufound.reader.videoutil.JZMediaIjk;
- import com.google.gson.reflect.TypeToken;
- import com.okhttplib.HttpInfo;
- import com.okhttplib.callback.Callback;
- import com.orhanobut.logger.Logger;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.io.IOException;
- import cn.jzvd.JZDataSource;
- import cn.jzvd.Jzvd;
- import cn.jzvd.JzvdStd;
- public class RecordPresenter extends BasePresenter<RecordContract.View> implements RecordContract.Presenter {
- RecordServices mRecordServices;
- RecordModel mModel;
- String mReadId = null;
- String exampleUrl = "";
- String recordUrl = "";
- UserRecordBean.UserRead mRecordUserRead;
- //READ是用户在读,example是厅官方
- String playType = "EXAMPLE";
- String backModel = "";
- UserApiServerImpl mUserApi;
- boolean isRecording = false;
- public RecordPresenter() {
- this.mModel = new RecordModel();
- mUserApi = new UserApiServerImpl();
- }
- @Override
- public void createVideoPlayer() {
- mView.showLoading();
- mView.getJZVideoView().setVideoCallBack(new RvListJzvdStd.VideoCallBack() {
- @Override
- public void onComplete() {
- onVideoCompletion();
- }
- @Override
- public void onError(int what, int extra) {
- onVideoError(what, extra);
- }
- @Override
- public void onInfo(int what, int extra) {
- onVideoInfoListener(what, extra);
- }
- @Override
- public void onPrepared() {
- }
- });
- }
- @Override
- public void getReadInfo(Intent intent) {
- if (ThroughUtil.mThroughTypeBean != null && ThroughUtil.mThroughTypeBean.getmThroughType().equals(ThroughType.TYPEA.getTypeCode())) {
- mReadId = ThroughUtil.mThroughTypeBean.getExampleId();
- backModel = ThroughUtil.mThroughTypeBean.getBackModel();
- } else {
- Bundle bundle = intent.getBundleExtra("params_bundle");
- if (bundle != null) {
- mReadId = bundle.getString("exampleId");
- }
- }
- if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
- BotRegisterListener.uploadUsage("1", mReadId, "record", "vip");
- }
- mModel.getReadInfo(mView.getActivity(), mReadId, new Callback() {
- @Override
- public void onSuccess(HttpInfo info) throws IOException {
- HttpResultBean<UserRecordBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserRecordBean>>() {
- }.getType());
- mRecordUserRead = bean.getData().getUserRead();
- exampleUrl = mRecordUserRead.getVideoPath();
- recordUrl = mRecordUserRead.getOriginVideo();
- GlideUtils.loadImageSizeKipMemoryCache(mView.getActivity(), mRecordUserRead.getCoverImg(), mView.getJZVideoView().posterImageView);
- mView.getJZVideoView().setUp(new JZDataSource(exampleUrl), JzvdStd.SCREEN_FULLSCREEN, JZMediaIjk.class, mRecordUserRead.getId());
- }
- @Override
- public void onFailure(HttpInfo info) throws IOException {
- Logger.e("获取录音的音频视频失败参数:" + info.getParams());
- Logger.e("获取录音的音频视频失败:" + info.getRetDetail());
- }
- });
- }
- @Override
- public String getExampleUrl() {
- return exampleUrl;
- }
- @Override
- public String getRecordUrl() {
- return recordUrl;
- }
- @Override
- public void clickExampleUI() {
- mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_EXAMPLE.getEvent());
- playType = "EXAMPLE";
- initVideoPlayer(exampleUrl);
- // mView.getJZVideoView().posterImageView.setVisibility(View.INVISIBLE);
- mView.getJZVideoView().setHideAllUI(false);
- mView.getJZVideoView().startVideoAfterPreloading();
- }
- @Override
- public String getBackModel() {
- return backModel;
- }
- @Override
- public void initVideoPlayer(String url) {
- mView.getJZVideoView().setUp(new JZDataSource(url), JzvdStd.SCREEN_FULLSCREEN, JZMediaIjk.class, mReadId);
- }
- @Override
- public void onVideoCompletion() {
- if (playType.equals("READ")) {
- mView.refRecordStatus();
- }
- }
- @Override
- public void onVideoError(int what, int extra) {
- switch (what) {
- case -10000:
- // mVideoHandler.sendEmptyMessage(DISCONNECT_NETWORK);
- // Toast.makeText(mView.getActivity(), "网络出现异常", Toast.LENGTH_SHORT).show();
- // CusToast.getInstance(mView.getActivity()).show("网络出现异常",2000);
- Toast.makeText(mView.getActivity(), "网络出现异常", Toast.LENGTH_SHORT).show();
- mView.getActivity().finish();
- break;
- default:
- mView.getJZVideoView().pauseVideo();
- mView.getJZVideoView().reset();
- mView.getJZVideoView().onStatePreparingPlaying();
- Toast.makeText(mView.getActivity(), "视频异常--what:" + what + "--extra:" + extra, Toast.LENGTH_SHORT).show();
- // CusToast.getInstance(mView.getActivity()).show("视频异常--what:" + what + "--extra:" + extra,2000);
- mView.getActivity().finish();
- break;
- }
- }
- @Override
- public void onVideoInfoListener(int what, int extra) {
- if (mView == null || mView.getJZVideoView() == null) {
- return;
- }
- switch (what) {
- case Jzvd.STATE_PREPARING_PLAYING:
- //已经开始播放了
- if (playType.equals("READ") && (mRecordServices.getIsRecording() == false)) {
- mRecordServices.startRecord(mView.getActivity(), mRecordUserRead.getId(), mRecordUserRead.getLessonText());
- mView.getJZVideoView().setCanPause(false);
- }
- break;
- }
- }
- @Override
- public void addVideoController(FrameLayout frame) {
- // mVideoController = (FrameLayout) LayoutInflater.from(mView.getActivity()).inflate(R.layout.player_controller, null);
- // frame.addView(mVideoController);
- // frame.addView(new FullScreenVideoController(mView.getActivity()).getController());
- }
- @Override
- public void startRecord() {
- mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_READING.getEvent());
- mView.getJZVideoView().setHideAllUI(false);
- mView.hasShowOtherUI(View.INVISIBLE);
- playType = "READ";
- initVideoPlayer(recordUrl);
- mView.getJZVideoView().startVideo();
- }
- @Override
- public void stopRecord() {
- mView.hasShowOtherUI(View.VISIBLE);
- mView.getJZVideoView().setHideAllUI(true);
- mView.getJZVideoView().reset();
- mRecordServices.stopRecord();
- // mView.getJZVideoView().setCanPause(true);
- // initVideoPlayer(recordUrl);
- mView.getJZVideoView().posterImageView.setVisibility(View.VISIBLE);
- }
- @Override
- public void rePlayRecord() {
- mRecordServices.replayRecord();
- }
- @Override
- public void activityDestroy() {
- if (ThroughUtil.mThroughTypeBean != null && ThroughUtil.mThroughTypeBean.getmThroughType().equals(ThroughType.TYPEA.getTypeCode())) {
- ThroughUtil.mThroughTypeBean = null;
- }
- mView.getJZVideoView().pauseVideo();
- mRecordServices.stopRecord();
- mRecordServices.desrotyRecord();
- // Consts.getmRecordSaveFile()
- if (Consts.getmRecordSaveFile() != null && (!Consts.getmRecordSaveFile().equals(""))) {
- DataCleanManager.delFileBeforeTime(Consts.getmRecordSaveFile().getAbsolutePath().substring(0, Consts.getmRecordSaveFile().getAbsolutePath().lastIndexOf("/")), 0);
- }
- // Jzvd.releaseAllVideos();
- // Intent intent = new Intent(BackPageReceiver.BACK_HOME_REF_VIDEO_ITEM);
- //// intent.putExtra("recordId", );
- // mView.getActivity().sendBroadcast(intent);
- mView.getJZVideoView().removeAllViews();
- recordServicesConn = null;
- mRecordServices = null;
- System.gc();
- }
- @Override
- public void activityPause() {
- }
- @Override
- public void activityResume() {
- }
- @Override
- public void showRecordStatusWindow(RecordResultBean bean, UserRecordBean.UserRead userread) {
- PopWindowUtil.showRecordStatusWindow(mView.getActivity(), mView.getRootView(), bean, userread, new PopupRecordStatusListener() {
- @Override
- public void clickReRecord() {
- // Toast.makeText(mView.getActivity(), "重新录制", Toast.LENGTH_SHORT).show();
- PopWindowUtil.hidePopupWindow();
- mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_RERECORDING.getEvent());
- mView.startRecordStatus();
- }
- @Override
- public void clickUploadingErrorBtn() {
- // Toast.makeText(mView.getActivity(), "上传失败按钮", Toast.LENGTH_SHORT).show();
- }
- });
- }
- @Override
- public void bindRecordServices() {
- if (mRecordServices == null) {
- Intent intent = new Intent();
- intent.setClass(mView.getActivity(), RecordServices.class);
- mView.getActivity().bindService(intent, recordServicesConn, Context.BIND_AUTO_CREATE);
- }
- }
- private ServiceConnection recordServicesConn = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
- mRecordServices = ((RecordServices.RecordServicesBind) iBinder).getService();
- mRecordServices.initChiVox();
- mRecordServices.setRecordCallBack(new RecordServices.RecordCallBack() {
- @Override
- public void onRecordStart() {
- Logger.e("录音开始");
- }
- @Override
- public void onRecordResult(String tokenId, EvalResult result) {
- Logger.e("录音完成");
- try {
- JSONObject jsonObject = new JSONObject(result.text()).getJSONObject("result");
- //完全评分
- int overall = Integer.valueOf(jsonObject.getString("overall"));
- //速度
- int speed = Integer.valueOf(jsonObject.getJSONObject("fluency").getString("overall"));
- //声调
- int tone = Integer.valueOf(jsonObject.getString("tone"));
- //完整度
- int integrity = Integer.valueOf(jsonObject.getString("integrity"));
- //正确率
- int accuracy = Integer.valueOf(jsonObject.getString("accuracy"));
- mView.getJZVideoView().post(new Runnable() {
- @Override
- public void run() {
- showRecordStatusWindow(new RecordResultBean(overall, speed, tone, integrity, accuracy), mRecordUserRead);
- }
- });
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void onRecordCancel() {
- Logger.e("录音取消");
- }
- @Override
- public void onRecordError(String tokenId, EvalResult result) {
- //Toast.makeText(mView.getActivity(), "录音失败:" + result.text(), Toast.LENGTH_SHORT).show();
- // CusToast.getInstance(mView.getActivity()).show("录音失败", 2000);
- Logger.e("----------------录音失败了-------------------------");
- Toast.makeText(Consts.getmApplicAtion(), "录音失败", Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onRecordStop() {
- Logger.e("录音停止");
- }
- });
- }
- @Override
- public void onServiceDisconnected(ComponentName componentName) {
- if (mView != null) {
- mRecordServices.unbindService(recordServicesConn);
- mView.getActivity().unbindService(recordServicesConn);
- }
- mRecordServices = null;
- }
- };
- }
|