package com.edufound.reader.presenter; import android.content.Context; import android.content.Intent; import android.graphics.Outline; import android.text.TextUtils; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.Switch; import android.widget.Toast; import com.edufound.reader.R; import com.edufound.reader.activity.WebActivity; import com.edufound.reader.adapter.SlideVideoAdapter; import com.edufound.reader.apiserver.UserApiServerImpl; import com.edufound.reader.base.BaseActivity; import com.edufound.reader.base.BasePresenter; import com.edufound.reader.bean.ChannelCodeEnum; import com.edufound.reader.bean.FavoritesBean; import com.edufound.reader.bean.HttpResultBean; import com.edufound.reader.bean.HttpResultDataListBean; import com.edufound.reader.bean.ThroughType; import com.edufound.reader.bean.UserRecordBean; import com.edufound.reader.contract.RecommendFragmentContract; import com.edufound.reader.cusview.CusToast; import com.edufound.reader.cusview.RvListJzvdStd; import com.edufound.reader.model.RecommendFragmentModel; import com.edufound.reader.receiver.BackPageReceiver; import com.edufound.reader.util.Consts; import com.edufound.reader.util.EfunboxUtil; import com.edufound.reader.util.MMKVEncodeKey; import com.edufound.reader.util.MMKVUtil; import com.edufound.reader.util.SizeUtils; import com.edufound.reader.util.ThroughUtil; import com.edufound.reader.videoutil.OnViewPagerListener; import com.edufound.reader.videoutil.ViewPagerLayoutManager; import com.google.gson.reflect.TypeToken; import com.okhttplib.HttpInfo; import com.okhttplib.callback.Callback; import com.orhanobut.logger.Logger; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.OrientationHelper; import androidx.recyclerview.widget.RecyclerView; import cn.jzvd.Jzvd; import cn.jzvd.JzvdStd; public class RecommendFragmentPresenter extends BasePresenter implements RecommendFragmentContract.Presenter { Context mContext; RecommendFragmentModel mModel; private ViewPagerLayoutManager mViewPagerLayoutManager; private int mCurrentPosition = 0; List mDataList; SlideVideoAdapter mAdapter; int loadType = 0; int mTotalSize = 20; int mPageIndex = 1; boolean loadOver = false; UserApiServerImpl mUserApi; public RecommendFragmentPresenter(Context context) { mModel = new RecommendFragmentModel(); mUserApi = new UserApiServerImpl(); mContext = context; if (mDataList == null) { mDataList = new ArrayList<>(); } } public UserApiServerImpl getUserApi() { return mUserApi; } @Override public void initVideoList(RecyclerView rv, int type, int startPosition) { rv.setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRoundRect(SizeUtils.dp2px(mContext, 5), 0, view.getWidth() - SizeUtils.dp2px(mContext, 5), view.getHeight(), SizeUtils.dp2px(mContext, 40)); } }); rv.setClipToOutline(true); loadType = type; if (type == 0) { //推荐的接口 initVideoDate(rv, startPosition); mView.getRootView().post(new Runnable() { @Override public void run() { getRecommendDataList(); } }); } else if (type == 1) { //关注的所有人的所有视频 initVideoDate(rv, startPosition); mView.getRootView().post(new Runnable() { @Override public void run() { getMyFollowAllVideo(); } }); } else if (type == 2) { //上级页面传的json mDataList = ((BaseActivity) mView.getActivity()).getGson().fromJson(mView.getDataJson(), new TypeToken>() { }.getType()); initVideoDate(rv, startPosition); mTotalSize = mDataList.size(); mView.getRootView().setVisibility(View.VISIBLE); mView.showFirstIntoView(); mView.getRootView().post(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); } }); } } public void initVideoDate(RecyclerView rv, int startPosition) { 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); fragmentResume(rv); } @Override public void onPageRelease(boolean isNext, int position) { if (mCurrentPosition == position) { Jzvd.releaseAllVideos(); } checkIsVip(); } @Override public void onPageSelected(int position, boolean isBottom) { // if (mCurrentPosition == position) { // Logger.e("mCurrentPosition == position..return了"); // return; // } ((BaseActivity) mView.getActivity()).removeFirstTipView(); autoPlayVideo(rv); mCurrentPosition = position; if (mCurrentPosition == 0) { Toast.makeText(mContext, "到顶了", Toast.LENGTH_SHORT).show(); } else if (mCurrentPosition == (mTotalSize - 1)) { Toast.makeText(mContext, "到底了", Toast.LENGTH_SHORT).show(); } // if (mAdapter.getItemType(mCurrentPosition).equals("READ")) { // mView.showAllUi(); // } else if (mAdapter.getItemType(mCurrentPosition).equals("EXAMPLE")) { // mView.eventHideUi(); // } else { // // } // Logger.e("mCurrentPosition:" + mCurrentPosition); // Logger.e("mDataList:" + mDataList.size()); scrollToNextFunction(rv, false); } @Override public void onChildViewDetachedFromWindow(View view) { Jzvd jzvd = view.findViewById(R.id.slidevideo_video); Switch switcss = view.findViewById(R.id.slidevideo_video_switch); switcss.setChecked(false); 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(); } } } }); if (startPosition > 0) { rv.scrollToPosition(startPosition); mCurrentPosition = startPosition; } } @Override public int getCurPlayVideoIndex() { return mCurrentPosition; } @Override public Object getCurVideoExampleId() { if (mDataList != null && mDataList.size() > 0) { return mDataList.get(mCurrentPosition).getUserRead().getExampleId(); } return -1; } @Override public void fragmentPause(RecyclerView rv) { Jzvd.releaseAllVideos(); JzvdStd.goOnPlayOnPause(); } @Override public void fragmentResume(RecyclerView rv) { checkIsVip(); mView.getRootView().postDelayed(new Runnable() { @Override public void run() { if (rv.getChildCount() > 0) { RvListJzvdStd player = rv.getChildAt(0).findViewById(R.id.slidevideo_video); if (player == null) { Logger.e("竟然是空的"); } player.startVideoAfterPreloading(); } } }, 800); } public void checkIsVip() { if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) { if (Consts.getmConstsBaiDuUserBean() != null) { mView.getisViewUI().setVisibility(View.INVISIBLE); } } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) || Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) { mView.getisViewUI().setEnabled(false); mView.getisViewUI().postDelayed(new Runnable() { @Override public void run() { if (Consts.isIsYFVip()) { mView.getisViewUI().setVisibility(View.INVISIBLE); } mView.getisViewUI().setEnabled(true); } }, 500); } } @Override public void getRecommendDataList() { if (mDataList != null && mDataList.size() >= mTotalSize) { loadOver = true; // Toast.makeText(mContext, "没有更多了", Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE))) { //如果是空的,就是没选择过年纪。然后给个默认的一年级 //PRESCHOOL,FIRST_GRADE,SECOND_GRADE,THIRD_GRADE,FOURTH_GRADE // MMKVUtil.getInstance().encode(MMKVEncodeKey.USER_GRADE, "FIRST_GRADE"); } String grade = MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE); if (TextUtils.isEmpty(grade)) { grade = EfunboxUtil.getEnumByCNGrade("一年级"); } if (Consts.getmConstsUserBean() == null) { grade = EfunboxUtil.getEnumByCNGrade("一年级"); } mModel.getRecommendList(mView.getActivity(), grade, mPageIndex, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean> bean = info.getRetDetail(new TypeToken>>() { }.getType()); if (ThroughUtil.mThroughType.equals(ThroughType.TYPEB.getTypeCode())) { //要根据ID获取视频并且放到第一个 for (int i = 0; i < bean.getData().getList().size(); i++) { if (bean.getData().getList().get(i).getUserRead().getId().equals(ThroughUtil.mThroughTypeB.getExampleId())) { //找到了。要放到第一个 Logger.e("bean.getData().getList().get(i).getUserRead().getId()"); } } } mAdapter.addMored(bean.getData().getList()); // mDataList.addAll(bean.getData().getList()); mTotalSize = Integer.valueOf(bean.getData().getTotalSize()); mView.getRootView().post(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); mPageIndex++; mView.getRootView().setVisibility(View.VISIBLE); mView.showFirstIntoView(); } }); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("info:" + info.getRetDetail()); Logger.e("info-getRetCode:" + info.getRetCode()); //getRetCode==6 if (info.getRetCode() == 6) { getRecommendDataList(); } // CusToast.getInstance(mView.getActivity()).show(info.getRetDetail(), 3000); // Toast.makeText(mView.getActivity(), info.getRetDetail(), Toast.LENGTH_SHORT).show(); } }); } @Override public void doFavorites(UserRecordBean.UserRead userRead) { Map map = new HashMap<>(); map.put("targetCode", userRead.getId()); String json = ((BaseActivity) mView.getActivity()).getGson().toJson(map); mModel.doFavorites(mView.getActivity(), json, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); Intent intent = new Intent(); if (bean.getData().getStatus().equals("DEL")) { mDataList.get(mCurrentPosition).setFavorites(false); mDataList.get(mCurrentPosition).setFavoritesBean(null); mView.setFavorites(false); intent.setAction(BackPageReceiver.BACK_HOME_REMOVE_VIDEO_ITEM); } else if (bean.getData().getStatus().equals("NORMAL")) { mDataList.get(mCurrentPosition).setFavorites(true); mDataList.get(mCurrentPosition).setFavoritesBean(null); mView.setFavorites(true); intent.setAction(BackPageReceiver.BACK_HOME_ADD_VIDEO_ITEM); } intent.putExtra("position", String.valueOf(mCurrentPosition)); mContext.sendBroadcast(intent); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("收藏/取消收藏接口失败:" + info.getRetDetail()); } }); } @Override public void doLike(UserRecordBean.UserRead userRead) { mModel.doLick(mView.getActivity(), userRead.getId(), new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); mView.setLikes(bean.getData()); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("failure---info.getRetDetail:" + info.getRetDetail()); } }); } @Override public void activityDestory() { mView.clearRecyclerView(); mDataList = null; mAdapter = null; Jzvd.releaseAllVideos(); Jzvd.backPress(); } @Override public void getRecordInfoById(String id) { if (mView == null) { return; } mModel.getRecordInfoById(mView.getActivity(), id, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); mDataList.set(mCurrentPosition, bean.getData()); mView.getRootView().post(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); } }); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("获取单独的失敗了:" + info.getRetDetail()); } }); } @Override public void getMyFollowAllVideo() { if (mDataList != null && mDataList.size() >= mTotalSize) { loadOver = true; // Toast.makeText(mContext, "没有更多了", Toast.LENGTH_SHORT).show(); return; } mModel.getMyFollowAllVideo(mView.getActivity(), mPageIndex, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean> bean = info.getRetDetail(new TypeToken>>() { }.getType()); mAdapter.addMored(bean.getData().getList()); // mDataList.addAll(bean.getData().getList()); mTotalSize = Integer.valueOf(bean.getData().getTotalSize()); mView.getRootView().post(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); mPageIndex++; mView.getRootView().setVisibility(View.VISIBLE); mView.showFirstIntoView(); } }); } @Override public void onFailure(HttpInfo info) throws IOException { } }); } private void autoPlayVideo(RecyclerView rv) { if (rv == null || rv.getChildAt(0) == null) { return; } if (mAdapter.getItemType(mCurrentPosition).equals("READ") || mAdapter.getItemType(mCurrentPosition).equals("EXAMPLE")) { mView.showAllUi(); } else if (mAdapter.getItemType(mCurrentPosition).equals("AAA")) { mView.eventHideUi(); } else { } //获取当前显示的View 的数据 int childCount = rv.getChildCount(); //获取最后一具 Item 对应的View View childAt = rv.getChildAt(childCount - 1); //获取当前军舰中显示的最后一个 Item 的位置 Postion int childLayoutPosition = rv.getChildLayoutPosition(childAt); mView.setTopStatus(mDataList.get(childLayoutPosition)); 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() { // Runtime.getRuntime().gc(); System.gc(); if (mCurrentPosition >= mTotalSize - 1) { //Toast.makeText(mView.getActivity(), "全部播放完成", Toast.LENGTH_SHORT).show(); CusToast.getInstance(mView.getActivity()).show("全部播放完成", 2000); // mView.getActivity().finish(); return; } scrollToNextFunction(rv, true); } @Override public void onError(int what, int extra) { } @Override public void onInfo(int what, int extra) { } }); } } } public void checkIsOver() { if (mCurrentPosition >= mDataList.size() - 1) { Toast.makeText(mContext, "到底了", Toast.LENGTH_SHORT).show(); } } public 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() - 1) { if (needScroll) { rv.smoothScrollToPosition(childLayoutPosition + 1); } } else { // Toast.makeText(this, "已滑动到底部了", Toast.LENGTH_LONG).show(); // CToast.makeText(mView.getActivity(), "滑动到最后一个啦", 3000).show(); if (loadOver) { return; } switch (loadType) { case 0: getRecommendDataList(); break; case 1: getMyFollowAllVideo(); break; case 2: break; } } } public void scrollToUpFunction(RecyclerView rv) { //获取当前显示的View 的数据 if (mCurrentPosition > 0) { rv.smoothScrollToPosition(mCurrentPosition - 1); mCurrentPosition = mCurrentPosition - 1; } else if (mCurrentPosition == 0) { Toast.makeText(mContext, "到顶了", Toast.LENGTH_SHORT).show(); // CusToast.getInstance(mContext).show("已经是第一个了", 2000); } } }