MyTabFragmentPresenter.java 18 KB

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