MyTabFragmentPresenter.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. package com.edufound.reader.presenter;
  2. import android.animation.Animator;
  3. import android.animation.LayoutTransition;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.view.LayoutInflater;
  10. import android.view.MotionEvent;
  11. import android.view.View;
  12. import android.widget.FrameLayout;
  13. import android.widget.GridLayout;
  14. import android.widget.ImageView;
  15. import android.widget.TextView;
  16. import com.edufound.reader.R;
  17. import com.edufound.reader.activity.SmallFullVideoActivity;
  18. import com.edufound.reader.apiserver.OrderApiServerImpl;
  19. import com.edufound.reader.apiserver.UserApiServerImpl;
  20. import com.edufound.reader.base.BaseActivity;
  21. import com.edufound.reader.base.BasePresenter;
  22. import com.edufound.reader.bean.ChannelCodeEnum;
  23. import com.edufound.reader.bean.HttpResultBean;
  24. import com.edufound.reader.bean.MyInfoBean;
  25. import com.edufound.reader.bean.UserRecordBean;
  26. import com.edufound.reader.contract.MyTabFragmentContract;
  27. import com.edufound.reader.cusview.CusToast;
  28. import com.edufound.reader.interfaces.EfunboxInterfaces;
  29. import com.edufound.reader.listener.PopUtilClickListener;
  30. import com.edufound.reader.model.CharacterFragmentModel;
  31. import com.edufound.reader.model.MyTabFragmentModel;
  32. import com.edufound.reader.popwindow.PopWindowUtil;
  33. import com.edufound.reader.receiver.BackPageReceiver;
  34. import com.edufound.reader.util.Consts;
  35. import com.edufound.reader.util.EfunboxUtil;
  36. import com.edufound.reader.util.GlideUtils;
  37. import com.edufound.reader.util.MMKVUtil;
  38. import com.edufound.reader.util.SizeUtils;
  39. import com.edufound.reader.util.TimeUtil;
  40. import com.google.gson.reflect.TypeToken;
  41. import com.okhttplib.HttpInfo;
  42. import com.okhttplib.callback.Callback;
  43. import com.orhanobut.logger.Logger;
  44. import java.io.IOException;
  45. import java.util.ArrayList;
  46. import java.util.List;
  47. public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.View> implements MyTabFragmentContract.Presenter {
  48. MyTabFragmentModel mModel;
  49. OrderApiServerImpl mOrderApi;
  50. Context mContext;
  51. List<UserRecordBean> mDataList;
  52. int mListStart = 0;
  53. int mListEnd = 6;
  54. int curPosition = 0;
  55. boolean isNedRef = false;
  56. UserApiServerImpl mUserApi;
  57. int mReaderMax;
  58. public MyTabFragmentPresenter(Context context) {
  59. mContext = context;
  60. mModel = new MyTabFragmentModel();
  61. mOrderApi = new OrderApiServerImpl();
  62. mUserApi = new UserApiServerImpl();
  63. BackPageReceiver.registerReceiver(context, BackPageReceiver.BACK_HOME_REF_USER_INFO);
  64. BackPageReceiver.registerBackPageReceiverListener(backListener);
  65. }
  66. public UserApiServerImpl getUserApi() {
  67. return mUserApi;
  68. }
  69. @Override
  70. public void initGridLayout(GridLayout gridLayout, FrameLayout norecordlayout) {
  71. if (gridLayout.getLayoutTransition() == null) {
  72. LayoutTransition transition = new LayoutTransition();
  73. transition.setDuration(200);
  74. transition.setAnimator(LayoutTransition.APPEARING, null);
  75. transition.setAnimator(LayoutTransition.CHANGE_APPEARING, null);
  76. transition.setAnimator(LayoutTransition.DISAPPEARING, null);
  77. transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING));
  78. gridLayout.setLayoutTransition(transition);
  79. }
  80. gridLayout.setRowCount(2);
  81. }
  82. public void setGridData(GridLayout gridLayout, FrameLayout norecordlayout) {
  83. if (mDataList == null || mDataList.size() <= 0) {
  84. Logger.e("没有作品--");
  85. norecordlayout.setVisibility(View.VISIBLE);
  86. gridLayout.setVisibility(View.GONE);
  87. return;
  88. }
  89. mReaderMax = mDataList.size();
  90. if (mListEnd > mDataList.size()) {
  91. mListEnd = mDataList.size();
  92. }
  93. int timeCount = 0;
  94. for (int j = mListStart; j < mListEnd; j++) {
  95. timeCount++;
  96. Message message = new Message();
  97. message.obj = gridLayout;
  98. message.what = CharacterFragmentModel.LOAD_GRID;
  99. message.arg1 = j;
  100. mUserFragmentHandler.sendMessageDelayed(message, 50 * timeCount);
  101. }
  102. mListStart = mListEnd;
  103. if (mListEnd + 6 > mDataList.size()) {
  104. mListEnd = mDataList.size();
  105. } else {
  106. mListEnd = mListEnd + 6;
  107. }
  108. }
  109. private void setGridItemView(GridLayout gridLayout, int index) {
  110. if (mView == null) {
  111. return;
  112. }
  113. View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_item_record_user, null);
  114. UserRecordBean.UserRead reader = mDataList.get(index).getUserRead();
  115. ImageView imgIcon = view.findViewById(R.id.adapter_item_record_user_icon);
  116. TextView name = view.findViewById(R.id.adapter_item_record_user_name);
  117. ImageView imgDel = view.findViewById(R.id.adapter_item_record_user_del);
  118. ImageView imgPriv = view.findViewById(R.id.adapter_item_record_user_priv);
  119. TextView lookAmount = view.findViewById(R.id.adapter_item_record_user_look_num);
  120. TextView likeAmount = view.findViewById(R.id.adapter_item_record_user_thumb_num);
  121. TextView commentAmount = view.findViewById(R.id.adapter_item_record_user_comment_num);
  122. TextView favoritesAmount = view.findViewById(R.id.adapter_item_record_user_start_num);
  123. FrameLayout checkLayout = view.findViewById(R.id.adapter_item_record_user_examine_layout);
  124. ImageView examineIcon = view.findViewById(R.id.adapter_item_record_user_examine_icon);
  125. ImageView examineDel = view.findViewById(R.id.adapter_item_record_user_examine_fail_del_icon);
  126. // GlideUtils.loadRoundCircleImage(mContext, reader.getCoverImg(), imgIcon, SizeUtils.dp2px(mContext, 20));
  127. GlideUtils.loadImage(mContext, reader.getCoverImg(), imgIcon);
  128. if (reader.getTitle().length() > 4) {
  129. name.setText(reader.getTitle().substring(0, 4) + "...");
  130. } else {
  131. name.setText(reader.getTitle());
  132. }
  133. lookAmount.setText(EfunboxUtil.checkNum10000(reader.getPlayAmount()));
  134. likeAmount.setText(EfunboxUtil.checkNum10000(reader.getLikeAmount()));
  135. commentAmount.setText(EfunboxUtil.checkNum10000(reader.getCommentAmount()));
  136. favoritesAmount.setText(EfunboxUtil.checkNum10000(reader.getFavoritesAmount()));
  137. if (reader.getStatus().equals("CHECK")) {
  138. //审核中
  139. // checkLayout.setVisibility(View.GONE);
  140. examineDel.setVisibility(View.GONE);
  141. } else if (reader.getStatus().equals("NORMAL") || reader.getStatus().equals("DISABLE")) {
  142. //正常
  143. checkLayout.setVisibility(View.GONE);
  144. } else if (reader.getStatus().equals("CHECK_FAILED")) {
  145. //审核失败
  146. GlideUtils.loadImage(mView.getActivity(), R.drawable.adapter_item_record_examine_fail, examineIcon);
  147. }
  148. Animator.AnimatorListener animListener = new Animator.AnimatorListener() {
  149. @Override
  150. public void onAnimationStart(Animator animator) {
  151. }
  152. @Override
  153. public void onAnimationEnd(Animator animator) {
  154. changeMyRecordStatusById("{\"id\": " + reader.getId() + ", \t\"status\": \"DEL\" }");
  155. gridLayout.removeView(view);
  156. mView.loadMoreItem();
  157. mReaderMax--;
  158. mDataList.remove(reader);
  159. mView.setRecordSize(mReaderMax);
  160. }
  161. @Override
  162. public void onAnimationCancel(Animator animator) {
  163. }
  164. @Override
  165. public void onAnimationRepeat(Animator animator) {
  166. }
  167. };
  168. mView.addUiClick(examineDel, o -> {
  169. PopWindowUtil.showRecordRemovedWindow(mContext, mView.getRootView(), new PopUtilClickListener() {
  170. @Override
  171. public void clickCancel() {
  172. }
  173. @Override
  174. public void clickSubmit(Object object) {
  175. view.animate().scaleY(0).scaleX(0).setDuration(200).setListener(animListener).start();
  176. }
  177. });
  178. });
  179. mView.addUiClick(imgDel, o -> {
  180. curPosition = index;
  181. PopWindowUtil.showRecordRemovedWindow(mContext, mView.getRootView(), new PopUtilClickListener() {
  182. @Override
  183. public void clickCancel() {
  184. }
  185. @Override
  186. public void clickSubmit(Object object) {
  187. view.animate().scaleY(0).scaleX(0).setDuration(200).setListener(animListener).start();
  188. }
  189. });
  190. });
  191. if (reader.getStatus().equals("DISABLE")) {
  192. imgPriv.setImageResource(R.drawable.adapter_item_record_pri);
  193. } else if (reader.getStatus().equals("NORMAL")) {
  194. imgPriv.setImageResource(R.drawable.adapter_item_record_pub);
  195. }
  196. view.setTag(imgPriv);
  197. mView.addUiClick(imgPriv, o -> {
  198. if (reader.getStatus().equals("DISABLE")) {
  199. //当前是隐藏状态,需要公开
  200. curPosition = index;
  201. changeMyRecordStatusById("{\"id\": " + reader.getId() + ", \t\"status\": \"NORMAL\" }");
  202. imgPriv.setImageResource(R.drawable.adapter_item_record_pub);
  203. } else if (reader.getStatus().equals("NORMAL")) {
  204. //当前正常状态,需要隐藏
  205. curPosition = index;
  206. changeMyRecordStatusById("{\"id\": " + reader.getId() + ", \t\"status\": \"DISABLE\" }");
  207. imgPriv.setImageResource(R.drawable.adapter_item_record_pri);
  208. } else {
  209. CusToast.getInstance(mContext).show("rdader.getStatus():" + reader.getTitle() + "---" + reader.getStatus(), 2000);
  210. }
  211. });
  212. mView.addUiClick(view, o -> {
  213. Bundle bundle = new Bundle();
  214. bundle.putString("index", index + "");
  215. bundle.putString("dataJson", "getmmkv");
  216. bundle.putString("intoPage", "MyTab");
  217. //数据太多了。直接传不过去,通过MMKV写一下再读一下
  218. List<UserRecordBean> toList = new ArrayList<>();
  219. for (int i = 0; i < mDataList.size(); i++) {
  220. if (!mDataList.get(i).getUserRead().getStatus().equals("DEL")) {
  221. toList.add(mDataList.get(i));
  222. }
  223. }
  224. MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(toList));
  225. ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
  226. });
  227. checkLayout.setOnTouchListener(new View.OnTouchListener() {
  228. @Override
  229. public boolean onTouch(View view, MotionEvent motionEvent) {
  230. return true;
  231. }
  232. });
  233. GridLayout.LayoutParams params = new GridLayout.LayoutParams(new FrameLayout.LayoutParams(SizeUtils.dp2px(mContext, 415), SizeUtils.dp2px(mContext, 290)));
  234. params.setMargins(SizeUtils.dp2px(mContext, 10), 0, SizeUtils.dp2px(mContext, 20), SizeUtils.dp2px(mContext, 20));
  235. view.setLayoutParams(params);
  236. gridLayout.addView(view);
  237. }
  238. @Override
  239. public void onDestory(GridLayout layout) {
  240. BackPageReceiver.unRegisterReceiver(mView.getActivity());
  241. if (mUserFragmentHandler != null) {
  242. mUserFragmentHandler.removeMessages(MyTabFragmentModel.LOAD_GRID);
  243. mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM);
  244. mUserFragmentHandler = null;
  245. }
  246. layout.removeAllViews();
  247. layout = null;
  248. mView = null;
  249. }
  250. @Override
  251. public void getMyRecords() {
  252. mModel.getMyRecords(mView.getActivity(), new Callback() {
  253. @Override
  254. public void onSuccess(HttpInfo info) throws IOException {
  255. HttpResultBean<List<UserRecordBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<List<UserRecordBean>>>() {
  256. }.getType());
  257. mDataList = bean.getData();
  258. mView.loadMoreItem();
  259. mView.setRecordSize(mDataList.size());
  260. }
  261. @Override
  262. public void onFailure(HttpInfo info) throws IOException {
  263. Logger.e("获取我的朗读列表错误:" + info.getRetCode());
  264. }
  265. });
  266. }
  267. @Override
  268. public void getMyInfo() {
  269. if (mView == null) {
  270. return;
  271. }
  272. mModel.getMyInfo(mView.getActivity(), new Callback() {
  273. @Override
  274. public void onSuccess(HttpInfo info) throws IOException {
  275. HttpResultBean<MyInfoBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<MyInfoBean>>() {
  276. }.getType());
  277. mView.setUserInfo(bean.getData());
  278. getMyRecords();
  279. getCheckNum();
  280. }
  281. @Override
  282. public void onFailure(HttpInfo info) throws IOException {
  283. Logger.e("获取我的信息失败:" + info.getRetDetail());
  284. getMyInfo();
  285. }
  286. });
  287. }
  288. @Override
  289. public void getIsBuy() {
  290. mOrderApi.isBuy(mView.getActivity(), new Callback() {
  291. @Override
  292. public void onSuccess(HttpInfo info) throws IOException {
  293. HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
  294. }.getType());
  295. if (Boolean.valueOf(bean.getData())) {
  296. } else {
  297. Logger.e("没有购买");
  298. }
  299. // mView.getIsBuySuccess(Boolean.valueOf(bean.getData()));
  300. }
  301. @Override
  302. public void onFailure(HttpInfo info) throws IOException {
  303. }
  304. });
  305. }
  306. @Override
  307. public void getAuth() {
  308. EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
  309. @Override
  310. public void success(long time) {
  311. mView.getIsBuySuccess(TimeUtil.timeStamp2Date(time, "yyyy-MM-dd"));
  312. }
  313. @Override
  314. public void error() {
  315. }
  316. });
  317. }
  318. @Override
  319. public void changeMyRecordStatusById(String json) {
  320. mModel.changeMyRecordStatusById(mView.getActivity(), json, new Callback() {
  321. @Override
  322. public void onSuccess(HttpInfo info) throws IOException {
  323. HttpResultBean<UserRecordBean.UserRead> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserRecordBean.UserRead>>() {
  324. }.getType());
  325. Logger.e("curPosition:" + curPosition);
  326. mDataList.get(curPosition).getUserRead().setStatus(bean.getData().getStatus());
  327. mView.changeRecordStatusSuccess(curPosition, bean.getData().getStatus());
  328. }
  329. @Override
  330. public void onFailure(HttpInfo info) throws IOException {
  331. Logger.e("改变状态失败");
  332. }
  333. });
  334. }
  335. @Override
  336. public void sendRefMyFragment() {
  337. Intent intent = new Intent(BackPageReceiver.BACK_HOME_REF_MY_FRAGMENT);
  338. mView.getActivity().sendBroadcast(intent);
  339. }
  340. @Override
  341. public void getCheckNum() {
  342. mModel.getIsCheckNum(mView.getActivity(), new Callback() {
  343. @Override
  344. public void onSuccess(HttpInfo info) throws IOException {
  345. HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
  346. }.getType());
  347. if (Integer.valueOf(bean.getData()) == 0) {
  348. if (isNedRef) {
  349. sendRefMyFragment();
  350. mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM);
  351. }
  352. } else if (Integer.valueOf(bean.getData()) > 0) {
  353. mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM);
  354. isNedRef = true;
  355. mUserFragmentHandler.sendEmptyMessageDelayed(MyTabFragmentModel.GET_CHECK_NUM, 5000);
  356. }
  357. }
  358. @Override
  359. public void onFailure(HttpInfo info) throws IOException {
  360. }
  361. });
  362. }
  363. @Override
  364. public void fragmentPause() {
  365. mUserFragmentHandler.removeMessages(MyTabFragmentModel.GET_CHECK_NUM);
  366. }
  367. @Override
  368. public void fragmentResume() {
  369. if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
  370. if (Consts.getmConstsBaiDuUserBean() == null) {
  371. return;
  372. }
  373. if (EfunboxUtil.checkIsVip()) {
  374. //是VIP
  375. mView.getIsBuySuccess(TimeUtil.getDateFromSeconds(String.valueOf(Consts.getmConstsBaiDuUserBean().getUserInfo().getEndTimestamp())));
  376. }
  377. } else {
  378. getAuth();
  379. }
  380. }
  381. Handler mUserFragmentHandler = new Handler(new Handler.Callback() {
  382. @Override
  383. public boolean handleMessage(Message msg) {
  384. switch (msg.what) {
  385. case MyTabFragmentModel.LOAD_GRID:
  386. setGridItemView((GridLayout) msg.obj, msg.arg1);
  387. break;
  388. case MyTabFragmentModel.GET_CHECK_NUM:
  389. getCheckNum();
  390. break;
  391. default:
  392. throw new IllegalStateException("Unexpected value: " + msg.what);
  393. }
  394. return false;
  395. }
  396. });
  397. BackPageReceiver.onBackPage backListener = new BackPageReceiver.onBackPage() {
  398. @Override
  399. public void pageBack(Intent intent) {
  400. if (intent.getAction().equals(BackPageReceiver.BACK_HOME_REF_USER_INFO)) {
  401. //刷新一下用户信息
  402. getMyInfo();
  403. }
  404. }
  405. };
  406. }