RecommendFragment.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. package com.edufound.reader.fragment;
  2. import android.animation.AnimatorSet;
  3. import android.animation.ObjectAnimator;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.view.animation.LinearInterpolator;
  8. import android.widget.FrameLayout;
  9. import android.widget.ImageView;
  10. import android.widget.LinearLayout;
  11. import android.widget.TextView;
  12. import com.baidu.duer.bot.directive.payload.AmountInfo;
  13. import com.baidu.duer.botsdk.BotIntent;
  14. import com.edufound.reader.R;
  15. import com.edufound.reader.activity.CommentActivity;
  16. import com.edufound.reader.activity.OthersRecordActivity;
  17. import com.edufound.reader.activity.RecordActivity;
  18. import com.edufound.reader.base.BaseActivity;
  19. import com.edufound.reader.base.BaseMvpFragment;
  20. import com.edufound.reader.bean.ChannelCodeEnum;
  21. import com.edufound.reader.bean.UserEventEnum;
  22. import com.edufound.reader.bean.UserRecordBean;
  23. import com.edufound.reader.contract.RecommendFragmentContract;
  24. import com.edufound.reader.presenter.RecommendFragmentPresenter;
  25. import com.edufound.reader.util.Consts;
  26. import com.edufound.reader.util.EfunboxUtil;
  27. import com.edufound.reader.util.GlideUtils;
  28. import com.edufound.reader.util.MMKVUtil;
  29. import com.orhanobut.logger.Logger;
  30. import java.util.HashMap;
  31. import androidx.annotation.NonNull;
  32. import androidx.recyclerview.widget.RecyclerView;
  33. import io.reactivex.rxjava3.annotations.Nullable;
  34. public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresenter> implements RecommendFragmentContract.View {
  35. View mRootView;
  36. RecyclerView mRecyclerView;
  37. FrameLayout mUserHeadLayout;
  38. FrameLayout mCommentLayout;
  39. FrameLayout mCollectionLayout;
  40. FrameLayout mThumbsLayout;
  41. LinearLayout mToRecordLayout;
  42. ImageView mVideoUp;
  43. ImageView mVideoNext;
  44. ObjectAnimator mRotationImgAnim;
  45. ImageView mToRecordRotationbg;
  46. ObjectAnimator mToRecordScaleXAnim;
  47. ObjectAnimator mToRecordScaleYAnim;
  48. ImageView mToRecordScaleIcon;
  49. ImageView mUserHead;
  50. TextView mUserPhone;
  51. TextView mCommentCount;
  52. TextView mCollentStatus;
  53. TextView mThumbCount;
  54. ImageView isFollow;
  55. ImageView isUserVip;
  56. //默认是推荐 mFragmentType=0
  57. //关注 mFragmentType=1
  58. //官方的 mFragmentType=2
  59. //关注的人的mFragmentType=3
  60. int mFragmentType = 0;
  61. boolean hideBottom = false;
  62. int startPosition = 0;
  63. String mDataJson = null;
  64. String intoPage;
  65. public RecommendFragment(int type) {
  66. mFragmentType = type;
  67. }
  68. public RecommendFragment() {
  69. }
  70. @Override
  71. protected void initView(View view) {
  72. mRootView = view;
  73. mRootView.setVisibility(View.INVISIBLE);
  74. mPresenter = new RecommendFragmentPresenter(getContext());
  75. mPresenter.attachView(this);
  76. mRecyclerView = view.findViewById(R.id.fragment_recommend_recyclerview);
  77. mUserHeadLayout = view.findViewById(R.id.fragment_recommend_user_head_layout);
  78. mCommentLayout = view.findViewById(R.id.fragment_recommend_comment_layout);
  79. mCollectionLayout = view.findViewById(R.id.fragment_recommend_collection_layout);
  80. mThumbsLayout = view.findViewById(R.id.fragment_recommend_thumbs_layout);
  81. mVideoUp = view.findViewById(R.id.fragment_recommend_video_up);
  82. mVideoNext = view.findViewById(R.id.fragment_recommend_video_next);
  83. mToRecordLayout = view.findViewById(R.id.fragment_recommend_to_record_layout);
  84. mUserHead = view.findViewById(R.id.fragment_recommend_user_head);
  85. mUserPhone = view.findViewById(R.id.fragment_recommend_user_phone);
  86. mCommentCount = view.findViewById(R.id.fragment_recommend_comment_num);
  87. mCollentStatus = view.findViewById(R.id.fragment_recommend_collection_status);
  88. mThumbCount = view.findViewById(R.id.fragment_recommend_thumbs_num);
  89. isFollow = view.findViewById(R.id.fragment_main_recommend_isfollow);
  90. isUserVip = view.findViewById(R.id.fragment_recommend_app_user_isvip);
  91. //录音按钮背景旋转
  92. mToRecordRotationbg = mToRecordLayout.findViewById(R.id.fragment_recommend_to_record_bg);
  93. mRotationImgAnim = ObjectAnimator.ofFloat(mToRecordRotationbg, "rotation", 0.0F, 359.0F);
  94. mRotationImgAnim.setRepeatCount(-1);
  95. mRotationImgAnim.setDuration(1500);
  96. LinearInterpolator interpolator = new LinearInterpolator();
  97. mRotationImgAnim.setInterpolator(interpolator); //设置匀速旋转,不卡顿 icon_anim.start();
  98. mRotationImgAnim.start();
  99. //录音按钮缩小放大
  100. mToRecordScaleIcon = mToRecordLayout.findViewById(R.id.fragment_recommend_to_record_icon);
  101. mToRecordScaleXAnim = ObjectAnimator.ofFloat(mToRecordScaleIcon, "scaleX", 1F, 1.2F);//设置Y轴的立体旋转动画
  102. mToRecordScaleXAnim.setRepeatCount(-1);
  103. mToRecordScaleXAnim.setRepeatMode(ObjectAnimator.REVERSE);
  104. mToRecordScaleXAnim.setDuration(1000);
  105. LinearInterpolator interpolator2 = new LinearInterpolator();
  106. mToRecordScaleXAnim.setInterpolator(interpolator2); //设置匀速旋转,不卡顿 icon_anim.start();
  107. mToRecordScaleYAnim = ObjectAnimator.ofFloat(mToRecordScaleIcon, "scaleY", 1F, 1.2F);//设置Y轴的立体旋转动画
  108. mToRecordScaleYAnim.setRepeatCount(-1);
  109. mToRecordScaleYAnim.setRepeatMode(ObjectAnimator.REVERSE);
  110. mToRecordScaleYAnim.setDuration(1000);
  111. mToRecordScaleYAnim.setInterpolator(interpolator2); //设置匀速旋转,不卡顿 icon_anim.start();
  112. AnimatorSet animatorSet = new AnimatorSet();
  113. animatorSet.play(mToRecordScaleXAnim).with(mToRecordScaleYAnim);
  114. animatorSet.start();
  115. }
  116. @Override
  117. protected int getLayoutId() {
  118. return R.layout.fragment_main_recommend;
  119. }
  120. public RecommendFragmentPresenter getPresenter() {
  121. return mPresenter;
  122. }
  123. @Override
  124. protected void initViewListener() {
  125. if (hideBottom) {
  126. mVideoUp.setVisibility(View.GONE);
  127. mVideoNext.setVisibility(View.GONE);
  128. } else {
  129. addUiClickListener(mVideoUp, o -> {
  130. Logger.e("上一个视频");
  131. mPresenter.scrollToUpFunction(mRecyclerView);
  132. });
  133. addUiClickListener(mVideoNext, o -> {
  134. mPresenter.checkIsOver();
  135. mPresenter.scrollToNextFunction(mRecyclerView, true);
  136. // mPresenter.toNext(mRecyclerView);
  137. Logger.e("下一个视频");
  138. });
  139. }
  140. addUiClickListener(mToRecordLayout, o -> {
  141. mPresenter.getUserApi().postUserEvent(getActivity(), UserEventEnum.EVENT_RECREAD.getEvent());
  142. if (EfunboxUtil.checkLogin(getActivity())) {
  143. //登陆了,判断是否是VIP
  144. if (EfunboxUtil.checkIsVip()) {
  145. //如果是VIP
  146. Bundle bundle = new Bundle();
  147. bundle.putString("exampleId", mPresenter.getCurVideoExampleId().toString());
  148. toNextActivity(RecordActivity.class, bundle);
  149. } else {
  150. EfunboxUtil.userPay(getActivity());
  151. }
  152. }
  153. });
  154. mPresenter.initVideoList(mRecyclerView, mFragmentType, startPosition);
  155. }
  156. @Override
  157. public void showLoading() {
  158. }
  159. @Override
  160. public void hideLoading() {
  161. }
  162. @Override
  163. public void onError(String errMessage) {
  164. }
  165. @Override
  166. public void onPause() {
  167. mPresenter.fragmentPause(mRecyclerView);
  168. super.onPause();
  169. }
  170. @Override
  171. public void onResume() {
  172. mPresenter.fragmentResume(mRecyclerView);
  173. if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
  174. if (Consts.getmConstsBaiDuUserBean() != null) {
  175. isUserVip.setVisibility(View.INVISIBLE);
  176. }
  177. } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) || Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
  178. isUserVip.setEnabled(false);
  179. isUserVip.postDelayed(new Runnable() {
  180. @Override
  181. public void run() {
  182. if (Consts.isIsYFVip()) {
  183. isUserVip.setVisibility(View.INVISIBLE);
  184. }
  185. isUserVip.setEnabled(true);
  186. }
  187. }, 500);
  188. }
  189. super.onResume();
  190. }
  191. @Override
  192. public ViewGroup getRootView() {
  193. return (ViewGroup) mRootView;
  194. }
  195. public void hiddenBottomView() {
  196. hideBottom = true;
  197. }
  198. public void scrollPosition(int position) {
  199. startPosition = position;
  200. }
  201. public void setDataJson(String json) {
  202. mDataJson = json;
  203. }
  204. public void setInToPage(String page) {
  205. intoPage = page;
  206. }
  207. @Override
  208. public void setTopStatus(UserRecordBean bean) {
  209. //设置信息和点赞数等
  210. if (bean.getUser().getAvatar() == null || bean.getUser().getAvatar().equals("")) {
  211. if (bean.getUser().getGender().equals("1")) {
  212. //男
  213. GlideUtils.loadImage(getActivity(), R.drawable.activity_userinfo_setting_boy, mUserHead);
  214. } else {
  215. GlideUtils.loadImage(getActivity(), R.drawable.activity_userinfo_setting_girl, mUserHead);
  216. }
  217. } else {
  218. GlideUtils.loadCircleImage(getActivity(), bean.getUser().getAvatar(), mUserHead);
  219. }
  220. if (bean.getUser().getNickName().length() > 6) {
  221. mUserPhone.setText(bean.getUser().getNickName().substring(0, 6) + "...");
  222. } else {
  223. mUserPhone.setText(bean.getUser().getNickName());
  224. }
  225. mCommentCount.setText(bean.getUserRead().getCommentAmount());
  226. if (bean.getUser().getUid().equals(Consts.getUID()) || bean.getUser().getProfession().equals("官方")) {
  227. //是自己
  228. isFollow.setVisibility(View.INVISIBLE);
  229. } else {
  230. if (bean.getIsFans()) {
  231. isFollow.setVisibility(View.INVISIBLE);
  232. } else {
  233. isFollow.setVisibility(View.VISIBLE);
  234. }
  235. }
  236. if (bean.getIsFavorites() || bean.getFavoritesBean() != null) {
  237. mCollentStatus.setText("已收藏");
  238. ((ImageView) mCollectionLayout.findViewById(R.id.fragment_recommend_collection_icon)).setImageResource(R.drawable.fragment_recommend_collection_icon_s);
  239. } else {
  240. mCollentStatus.setText("未收藏");
  241. ((ImageView) mCollectionLayout.findViewById(R.id.fragment_recommend_collection_icon)).setImageResource(R.drawable.fragment_recommend_collection_icon);
  242. }
  243. if (bean.getIsLike()) {
  244. ((ImageView) mThumbsLayout.findViewById(R.id.fragment_recommend_thumbs_icon)).setImageResource(R.drawable.fragment_recommend_thumbs_up_s);
  245. } else {
  246. ((ImageView) mThumbsLayout.findViewById(R.id.fragment_recommend_thumbs_icon)).setImageResource(R.drawable.fragment_recommend_thumbs_up);
  247. }
  248. addUiClickListener(mUserHeadLayout, o -> {
  249. if (EfunboxUtil.checkLogin(getActivity())) {
  250. Bundle bundle = new Bundle();
  251. bundle.putString("other_uid", bean.getUser().getUid());
  252. bundle.putString("record_id", bean.getUserRead().getId());
  253. bundle.putString("intoPage", "RecommendFragment");
  254. toNextActivity(OthersRecordActivity.class, bundle);
  255. }
  256. });
  257. addUiClickListener(mCollectionLayout, o -> {
  258. if (EfunboxUtil.checkLogin(getActivity())) {
  259. mPresenter.doFavorites(bean.getUserRead());
  260. }
  261. });
  262. addUiClickListener(mThumbsLayout, o -> {
  263. if (EfunboxUtil.checkLogin(getActivity())) {
  264. mPresenter.doLike(bean.getUserRead());
  265. }
  266. });
  267. mThumbCount.setText(bean.getUserRead().getLikeAmount());
  268. addUiClickListener(mCommentLayout, o -> {
  269. if (EfunboxUtil.checkLogin(getActivity())) {
  270. Logger.e("点击了评论");
  271. Bundle bundle = new Bundle();
  272. bundle.putString("id", bean.getUserRead().getId());
  273. toNextActivity(CommentActivity.class, bundle);
  274. }
  275. });
  276. }
  277. @Override
  278. public void setFavorites(boolean isfavorites) {
  279. if (isfavorites) {
  280. mCollentStatus.setText("已收藏");
  281. ((ImageView) mCollectionLayout.findViewById(R.id.fragment_recommend_collection_icon)).setImageResource(R.drawable.fragment_recommend_collection_icon_s);
  282. } else {
  283. mCollentStatus.setText("未收藏");
  284. ((ImageView) mCollectionLayout.findViewById(R.id.fragment_recommend_collection_icon)).setImageResource(R.drawable.fragment_recommend_collection_icon);
  285. }
  286. }
  287. @Override
  288. public void setLikes(String count) {
  289. if (!count.equals(mThumbCount.getText().toString())) {
  290. ((ImageView) mThumbsLayout.findViewById(R.id.fragment_recommend_thumbs_icon)).setImageResource(R.drawable.fragment_recommend_thumbs_up_s);
  291. }
  292. mThumbCount.setText(count);
  293. }
  294. @Override
  295. public String getDataJson() {
  296. return mDataJson;
  297. }
  298. @Override
  299. public void showFirstIntoView() {
  300. boolean isFirst = (boolean) MMKVUtil.getInstance().decode("first_into", true);
  301. if (isFirst) {
  302. //是第一次进入
  303. ((BaseActivity) getActivity()).showFirstTouchView();
  304. MMKVUtil.getInstance().encode("first_into", false);
  305. } else {
  306. //不是第一次进入了
  307. }
  308. }
  309. @Override
  310. public void onDestroy() {
  311. mPresenter.activityDestory();
  312. mPresenter.detachView();
  313. super.onDestroy();
  314. }
  315. @Override
  316. public void onGetDisconnect() {
  317. }
  318. @Override
  319. public void onGetMobileConnect() {
  320. }
  321. @Override
  322. public void onGetWifiConnect() {
  323. }
  324. @Override
  325. public void onDestroyView() {
  326. super.onDestroyView();
  327. }
  328. @Override
  329. protected void botHandleIntent(BotIntent intent, String customData) {
  330. super.botHandleIntent(intent, customData);
  331. Logger.e("botHandleIntent:" + customData);
  332. if (EfunboxUtil.checkIsVip()) {
  333. isUserVip.setVisibility(View.INVISIBLE);
  334. }
  335. }
  336. @Override
  337. protected void botOnClickLink(String url, HashMap<String, String> paramMap) {
  338. super.botOnClickLink(url, paramMap);
  339. Logger.e("botOnClickLink:" + url);
  340. }
  341. @Override
  342. protected void botOnHandleScreenNavigatorEvent(int event) {
  343. super.botOnHandleScreenNavigatorEvent(event);
  344. Logger.e("botOnHandleScreenNavigatorEvent:");
  345. }
  346. @Override
  347. protected void botOnLinkAccountSucceed(String s, String s1) {
  348. super.botOnLinkAccountSucceed(s, s1);
  349. Logger.e("botOnHandleScreenNavigatorEvent:");
  350. }
  351. @Override
  352. protected void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
  353. super.botOnChargeStatusUpdated(purchaseResult, authorizationAmount, capturedAmount, creationTimestamp, baiduOrderReferenceId, sellerOrderId, msg);
  354. Logger.e("botOnHandleScreenNavigatorEvent:");
  355. }
  356. @Override
  357. protected void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
  358. super.botOnBuyStatusUpdated(purchaseResult, productId, baiduOrderId, sellerOrderId, msg, token);
  359. Logger.e("botOnBuyStatusUpdated:");
  360. }
  361. }