123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- package com.edufound.reader.presenter;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.IBinder;
- import android.view.KeyEvent;
- import android.view.MotionEvent;
- import android.view.View;
- import com.chivox.aiengine.EvalResult;
- import com.edufound.reader.R;
- import com.edufound.reader.adapter.SlideVideoAdapter;
- import com.edufound.reader.application.EApplication;
- import com.edufound.reader.base.BasePresenter;
- import com.edufound.reader.bean.SlideVideoBean;
- import com.edufound.reader.contract.MainContract;
- import com.edufound.reader.cusview.RvListJzvdStd;
- import com.edufound.reader.model.MainModel;
- import com.edufound.reader.services.RecordServices;
- import com.edufound.reader.util.CToast;
- import com.edufound.reader.videoutil.OnViewPagerListener;
- import com.edufound.reader.videoutil.ViewPagerLayoutManager;
- import com.orhanobut.logger.Logger;
- import java.util.ArrayList;
- import java.util.List;
- import androidx.recyclerview.widget.LinearLayoutManager;
- import androidx.recyclerview.widget.OrientationHelper;
- import androidx.recyclerview.widget.RecyclerView;
- import cn.jzvd.Jzvd;
- public class MainPresenter extends BasePresenter<MainContract.View> implements MainContract.Presenter {
- MainModel mModel;
- private ViewPagerLayoutManager mViewPagerLayoutManager;
- private int mCurrentPosition = -1;
- RecordServices mRecordServices;
- /*
- * 测试数据
- * */
- List<SlideVideoBean> mDataList;
- SlideVideoAdapter mAdapter;
- public MainPresenter() {
- mModel = new MainModel();
- }
- @Override
- public void initVideoList(RecyclerView rv) {
- /*
- * 测试数据
- * */
- mDataList = new ArrayList<>();
- for (int i = 0; i < 5; i++) {
- SlideVideoBean bean = new SlideVideoBean();
- if (i % 2 == 0) {
- bean.videoUrl = "http://reader-wx.ai160.com/vs2m-m3u8/reader/053/05303004/05303004038/05303004038.m3u8";
- bean.videoTitle = "m3u8视频";
- } else {
- bean.videoUrl = "https://reader-wx.ai160.com/reader/resource/video/1610961140479648.mp4";
- bean.videoTitle = "https--MP4视频";
- }
- mDataList.add(bean);
- }
- rv.setLayoutManager(new LinearLayoutManager(mView.getActivity()));
- rv.setNestedScrollingEnabled(false);
- mViewPagerLayoutManager = new ViewPagerLayoutManager(mView.getActivity(), OrientationHelper.VERTICAL);
- rv.setLayoutManager(mViewPagerLayoutManager);
- mAdapter = new SlideVideoAdapter(mView.getActivity(), mDataList);
- rv.setAdapter(mAdapter);
- mViewPagerLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {
- @Override
- public void onInitComplete() {
- //自动播放第一条
- autoPlayVideo(rv);
- }
- @Override
- public void onPageRelease(boolean isNext, int position) {
- if (mCurrentPosition == position) {
- Jzvd.releaseAllVideos();
- }
- }
- @Override
- public void onPageSelected(int position, boolean isBottom) {
- // if (mCurrentPosition == position) {
- // Logger.e("mCurrentPosition == position..return了");
- // return;
- // }
- autoPlayVideo(rv);
- mCurrentPosition = position;
- }
- });
- rv.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
- @Override
- public void onChildViewAttachedToWindow(View view) {
- scrollToNextFunction(rv, false);
- }
- @Override
- public void onChildViewDetachedFromWindow(View view) {
- Jzvd jzvd = view.findViewById(R.id.slidevideo_video);
- if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource != null &&
- jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl())) {
- if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) {
- Jzvd.releaseAllVideos();
- }
- }
- }
- });
- }
- private void autoPlayVideo(RecyclerView rv) {
- if (rv == null || rv.getChildAt(0) == null) {
- return;
- }
- RvListJzvdStd player = rv.getChildAt(0).findViewById(R.id.slidevideo_video);
- if (player != null) {
- if (player.state == Jzvd.STATE_PLAYING) {
- //正在播放
- } else {
- player.startVideoAfterPreloading();
- player.setVideoCallBack(new RvListJzvdStd.VideoCallBack() {
- @Override
- public void onComplete() {
- scrollToNextFunction(rv, true);
- }
- });
- }
- }
- }
- private void scrollToNextFunction(RecyclerView rv, boolean needScroll) {
- //获取当前显示的View 的数据
- int childCount = rv.getChildCount();
- //获取最后一具 Item 对应的View
- View childAt = rv.getChildAt(childCount - 1);
- //获取当前军舰中显示的最后一个 Item 的位置 Postion
- int childLayoutPosition = rv.getChildLayoutPosition(childAt);
- //如果不是最后一个就向下滑动
- if (childLayoutPosition < rv.getAdapter().getItemCount() - 2) {
- if (needScroll) {
- rv.smoothScrollToPosition(childLayoutPosition + 1);
- }
- } else {
- // Toast.makeText(this, "已滑动到底部了", Toast.LENGTH_LONG).show();
- // CToast.makeText(mView.getActivity(), "滑动到最后一个啦", 3000).show();
- Logger.e("倒数第二个,添加数据");
- mAdapter.addMored(mDataList);
- }
- }
- @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);
- }
- }
- @Override
- public void startRecord(String name, String refText) {
- mRecordServices.startRecord(mView.getActivity(), name, refText);
- }
- @Override
- public void stopRecord() {
- mRecordServices.stopRecord();
- }
- public void rePlayRecord() {
- mRecordServices.replayRecord();
- }
- @Override
- public void activityDestroy() {
- mRecordServices.unbindService(recordServicesConn);
- if (mRecordServices != null) {
- mView.getActivity().unbindService(recordServicesConn);
- }
- }
- @Override
- public void activityPause() {
- }
- @Override
- public void activityResume() {
- }
- private ServiceConnection recordServicesConn = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
- mRecordServices = ((RecordServices.RecordServicesBind) iBinder).getService();
- mRecordServices.setRecordCallBack(new RecordServices.RecordCallBack() {
- @Override
- public void onRecordStart() {
- Logger.e("录音开始");
- }
- @Override
- public void onRecordStop(int type, String tokenId, EvalResult result) {
- Logger.e("录音停止");
- }
- @Override
- public void onRecordCancel() {
- Logger.e("录音取消");
- }
- });
- }
- @Override
- public void onServiceDisconnected(ComponentName componentName) {
- mRecordServices = null;
- }
- };
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- EApplication.killAppProcess(mView.getActivity());
- return true;
- }
- return true;
- }
- }
|