MemberActivity.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package com.datarecovery.master.module.member;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.util.Pair;
  7. import androidx.annotation.NonNull;
  8. import androidx.annotation.Nullable;
  9. import androidx.core.widget.NestedScrollView;
  10. import androidx.recyclerview.widget.GridLayoutManager;
  11. import androidx.recyclerview.widget.LinearLayoutManager;
  12. import com.atmob.app.lib.base.BaseActivity;
  13. import com.atmob.common.logging.AtmobLog;
  14. import com.atmob.common.ui.SizeUtil;
  15. import com.datarecovery.master.databinding.ActivityMemberBinding;
  16. import com.datarecovery.master.dialog.AlipayQrCodeDialog;
  17. import com.datarecovery.master.dialog.ChoosePaymentWayDialog;
  18. import com.datarecovery.master.dialog.CommonLoadingDialog;
  19. import com.datarecovery.master.dialog.MemberRetentionDialog;
  20. import com.datarecovery.master.dialog.WechatPayQrCodeDialog;
  21. import com.datarecovery.master.module.audiorecover.AudioRecoverActivity;
  22. import com.datarecovery.master.module.filerecover.FileRecoverActivity;
  23. import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
  24. import com.datarecovery.master.module.videorecover.VideoRecoverActivity;
  25. import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
  26. import com.datarecovery.master.utils.BoxingUtil;
  27. import com.datarecovery.master.utils.GridLayoutItemDecoration;
  28. import com.gyf.immersionbar.ImmersionBar;
  29. import java.util.Objects;
  30. import dagger.hilt.android.AndroidEntryPoint;
  31. @AndroidEntryPoint
  32. public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
  33. public static final String MEMBER_TYPE = "member_type";
  34. private MemberViewModel memberViewModel;
  35. private GoodsItemAdapter goodsItemAdapter;
  36. private NormalScenesAdapter normalScenesAdapter;
  37. private SuperScenesAdapter superScenesAdapter;
  38. private GridLayoutManager gridLayoutManager;
  39. private GridLayoutItemDecoration gridLayoutItemDecoration;
  40. private MemberEvaluateAdapter memberEvaluateAdapter;
  41. private MemberRetentionDialog memberRetentionDialog;
  42. private ChoosePaymentWayDialog choosePaymentWayDialog;
  43. private CommonLoadingDialog commonLoadingDialog;
  44. private AlipayQrCodeDialog alipayQrCodeDialog;
  45. private WechatPayQrCodeDialog wechatPayQrCodeDialog;
  46. private int maxScrollY;
  47. public static void start(Context context, @MemberType String type) {
  48. Intent intent = new Intent(context, MemberActivity.class);
  49. if (!(context instanceof Activity)) {
  50. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  51. }
  52. intent.putExtra(MEMBER_TYPE, type);
  53. context.startActivity(intent);
  54. }
  55. @Override
  56. protected void onCreate(@Nullable Bundle savedInstanceState) {
  57. super.onCreate(savedInstanceState);
  58. initView();
  59. initObserver();
  60. initData();
  61. }
  62. private void initData() {
  63. Intent intent = getIntent();
  64. if (intent != null) {
  65. memberViewModel.setMemberType(intent.getStringExtra(MEMBER_TYPE));
  66. }
  67. }
  68. private void initView() {
  69. goodsItemAdapter = new GoodsItemAdapter(this);
  70. binding.memberDetailList.setAdapter(goodsItemAdapter);
  71. binding.memberDetailList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
  72. goodsItemAdapter.setOnItemSelectListener(goodsBean -> memberViewModel.setSelectBean(goodsBean));
  73. normalScenesAdapter = new NormalScenesAdapter();
  74. superScenesAdapter = new SuperScenesAdapter();
  75. gridLayoutManager = new GridLayoutManager(this, 4);
  76. binding.scenesRyView.setLayoutManager(gridLayoutManager);
  77. gridLayoutItemDecoration = new GridLayoutItemDecoration();
  78. binding.scenesRyView.addItemDecoration(gridLayoutItemDecoration);
  79. memberEvaluateAdapter = new MemberEvaluateAdapter();
  80. binding.userEvaluateRyView.setLayoutManager(new LinearLayoutManager(this));
  81. binding.userEvaluateRyView.setAdapter(memberEvaluateAdapter);
  82. binding.iconBack.setOnClickListener(v -> onBackPressed());
  83. maxScrollY = (int) (SizeUtil.getScreenHeight() * 0.2f);
  84. binding.nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
  85. if (scrollY > maxScrollY) {
  86. binding.viewStatusBar.setAlpha(1f);
  87. binding.viewToolBar.setAlpha(1f);
  88. binding.tvTitle.setAlpha(1f);
  89. } else {
  90. binding.viewStatusBar.setAlpha(scrollY * 1f / maxScrollY);
  91. binding.viewToolBar.setAlpha(scrollY * 1f / maxScrollY);
  92. binding.tvTitle.setAlpha(scrollY * 1f / maxScrollY);
  93. }
  94. });
  95. }
  96. private void initObserver() {
  97. memberViewModel.getOnSubscribeSuccessEvent().observe(this, orderId -> {
  98. dismissQrCodeDialog(orderId);
  99. setPaySuccessGo();
  100. });
  101. memberViewModel.getGoTargetActEvent().observe(this, o -> setPaySuccessGo());
  102. memberViewModel.getShowAliQRPaymentEvent().observe(this, this::showAlipayQrCodeDialog);
  103. memberViewModel.getShowWxQRPaymentEvent().observe(this, this::showWxQrCodeDialog);
  104. memberViewModel.getShowLoadingEvent().observe(this, this::showLoading);
  105. memberViewModel.getMemberGoodsList().observe(this, goodsItemAdapter::submit);
  106. memberViewModel.getSelectBean().observe(this, bean -> {
  107. if (bean == null) {
  108. return;
  109. }
  110. if (Objects.equals(bean.getAuths(), MemberType.APP_SUPER_RECOVER)) {
  111. gridLayoutManager.setSpanCount(4);
  112. gridLayoutItemDecoration.setParam(4, 0, 0.0361111111111111f);
  113. superScenesAdapter.setData(memberViewModel.getSuperScenesBeans());
  114. binding.scenesRyView.setAdapter(superScenesAdapter);
  115. } else {
  116. gridLayoutManager.setSpanCount(2);
  117. gridLayoutItemDecoration.setParam(2, 0, 0.0166666666666667f);
  118. normalScenesAdapter.setData(bean.getScenesArray());
  119. binding.scenesRyView.setAdapter(normalScenesAdapter);
  120. }
  121. });
  122. memberViewModel.getEvaluateList().observe(this, evaluateBeans -> memberEvaluateAdapter.submit(evaluateBeans));
  123. memberViewModel.getShowChoicePayWayDialog().observe(this, o -> showChoosePaymentWayDialog());
  124. }
  125. private void setPaySuccessGo() {
  126. finish();
  127. switch (memberViewModel.getMemberType()) {
  128. case MemberType.APP_WX_MESSAGE_RECOVER:
  129. case MemberType.APP_WX_FRIEND_RECOVER:
  130. WeChatRecoverActivity.start(this);
  131. break;
  132. case MemberType.APP_IMAGE_RECOVER:
  133. ImageRecoverActivity.start(this, ImageRecoverActivity.Type.RECOVER);
  134. break;
  135. case MemberType.APP_FILE_RECOVER:
  136. FileRecoverActivity.start(this);
  137. break;
  138. case MemberType.APP_VIDEO_RECOVER:
  139. VideoRecoverActivity.start(this);
  140. break;
  141. case MemberType.APP_AUDIO_RECOVER:
  142. AudioRecoverActivity.start(this);
  143. break;
  144. case MemberType.APP_IMAGE_CLEAN:
  145. ImageRecoverActivity.start(this, ImageRecoverActivity.Type.DELETE);
  146. break;
  147. }
  148. }
  149. private void showWxQrCodeDialog(Pair<String, String> params) {
  150. if (params == null || params.first == null || params.second == null) {
  151. return;
  152. }
  153. if (wechatPayQrCodeDialog == null) {
  154. wechatPayQrCodeDialog = new WechatPayQrCodeDialog(this);
  155. }
  156. wechatPayQrCodeDialog.show(params.first, params.second, memberViewModel);
  157. }
  158. private void showAlipayQrCodeDialog(Pair<String, String> params) {
  159. if (params == null || params.first == null || params.second == null) {
  160. return;
  161. }
  162. if (alipayQrCodeDialog == null) {
  163. alipayQrCodeDialog = new AlipayQrCodeDialog(this);
  164. }
  165. alipayQrCodeDialog.show(params.first, params.second, memberViewModel);
  166. }
  167. private void dismissQrCodeDialog(String orderId) {
  168. if (alipayQrCodeDialog != null) {
  169. if (Objects.equals(orderId, alipayQrCodeDialog.getCurrentOrderId())) {
  170. alipayQrCodeDialog.dismiss();
  171. }
  172. }
  173. if (wechatPayQrCodeDialog != null) {
  174. if (Objects.equals(orderId, wechatPayQrCodeDialog.getCurrentOrderId())) {
  175. wechatPayQrCodeDialog.dismiss();
  176. }
  177. }
  178. }
  179. private void showLoading(Boolean show) {
  180. if (BoxingUtil.boxing(show)) {
  181. if (commonLoadingDialog == null) {
  182. commonLoadingDialog = new CommonLoadingDialog(this);
  183. commonLoadingDialog.setMessageGone();
  184. }
  185. commonLoadingDialog.show();
  186. } else {
  187. if (commonLoadingDialog != null) {
  188. commonLoadingDialog.dismiss();
  189. }
  190. }
  191. }
  192. private void showChoosePaymentWayDialog() {
  193. if (choosePaymentWayDialog == null) {
  194. choosePaymentWayDialog = new ChoosePaymentWayDialog(this, this, memberViewModel.getSubscribeTxt(), memberViewModel.getPayWayList().getValue());
  195. }
  196. choosePaymentWayDialog.setActionHandler((payPlatform, payMethod) -> memberViewModel.submitOrder(payPlatform, payMethod));
  197. choosePaymentWayDialog.paymentShow();
  198. }
  199. private void showMemberRetentionDialog() {
  200. if (memberRetentionDialog == null) {
  201. memberRetentionDialog = new MemberRetentionDialog(this)
  202. .setActionHandler(new MemberRetentionDialog.ActionHandler() {
  203. @Override
  204. public void onCloseClick() {
  205. finish();
  206. }
  207. @Override
  208. public void onContinueClick() {
  209. memberViewModel.onRetainMemberSubscribeClick();
  210. }
  211. });
  212. }
  213. memberRetentionDialog.show();
  214. }
  215. @Override
  216. public void onBackPressed() {
  217. if (Objects.equals(memberViewModel.getMemberType(), MemberType.APP_IMAGE_CLEAN)) {
  218. super.onBackPressed();
  219. return;
  220. }
  221. if (!memberViewModel.isMember()) {
  222. showMemberRetentionDialog();
  223. } else {
  224. super.onBackPressed();
  225. }
  226. }
  227. @Override
  228. protected void configImmersion(@NonNull ImmersionBar immersionBar) {
  229. immersionBar.statusBarDarkFont(true);
  230. }
  231. @Override
  232. protected void initViewModel() {
  233. super.initViewModel();
  234. memberViewModel = getViewModelProvider().get(MemberViewModel.class);
  235. binding.setMemberViewModel(memberViewModel);
  236. }
  237. @Override
  238. protected boolean shouldImmersion() {
  239. return true;
  240. }
  241. }