RecommendFragment.java 15 KB

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