package com.edufound.reader.presenter; import android.animation.Animator; import android.animation.LayoutTransition; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.GridLayout; import android.widget.ImageView; import android.widget.TextView; import com.edufound.reader.R; import com.edufound.reader.activity.SmallFullVideoActivity; import com.edufound.reader.apiserver.OrderApiServerImpl; 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.HttpResultBean; import com.edufound.reader.bean.MyInfoBean; import com.edufound.reader.bean.UserRecordBean; import com.edufound.reader.contract.MyTabFragmentContract; import com.edufound.reader.cusview.CusToast; import com.edufound.reader.interfaces.EfunboxInterfaces; import com.edufound.reader.listener.PopUtilClickListener; import com.edufound.reader.model.CharacterFragmentModel; import com.edufound.reader.model.MyTabFragmentModel; import com.edufound.reader.popwindow.PopWindowUtil; import com.edufound.reader.receiver.BackPageReceiver; import com.edufound.reader.util.Consts; import com.edufound.reader.util.EfunboxUtil; import com.edufound.reader.util.GlideUtils; import com.edufound.reader.util.MMKVUtil; import com.edufound.reader.util.SizeUtils; import com.edufound.reader.util.TimeUtil; 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.List; public class MyTabFragmentPresenter extends BasePresenter implements MyTabFragmentContract.Presenter { MyTabFragmentModel mModel; OrderApiServerImpl mOrderApi; Context mContext; List mDataList; int mListStart = 0; int mListEnd = 6; int curPosition = 0; boolean isNedRef = false; UserApiServerImpl mUserApi; int mReaderMax; public MyTabFragmentPresenter(Context context) { mContext = context; mModel = new MyTabFragmentModel(); mOrderApi = new OrderApiServerImpl(); mUserApi = new UserApiServerImpl(); BackPageReceiver.registerReceiver(context, BackPageReceiver.BACK_HOME_REF_USER_INFO); BackPageReceiver.registerBackPageReceiverListener(backListener); } public UserApiServerImpl getUserApi() { return mUserApi; } @Override public void initGridLayout(GridLayout gridLayout, FrameLayout norecordlayout) { if (gridLayout.getLayoutTransition() == null) { LayoutTransition transition = new LayoutTransition(); transition.setDuration(200); transition.setAnimator(LayoutTransition.APPEARING, null); transition.setAnimator(LayoutTransition.CHANGE_APPEARING, null); transition.setAnimator(LayoutTransition.DISAPPEARING, null); transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING)); gridLayout.setLayoutTransition(transition); } gridLayout.setRowCount(2); } public void setGridData(GridLayout gridLayout, FrameLayout norecordlayout) { if (mDataList == null || mDataList.size() <= 0) { Logger.e("没有作品--"); norecordlayout.setVisibility(View.VISIBLE); gridLayout.setVisibility(View.GONE); return; } mReaderMax = mDataList.size(); if (mListEnd > mDataList.size()) { mListEnd = mDataList.size(); } int timeCount = 0; for (int j = mListStart; j < mListEnd; j++) { timeCount++; Message message = new Message(); message.obj = gridLayout; message.what = CharacterFragmentModel.LOAD_GRID; message.arg1 = j; mUserFragmentHandler.sendMessageDelayed(message, 50 * timeCount); } mListStart = mListEnd; if (mListEnd + 6 > mDataList.size()) { mListEnd = mDataList.size(); } else { mListEnd = mListEnd + 6; } } private void setGridItemView(GridLayout gridLayout, int index) { if (mView == null) { return; } View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_item_record_user, null); UserRecordBean.UserRead reader = mDataList.get(index).getUserRead(); ImageView imgIcon = view.findViewById(R.id.adapter_item_record_user_icon); TextView name = view.findViewById(R.id.adapter_item_record_user_name); ImageView imgDel = view.findViewById(R.id.adapter_item_record_user_del); ImageView imgPriv = view.findViewById(R.id.adapter_item_record_user_priv); TextView lookAmount = view.findViewById(R.id.adapter_item_record_user_look_num); TextView likeAmount = view.findViewById(R.id.adapter_item_record_user_thumb_num); TextView commentAmount = view.findViewById(R.id.adapter_item_record_user_comment_num); TextView favoritesAmount = view.findViewById(R.id.adapter_item_record_user_start_num); FrameLayout checkLayout = view.findViewById(R.id.adapter_item_record_user_examine_layout); ImageView examineIcon = view.findViewById(R.id.adapter_item_record_user_examine_icon); ImageView examineDel = view.findViewById(R.id.adapter_item_record_user_examine_fail_del_icon); // GlideUtils.loadRoundCircleImage(mContext, reader.getCoverImg(), imgIcon, SizeUtils.dp2px(mContext, 20)); GlideUtils.loadImage(mContext, reader.getCoverImg(), imgIcon); if (reader.getTitle().length() > 4) { name.setText(reader.getTitle().substring(0, 4) + "..."); } else { name.setText(reader.getTitle()); } lookAmount.setText(EfunboxUtil.checkNum10000(reader.getPlayAmount())); likeAmount.setText(EfunboxUtil.checkNum10000(reader.getLikeAmount())); commentAmount.setText(EfunboxUtil.checkNum10000(reader.getCommentAmount())); favoritesAmount.setText(EfunboxUtil.checkNum10000(reader.getFavoritesAmount())); if (reader.getStatus().equals("CHECK")) { //审核中 // checkLayout.setVisibility(View.GONE); examineDel.setVisibility(View.GONE); } else if (reader.getStatus().equals("NORMAL") || reader.getStatus().equals("DISABLE")) { //正常 checkLayout.setVisibility(View.GONE); } else if (reader.getStatus().equals("CHECK_FAILED")) { //审核失败 GlideUtils.loadImage(mView.getActivity(), R.drawable.adapter_item_record_examine_fail, examineIcon); } Animator.AnimatorListener animListener = new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { changeMyRecordStatusById("{\"id\": " + reader.getId() + ", \t\"status\": \"DEL\" }"); gridLayout.removeView(view); mView.loadMoreItem(); mReaderMax--; mDataList.remove(reader); mView.setRecordSize(mReaderMax); } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }; mView.addUiClick(examineDel, o -> { PopWindowUtil.showRecordRemovedWindow(mContext, mView.getRootView(), new PopUtilClickListener() { @Override public void clickCancel() { } @Override public void clickSubmit(Object object) { view.animate().scaleY(0).scaleX(0).setDuration(200).setListener(animListener).start(); } }); }); mView.addUiClick(imgDel, o -> { curPosition = index; PopWindowUtil.showRecordRemovedWindow(mContext, mView.getRootView(), new PopUtilClickListener() { @Override public void clickCancel() { } @Override public void clickSubmit(Object object) { view.animate().scaleY(0).scaleX(0).setDuration(200).setListener(animListener).start(); } }); }); if (reader.getStatus().equals("DISABLE")) { imgPriv.setImageResource(R.drawable.adapter_item_record_pri); } else if (reader.getStatus().equals("NORMAL")) { imgPriv.setImageResource(R.drawable.adapter_item_record_pub); } view.setTag(imgPriv); mView.addUiClick(imgPriv, o -> { if (reader.getStatus().equals("DISABLE")) { //当前是隐藏状态,需要公开 curPosition = index; changeMyRecordStatusById("{\"id\": " + reader.getId() + ", \t\"status\": \"NORMAL\" }"); imgPriv.setImageResource(R.drawable.adapter_item_record_pub); } else if (reader.getStatus().equals("NORMAL")) { //当前正常状态,需要隐藏 curPosition = index; changeMyRecordStatusById("{\"id\": " + reader.getId() + ", \t\"status\": \"DISABLE\" }"); imgPriv.setImageResource(R.drawable.adapter_item_record_pri); } else { CusToast.getInstance(mContext).show("rdader.getStatus():" + reader.getTitle() + "---" + reader.getStatus(), 2000); } }); mView.addUiClick(view, o -> { Bundle bundle = new Bundle(); bundle.putString("index", index + ""); bundle.putString("dataJson", "getmmkv"); bundle.putString("intoPage", "MyTab"); //数据太多了。直接传不过去,通过MMKV写一下再读一下 List toList = new ArrayList<>(); for (int i = 0; i < mDataList.size(); i++) { if (!mDataList.get(i).getUserRead().getStatus().equals("DEL")) { toList.add(mDataList.get(i)); } } MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(toList)); ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle); }); checkLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return true; } }); GridLayout.LayoutParams params = new GridLayout.LayoutParams(new FrameLayout.LayoutParams(SizeUtils.dp2px(mContext, 415), SizeUtils.dp2px(mContext, 290))); params.setMargins(SizeUtils.dp2px(mContext, 10), 0, SizeUtils.dp2px(mContext, 20), SizeUtils.dp2px(mContext, 20)); view.setLayoutParams(params); gridLayout.addView(view); } @Override public void onDestory(GridLayout layout) { BackPageReceiver.unRegisterReceiver(mView.getActivity()); if (mUserFragmentHandler != null) { mUserFragmentHandler.removeMessages(MyTabFragmentModel.LOAD_GRID); mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM); mUserFragmentHandler = null; } layout.removeAllViews(); layout = null; mView = null; } @Override public void getMyRecords() { mModel.getMyRecords(mView.getActivity(), new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean> bean = info.getRetDetail(new TypeToken>>() { }.getType()); mDataList = bean.getData(); mView.loadMoreItem(); mView.setRecordSize(mDataList.size()); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("获取我的朗读列表错误:" + info.getRetCode()); } }); } @Override public void getMyInfo() { if (mView == null) { return; } mModel.getMyInfo(mView.getActivity(), new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); mView.setUserInfo(bean.getData()); getMyRecords(); getCheckNum(); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("获取我的信息失败:" + info.getRetDetail()); getMyInfo(); } }); } @Override public void getIsBuy() { mOrderApi.isBuy(mView.getActivity(), new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); if (Boolean.valueOf(bean.getData())) { } else { Logger.e("没有购买"); } // mView.getIsBuySuccess(Boolean.valueOf(bean.getData())); } @Override public void onFailure(HttpInfo info) throws IOException { } }); } @Override public void getAuth() { EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() { @Override public void success(long time) { mView.getIsBuySuccess(TimeUtil.timeStamp2Date(time, "yyyy-MM-dd")); } @Override public void error() { } }); } @Override public void changeMyRecordStatusById(String json) { mModel.changeMyRecordStatusById(mView.getActivity(), json, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); Logger.e("curPosition:" + curPosition); mDataList.get(curPosition).getUserRead().setStatus(bean.getData().getStatus()); mView.changeRecordStatusSuccess(curPosition, bean.getData().getStatus()); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("改变状态失败"); } }); } @Override public void sendRefMyFragment() { Intent intent = new Intent(BackPageReceiver.BACK_HOME_REF_MY_FRAGMENT); mView.getActivity().sendBroadcast(intent); } @Override public void getCheckNum() { mModel.getIsCheckNum(mView.getActivity(), new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); if (Integer.valueOf(bean.getData()) == 0) { if (isNedRef) { sendRefMyFragment(); mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM); } } else if (Integer.valueOf(bean.getData()) > 0) { mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM); isNedRef = true; mUserFragmentHandler.sendEmptyMessageDelayed(MyTabFragmentModel.GET_CHECK_NUM, 5000); } } @Override public void onFailure(HttpInfo info) throws IOException { } }); } @Override public void fragmentPause() { mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM); } @Override public void fragmentResume() { if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) { if (Consts.getmConstsBaiDuUserBean() == null) { return; } if (EfunboxUtil.checkIsVip()) { //是VIP mView.getIsBuySuccess(TimeUtil.getDateFromSeconds(String.valueOf(Consts.getmConstsBaiDuUserBean().getUserInfo().getEndTimestamp()))); } } else { getAuth(); } } Handler mUserFragmentHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case MyTabFragmentModel.LOAD_GRID: setGridItemView((GridLayout) msg.obj, msg.arg1); break; case MyTabFragmentModel.GET_CHECK_NUM: getCheckNum(); break; default: throw new IllegalStateException("Unexpected value: " + msg.what); } return false; } }); BackPageReceiver.onBackPage backListener = new BackPageReceiver.onBackPage() { @Override public void pageBack(Intent intent) { if (intent.getAction().equals(BackPageReceiver.BACK_HOME_REF_USER_INFO)) { //刷新一下用户信息 getMyInfo(); } } }; }