CharacterFragmentPresenterVersionThree.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. package com.edufound.reader.presenter;
  2. import android.content.Context;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.GridLayout;
  9. import android.widget.ImageView;
  10. import android.widget.LinearLayout;
  11. import android.widget.TextView;
  12. import androidx.fragment.app.FragmentManager;
  13. import androidx.fragment.app.FragmentTransaction;
  14. import com.edufound.reader.R;
  15. import com.edufound.reader.apiserver.UserApiServerImpl;
  16. import com.edufound.reader.base.BasePresenter;
  17. import com.edufound.reader.bean.HttpResultBean;
  18. import com.edufound.reader.bean.HttpResultDataListBean;
  19. import com.edufound.reader.bean.UserRecordBean;
  20. import com.edufound.reader.contract.CharacterFragmentContract;
  21. import com.edufound.reader.cusview.CusToast;
  22. import com.edufound.reader.fragment.RecommendFragment;
  23. import com.edufound.reader.model.CharacterFragmentModel;
  24. import com.edufound.reader.util.EfunboxUtil;
  25. import com.edufound.reader.util.GlideUtils;
  26. import com.edufound.reader.util.SizeUtils;
  27. import com.google.common.collect.Lists;
  28. import com.google.gson.Gson;
  29. import com.google.gson.reflect.TypeToken;
  30. import com.okhttplib.HttpInfo;
  31. import com.okhttplib.callback.Callback;
  32. import com.orhanobut.logger.Logger;
  33. import java.io.IOException;
  34. import java.util.ArrayList;
  35. import java.util.List;
  36. import cn.jzvd.Jzvd;
  37. public class CharacterFragmentPresenterVersionThree extends BasePresenter<CharacterFragmentContract.View> implements CharacterFragmentContract.Presenter {
  38. Context mContext;
  39. CharacterFragmentModel mModel;
  40. UserApiServerImpl mUserApi;
  41. List<UserRecordBean> mDataList;
  42. int mListStart = 0;
  43. int mListEnd = 6;
  44. List<List<UserRecordBean>> mLoadDataList;
  45. RecommendFragment mRecommendFragment;
  46. FragmentManager mFragmentManager;
  47. public CharacterFragmentPresenterVersionThree(Context context, FragmentManager fragmentManager) {
  48. mModel = new CharacterFragmentModel();
  49. mUserApi = new UserApiServerImpl();
  50. mContext = context;
  51. mFragmentManager = fragmentManager;
  52. // mDataList = new ArrayList<>();
  53. // for (int i = 0; i < 100; i++) {
  54. // mDataList.add("i=" + i);
  55. // }
  56. }
  57. public UserApiServerImpl getUserApi() {
  58. return mUserApi;
  59. }
  60. @Override
  61. public void initGridLayout(GridLayout gridLayout) {
  62. }
  63. @Override
  64. public void initLinearLayout(LinearLayout linearLayout) {
  65. if (mLoadDataList == null || mLoadDataList.size() <= 0) {
  66. return;
  67. }
  68. int timeCount = 0;
  69. for (int j = mListStart; j < mListEnd; j++) {
  70. timeCount++;
  71. Message message = new Message();
  72. message.obj = linearLayout;
  73. message.what = CharacterFragmentModel.LOAD_LINEARLAYOUT;
  74. message.arg1 = j;
  75. if (timeCount == (mListEnd - mListStart)) {
  76. mCharacterHandler.sendEmptyMessageDelayed(CharacterFragmentModel.LOAD_LINEARLAYOUT_OVER, 1000);
  77. }
  78. mCharacterHandler.sendMessageDelayed(message, 50 * timeCount);
  79. }
  80. mListStart = mListEnd;
  81. if (mListEnd + 3 > mLoadDataList.size()) {
  82. mListEnd = mLoadDataList.size();
  83. } else {
  84. mListEnd = mListEnd + 3;
  85. }
  86. }
  87. @Override
  88. public void onDestory(GridLayout layout, LinearLayout linearLayout) {
  89. if (mCharacterHandler != null) {
  90. mCharacterHandler.removeMessages(CharacterFragmentModel.LOAD_GRID);
  91. mCharacterHandler.removeMessages(0x33312);
  92. mCharacterHandler = null;
  93. if (mRecommendFragment != null) {
  94. mFragmentManager.beginTransaction().remove(mRecommendFragment);
  95. mRecommendFragment = null;
  96. }
  97. Jzvd.releaseAllVideos();
  98. }
  99. if (layout != null) {
  100. layout.removeAllViews();
  101. layout = null;
  102. }
  103. if (linearLayout != null) {
  104. linearLayout.removeAllViews();
  105. linearLayout = null;
  106. }
  107. mView = null;
  108. }
  109. @Override
  110. public void getExampleAll() {
  111. mModel.getExampleAll(mView.getActivity(), new Callback() {
  112. @Override
  113. public void onSuccess(HttpInfo info) throws IOException {
  114. HttpResultBean<HttpResultDataListBean<UserRecordBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<UserRecordBean>>>() {
  115. }.getType());
  116. mDataList = bean.getData().getList();
  117. mLoadDataList = Lists.partition(mDataList, 2);
  118. mView.getExampleAllSuccess();
  119. }
  120. @Override
  121. public void onFailure(HttpInfo info) throws IOException {
  122. Logger.e("获取任务失败:" + info.getRetDetail());
  123. getExampleAll();
  124. }
  125. });
  126. }
  127. @Override
  128. public void setVideoDanMuStatus(boolean bool) {
  129. if (mRecommendFragment != null) {
  130. mRecommendFragment.danMuStatus(bool);
  131. }
  132. }
  133. @Override
  134. public void setVideoMarqueenStatus(int status) {
  135. if (mRecommendFragment != null) {
  136. mRecommendFragment.playingMarqueenStatus(status);
  137. }
  138. }
  139. private void setLinearLayoutItem(LinearLayout linearLayout, int index) {
  140. //得改一下,变成2个一组
  141. if (mView == null) {
  142. return;
  143. }
  144. LinearLayout layout = new LinearLayout(mContext);
  145. layout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT));
  146. layout.setOrientation(LinearLayout.VERTICAL);
  147. //
  148. List<UserRecordBean> data = mLoadDataList.get(index);
  149. for (int i = 0; i < data.size(); i++) {
  150. View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_item_record_authority, null);
  151. ImageView imgIcon = view.findViewById(R.id.adapter_item_record_authority_icon);
  152. TextView name = view.findViewById(R.id.adapter_item_record_authority_name);
  153. TextView allcount = view.findViewById(R.id.adapter_item_record_authority_allcount_num);
  154. TextView looknum = view.findViewById(R.id.adapter_item_record_authority_look_num);
  155. TextView thumbnum = view.findViewById(R.id.adapter_item_record_authority_thumb_num);
  156. TextView startnum = view.findViewById(R.id.adapter_item_record_authority_start_num);
  157. GlideUtils.loadImage(mContext, data.get(i).getUserRead().getCoverImg(), imgIcon);
  158. name.setText(data.get(i).getUserRead().getTitle());
  159. allcount.setText(EfunboxUtil.checkNum10000(data.get(i).getUserRead().getReadAmount()));
  160. looknum.setText(EfunboxUtil.checkNum10000(data.get(i).getUserRead().getPlayAmount()));
  161. thumbnum.setText(EfunboxUtil.checkNum10000(data.get(i).getUserRead().getLikeAmount()));
  162. startnum.setText(EfunboxUtil.checkNum10000(data.get(i).getUserRead().getFavoritesAmount()));
  163. int finalI = i;
  164. mView.addUiClick(view, o -> {
  165. // Bundle bundle = new Bundle();
  166. // bundle.putString("index", index + "");
  167. // bundle.putString("dataJson", "getmmkv");
  168. // bundle.putString("intoPage", "Character");
  169. // //数据太多了。直接传不过去,通过MMKV写一下再读一下
  170. // MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
  171. // ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
  172. // CusToast.getInstance(mContext).show(finalI + "", 3000);
  173. mCharacterHandler.removeMessages(0x33312);
  174. Message message = new Message();
  175. RecommendBean bean = new RecommendBean();
  176. bean.data = data;
  177. bean.i = finalI;
  178. bean.index = index;
  179. bean.linearLayout = linearLayout;
  180. bean.view = view;
  181. bean.readMount = EfunboxUtil.checkNum10000(data.get(finalI).getUserRead().getReadAmount());
  182. message.obj = bean;
  183. message.what = 0x33312;
  184. mCharacterHandler.sendMessageDelayed(message, 100);
  185. });
  186. LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new LinearLayout.LayoutParams(SizeUtils.dp2px(mContext, 415), SizeUtils.dp2px(mContext, 290)));
  187. params.setMargins(SizeUtils.dp2px(mContext, 10), 0, SizeUtils.dp2px(mContext, 20), SizeUtils.dp2px(mContext, 20));
  188. view.setLayoutParams(params);
  189. layout.addView(view);
  190. }
  191. linearLayout.addView(layout);
  192. }
  193. @Override
  194. public void getRecordInfoByIdSetCharacter3(String id) {
  195. if (mView == null) {
  196. return;
  197. }
  198. mModel.getRecordInfoById(mView.getActivity(), id, new Callback() {
  199. @Override
  200. public void onSuccess(HttpInfo info) throws IOException {
  201. HttpResultBean<UserRecordBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserRecordBean>>() {
  202. }.getType());
  203. mRecommendFragment.getChangeCharacterListener().changeDataList(bean.getData());
  204. }
  205. @Override
  206. public void onFailure(HttpInfo info) throws IOException {
  207. Logger.e("获取单独的失敗了:" + info.getRetDetail());
  208. }
  209. });
  210. }
  211. @Override
  212. public void onPause() {
  213. mCharacterHandler.removeMessages(0x33312);
  214. }
  215. Handler mCharacterHandler = new Handler(new Handler.Callback() {
  216. @Override
  217. public boolean handleMessage(Message msg) {
  218. switch (msg.what) {
  219. case CharacterFragmentModel.LOAD_LINEARLAYOUT:
  220. setLinearLayoutItem((LinearLayout) msg.obj, msg.arg1);
  221. break;
  222. case CharacterFragmentModel.LOAD_LINEARLAYOUT_OVER:
  223. break;
  224. case 0x33312:
  225. if (mRecommendFragment != null) {
  226. mFragmentManager.beginTransaction().remove(mRecommendFragment);
  227. mRecommendFragment = null;
  228. }
  229. RecommendBean ttt = (RecommendBean) msg.obj;
  230. String id = ttt.data.get(ttt.i).getUserRead().getId();
  231. if (mView != null) {
  232. mModel.getRecordInfoById(mView.getActivity(), id, new Callback() {
  233. @Override
  234. public void onSuccess(HttpInfo info) throws IOException {
  235. HttpResultBean<UserRecordBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserRecordBean>>() {
  236. }.getType());
  237. // mRecommendFragment.getChangeCharacterListener().changeDataList(bean.getData());
  238. try {
  239. if (mView.getFragmentLayout() == null) {
  240. return;
  241. }
  242. mRecommendFragment = new RecommendFragment(2);
  243. FragmentTransaction transaction = mFragmentManager.beginTransaction();
  244. transaction.addToBackStack(null);
  245. transaction.replace(R.id.character_version_three_fragment_layout, mRecommendFragment);
  246. List<UserRecordBean> sss = new ArrayList<>();
  247. bean.getData().getUserRead().setReadAmount(ttt.readMount);
  248. sss.add(bean.getData());
  249. mRecommendFragment.setDataJson(new Gson().toJson(sss));
  250. mRecommendFragment.hiddenBottomView();
  251. mRecommendFragment.showUserReadCount(true);
  252. mRecommendFragment.setLayoutViewScale(0.92f, 0.92f);
  253. mRecommendFragment.setChangeCharacterListener(new RecommendFragment.ChangeCharacterListener() {
  254. @Override
  255. public void changeDataList(UserRecordBean list) {
  256. mRecommendFragment.setTopStatus(list);
  257. }
  258. });
  259. transaction.commit();
  260. ttt.linearLayout.removeView(mView.getFragmentLayout());
  261. if (ttt.index - 1 < 0) {
  262. ttt.linearLayout.addView(mView.getFragmentLayout(), 0);
  263. } else {
  264. ttt.linearLayout.addView(mView.getFragmentLayout(), ttt.index);
  265. }
  266. mView.getFragmentLayout().setVisibility(View.VISIBLE);
  267. mView.getScrllView().postDelayed(new Runnable() {
  268. @Override
  269. public void run() {
  270. //- SizeUtils.dp2px(mContext, 100)
  271. if (mView != null) {
  272. if (mView.getScrllView() != null) {
  273. mView.getScrllView().smoothScrollTo(mView.getFragmentLayout().getLeft() + ttt.view.getWidth() - (ttt.view.getWidth() / 6), 0);
  274. }
  275. }
  276. }
  277. }, 200);
  278. } catch (Exception e) {
  279. e.printStackTrace();
  280. }
  281. }
  282. @Override
  283. public void onFailure(HttpInfo info) throws IOException {
  284. Logger.e("获取单独的失敗了:" + info.getRetDetail());
  285. CusToast.getInstance(mContext).show("获取数据失败", 3000);
  286. }
  287. });
  288. }
  289. break;
  290. default:
  291. throw new IllegalStateException("Unexpected value: " + msg.what);
  292. }
  293. return false;
  294. }
  295. });
  296. }
  297. class RecommendBean {
  298. LinearLayout linearLayout;
  299. List<UserRecordBean> data;
  300. int index;
  301. int i;
  302. String readMount;
  303. View view;
  304. }