MyTabFragmentPresenter.java 16 KB

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