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.base.BaseActivity; import com.edufound.reader.base.BasePresenter; 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.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.EfunboxUtil; import com.edufound.reader.util.GlideUtils; import com.edufound.reader.util.MMKVUtil; import com.edufound.reader.util.SizeUtils; 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; public MyTabFragmentPresenter(Context context) { mContext = context; mModel = new MyTabFragmentModel(); mOrderApi = new OrderApiServerImpl(); BackPageReceiver.registerReceiver(context, BackPageReceiver.BACK_HOME_REF_USER_INFO); BackPageReceiver.registerBackPageReceiverListener(backListener); } @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) { norecordlayout.setVisibility(View.VISIBLE); gridLayout.setVisibility(View.GONE); return; } 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); // 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); } // if (index < 10) { // //测试用 // checkLayout.setVisibility(View.GONE); // imgPriv.setImageResource(R.drawable.adapter_item_record_pub); // } mView.addUiClick(imgDel, 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(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { gridLayout.removeView(view); mView.loadMoreItem(); mDataList.remove(index); mView.setRecordSize(mDataList.size()); changeMyRecordStatusById("{\"id\": " + reader.getId() + ", \t\"status\": \"DEL\" }"); } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }).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); } }); mView.addUiClick(view, o -> { Bundle bundle = new Bundle(); bundle.putString("index", index + ""); bundle.putString("dataJson", "getmmkv"); bundle.putString("intoPage", "MyTab"); //数据太多了。直接传不过去,通过MMKV写一下再读一下 MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList)); ((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.getRetDetail()); Logger.e("获取我的朗读列表错误:" + info.getNetCode()); 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 { } }); } @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() { mOrderApi.getAuth(mView.getActivity(), new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); mView.getIsBuySuccess(bean.getData()); } @Override public void onFailure(HttpInfo info) throws IOException { } }); } @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()); 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 { Logger.e("info:" + info.getRetDetail()); HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); if (Integer.valueOf(bean.getData()) == 0) { Logger.e("没有审核中的了"); if (isNedRef) { sendRefMyFragment(); mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM); } } else if (Integer.valueOf(bean.getData()) > 0) { Logger.e("还有审核中的"); 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() { } 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(); } } }; }