CharacterFragmentPresenterVersionThree.java 14 KB

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