123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693 |
- package com.edufound.reader.presenter;
- import static cn.jzvd.Jzvd.STATE_PLAYING;
- import android.content.Context;
- import android.content.Intent;
- import android.graphics.Outline;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.text.TextUtils;
- import android.view.View;
- import android.view.ViewOutlineProvider;
- import android.widget.LinearLayout;
- import android.widget.Switch;
- import androidx.annotation.NonNull;
- import androidx.recyclerview.widget.LinearLayoutManager;
- import androidx.recyclerview.widget.OrientationHelper;
- import androidx.recyclerview.widget.RecyclerView;
- import com.edufound.reader.R;
- import com.edufound.reader.activity.SmallFullVideoActivity;
- 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.Gson;
- 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 cn.jzvd.Jzvd;
- public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentContract.View> implements RecommendFragmentContract.Presenter {
- Context mContext;
- RecommendFragmentModel mModel;
- private ViewPagerLayoutManager mViewPagerLayoutManager;
- private int mCurrentPosition = 0;
- List<UserRecordBean> mDataList;
- SlideVideoAdapter mAdapter;
- int loadType = 0;
- int mTotalSize = 20;
- int mPageIndex = 1;
- boolean loadOver = false;
- UserApiServerImpl mUserApi;
- Switch onPlayingSwitch;
- LinearLayout onPlayingMarqueen;
- boolean isFragmentPause = false;
- 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) {
- Logger.e("获取关注");
- //关注的所有人的所有视频
- 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<List<UserRecordBean>>() {
- }.getType());
- if (mDataList != null) {
- initVideoDate(rv, startPosition);
- mTotalSize = mDataList.size();
- mView.getRootView().setVisibility(View.VISIBLE);
- mView.showFirstIntoView();
- mView.getRootView().post(new Runnable() {
- @Override
- public void run() {
- if (mAdapter != null) {
- 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();
- mCurrentPosition = position;
- autoPlayVideo(rv);
- if (mCurrentPosition == 0) {
- // Toast.makeText(mContext, "到顶了", Toast.LENGTH_SHORT).show();
- } else if (mCurrentPosition == (mTotalSize - 1)) {
- // Toast.makeText(mContext, "到底了", Toast.LENGTH_SHORT).show();
- }
- // if (mAdapter.getItemTag(mCurrentPosition).equals("ACTIVITY")) {
- // mView.eventHideUi();
- // } else {
- // mView.showAllUi();
- // }
- // 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);
- 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();
- isFragmentPause = true;
- handler.sendEmptyMessageDelayed(0x3311, 100);
- // JzvdStd.goOnPlayOnPause();
- }
- @Override
- public void fragmentResume(RecyclerView rv) {
- isFragmentPause = false;
- checkIsVip();
- handler.sendEmptyMessageDelayed(0x3312, 500);
- }
- public void checkIsVip() {
- if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
- if (Consts.getmConstsBaiDuUserBean() != null) {
- mView.getisViewUI().setVisibility(View.INVISIBLE);
- }
- } else {
- //除了百度都走这里
- if (mView == null) {
- return;
- }
- mView.getisViewUI().setEnabled(false);
- mView.getisViewUI().postDelayed(new Runnable() {
- @Override
- public void run() {
- if (Consts.isIsYFVip()) {
- if (mView != null) {
- if (mView.getisViewUI() != null) {
- mView.getisViewUI().setVisibility(View.INVISIBLE);
- }
- }
- }
- if (mView != null) {
- if (mView.getisViewUI() != null) {
- mView.getisViewUI().setEnabled(true);
- }
- }
- }
- }, 500);
- }
- }
- @Override
- public void getRecommendDataList() {
- if (mDataList != null && mDataList.size() >= mTotalSize) {
- loadOver = true;
- return;
- }
- String grade = MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE);
- if (TextUtils.isEmpty(grade) || Consts.getmConstsUserBean() == null) {
- grade = EfunboxUtil.getEnumByCNGrade("一年级");
- } else {
- grade = Consts.getmConstsUserBean().getGrade();
- }
- mModel.getRecommendList(mView.getActivity(), grade, mPageIndex, new Callback() {
- @Override
- public void onSuccess(HttpInfo info) throws IOException {
- HttpResultBean<HttpResultDataListBean<UserRecordBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<UserRecordBean>>>() {
- }.getType());
- if (ThroughUtil.mThroughTypeBean != null && ThroughUtil.mThroughTypeBean.getmThroughType().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.mThroughTypeBean.getUserReadId())) {
- //找到了。要放到第一个
- Logger.e("找到了推荐视频。要放到第一个");
- UserRecordBean upbbean = bean.getData().getList().get(i);
- bean.getData().getList().remove(i);
- bean.getData().getList().add(0, upbbean);
- }
- }
- }
- mAdapter.addMored(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
- 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<String, String> 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<FavoritesBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<FavoritesBean>>() {
- }.getType());
- Logger.e("bean.getData().getStatus():" + bean.getData().getStatus());
- 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);
- }
- if (mView.getChangeCharacterListener() != null) {
- mView.getChangeCharacterListener().changeDataList(mDataList.get(mCurrentPosition));
- }
- intent.putExtra("position", String.valueOf(mCurrentPosition));
- mView.getActivity().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<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
- }.getType());
- if (!TextUtils.isEmpty(bean.getData())) {
- mView.setLikes(bean.getData());
- mDataList.get(mCurrentPosition).setLike(true);
- mDataList.get(mCurrentPosition).getUserRead().setLikeAmount(bean.getData());
- mView.getChangeCharacterListener().changeDataList(mDataList.get(mCurrentPosition));
- }
- }
- @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;
- if (handler != null) {
- handler.removeMessages(0x3311);
- handler.removeMessages(0x3312);
- handler = 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 {
- Logger.e("获取单独的成功了");
- HttpResultBean<UserRecordBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserRecordBean>>() {
- }.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<HttpResultDataListBean<UserRecordBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<UserRecordBean>>>() {
- }.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 {
- }
- });
- }
- @Override
- public void getListByExampleId(String exampleId) {
- mModel.getListByExampleId(mView.getActivity(), exampleId, new Callback() {
- @Override
- public void onSuccess(HttpInfo info) throws IOException {
- HttpResultBean<HttpResultDataListBean<UserRecordBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<UserRecordBean>>>() {
- }.getType());
- Bundle bundle = new Bundle();
- bundle.putString("index", 0 + "");
- bundle.putString("dataJson", new Gson().toJson(bean.getData().getList()));
- //数据太多了。直接传不过去,通过MMKV写一下再读一下
- Intent intent = new Intent(mContext, SmallFullVideoActivity.class);
- intent.putExtra("params_bundle", bundle);
- mContext.startActivity(intent);
- }
- @Override
- public void onFailure(HttpInfo info) throws IOException {
- }
- });
- }
- @Override
- public Switch getPlayingSwitch() {
- if (onPlayingSwitch != null) {
- return onPlayingSwitch;
- }
- return null;
- }
- @Override
- public LinearLayout getPlayingMarqueen() {
- return onPlayingMarqueen;
- }
- @Override
- public void clearAll() {
- mViewPagerLayoutManager = null;
- mDataList = null;
- mAdapter = null;
- Jzvd.releaseAllVideos();
- }
- private void autoPlayVideo(RecyclerView rv) {
- if (rv == null || rv.getChildAt(0) == null) {
- return;
- }
- if (mAdapter.getItemTag(mCurrentPosition).equals("ACTIVITY")) {
- mView.eventHideUi();
- } else {
- mView.showAllUi();
- }
- //获取当前显示的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);
- onPlayingSwitch = rv.getChildAt(0).findViewById(R.id.slidevideo_video_switch);
- onPlayingMarqueen = rv.getChildAt(0).findViewById(R.id.slidevideo_video_marqueen);
- if (player != null) {
- if (player.state == 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) {
- }
- @Override
- public void onPrepared() {
- handler.sendEmptyMessageDelayed(0x3311, 100);
- }
- });
- }
- }
- }
- 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);
- }
- }
- Handler handler = new Handler(new Handler.Callback() {
- @Override
- public boolean handleMessage(@NonNull Message msg) {
- switch (msg.what) {
- case 0x3311:
- handler.removeMessages(0x3311);
- if (isFragmentPause) {
- if (mView != null && mView.getmRecyclerView() != null) {
- if (mView.getmRecyclerView().getChildCount() > 0) {
- RvListJzvdStd player = mView.getmRecyclerView().getChildAt(0).findViewById(R.id.slidevideo_video);
- if (player == null) {
- Logger.e("竟然是空的");
- return true;
- }
- if (isFragmentPause) {
- player.reset();
- Jzvd.releaseAllVideos();
- }
- // Jzvd.goOnPlayOnPause();
- }
- }
- }
- break;
- case 0x3312:
- handler.removeMessages(0x3312);
- if (mView != null && mView.getmRecyclerView() != null) {
- if (mView.getmRecyclerView().getChildCount() > 0) {
- RvListJzvdStd player = mView.getmRecyclerView().getChildAt(0).findViewById(R.id.slidevideo_video);
- if (player == null) {
- Logger.e("竟然是空的");
- return true;
- }
- player.startButton.postDelayed(new Runnable() {
- @Override
- public void run() {
- if (player.state == STATE_PLAYING) {
- } else {
- player.startButton.performClick();
- }
- }
- }, 300);
- }
- // player.startVideoAfterPreloading();
- // player.onPrepared();
- // Jzvd.goOnPlayOnResume();
- break;
- }
- }
- return true;
- }
- });
- }
|