MemberActivity.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. package com.datarecovery.master.module.member;
  2. import android.annotation.SuppressLint;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.graphics.Color;
  7. import android.os.Bundle;
  8. import android.util.Pair;
  9. import androidx.annotation.NonNull;
  10. import androidx.annotation.Nullable;
  11. import androidx.recyclerview.widget.GridLayoutManager;
  12. import androidx.recyclerview.widget.LinearLayoutManager;
  13. import com.atmob.app.lib.base.BaseActivity;
  14. import com.datarecovery.master.R;
  15. import com.datarecovery.master.data.consts.EventId;
  16. import com.datarecovery.master.databinding.ActivityMemberBinding;
  17. import com.datarecovery.master.dialog.AlipayQrCodeDialog;
  18. import com.datarecovery.master.dialog.ChoosePaymentWayDialog;
  19. import com.datarecovery.master.dialog.CommonLoadingDialog;
  20. import com.datarecovery.master.dialog.MemberRetentionDialog;
  21. import com.datarecovery.master.dialog.WechatPayQrCodeDialog;
  22. import com.datarecovery.master.handler.EventHelper;
  23. import com.datarecovery.master.module.main.MainActivity;
  24. import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
  25. import com.datarecovery.master.utils.BoxingUtil;
  26. import com.datarecovery.master.utils.GridRecoverItemDecoration;
  27. import com.datarecovery.master.utils.Maps;
  28. import com.datarecovery.master.utils.ReportUtil;
  29. import com.datarecovery.master.utils.SpannableUtil;
  30. import com.datarecovery.master.widget.InformationSwitchBanner;
  31. import com.gyf.immersionbar.ImmersionBar;
  32. import java.util.Objects;
  33. import dagger.hilt.android.AndroidEntryPoint;
  34. @AndroidEntryPoint
  35. public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
  36. public static final String MEMBER_TYPE = "member_type";
  37. private MemberViewModel memberViewModel;
  38. private GoodsItemAdapter goodsItemAdapter;
  39. private NormalScenesAdapter normalScenesAdapter;
  40. private GridLayoutManager gridLayoutManager;
  41. private GridRecoverItemDecoration gridLayoutItemDecoration;
  42. private MemberEvaluateAdapter memberEvaluateAdapter;
  43. private MemberRetentionDialog memberRetentionDialog;
  44. private ChoosePaymentWayDialog choosePaymentWayDialog;
  45. private CommonLoadingDialog commonLoadingDialog;
  46. private AlipayQrCodeDialog alipayQrCodeDialog;
  47. private WechatPayQrCodeDialog wechatPayQrCodeDialog;
  48. public static void start(Context context, @MemberType String type) {
  49. Intent intent = new Intent(context, MemberActivity.class);
  50. if (!(context instanceof Activity)) {
  51. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  52. }
  53. intent.putExtra(MEMBER_TYPE, type);
  54. context.startActivity(intent);
  55. }
  56. @Override
  57. protected void onCreate(@Nullable Bundle savedInstanceState) {
  58. super.onCreate(savedInstanceState);
  59. initView();
  60. initObserver();
  61. initData();
  62. }
  63. private void initData() {
  64. Intent intent = getIntent();
  65. if (intent != null) {
  66. memberViewModel.setMemberType(intent.getStringExtra(MEMBER_TYPE));
  67. }
  68. initTextViewBanner();
  69. }
  70. @SuppressLint("UseCompatLoadingForDrawables")
  71. private void initTextViewBanner() {
  72. InformationSwitchBanner mTextSwitchBanner = new InformationSwitchBanner(this, binding.viewSwitcher);
  73. mTextSwitchBanner.setTextColor(getResources().getDrawable(R.drawable.icon_memeber_buy_avatar), 6, getResources().getColor(com.atmob.app.base.R.color.white), getResources().getColor(com.atmob.app.base.R.color.white));
  74. mTextSwitchBanner.update(memberViewModel.getInformationList());
  75. }
  76. private void initView() {
  77. addTopStatusBarHeight(binding.toolBar);
  78. goodsItemAdapter = new GoodsItemAdapter(this);
  79. binding.memberDetailList.setAdapter(goodsItemAdapter);
  80. binding.memberDetailList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
  81. goodsItemAdapter.setOnItemSelectListener(goodsBean -> memberViewModel.setSelectBean(goodsBean));
  82. normalScenesAdapter = new NormalScenesAdapter();
  83. gridLayoutManager = new GridLayoutManager(this, 2);
  84. gridLayoutItemDecoration = new GridRecoverItemDecoration(2, 0, 0.232926829268293f, false);
  85. binding.scenesRyView.addItemDecoration(gridLayoutItemDecoration);
  86. binding.scenesRyView.setLayoutManager(gridLayoutManager);
  87. binding.scenesRyView.setAdapter(normalScenesAdapter);
  88. memberEvaluateAdapter = new MemberEvaluateAdapter();
  89. binding.userEvaluateRyView.setLayoutManager(new LinearLayoutManager(this));
  90. binding.userEvaluateRyView.setAdapter(memberEvaluateAdapter);
  91. binding.toolBar.setNavigationOnClickListener(v -> onBackPressed());
  92. SpannableUtil.getAgreementSpannableStringBuilder(binding.tvBuyMemberDesc,
  93. getResources().getString(R.string.member_service_description_all),
  94. new String[]{getResources().getString(R.string.member_service_description)},
  95. Color.parseColor("#FCEAC7"),
  96. false,
  97. v -> {
  98. ServiceDescriptionActivity.start(this, memberViewModel.getServiceContentTxt());
  99. EventHelper.report(EventId.hf1001133, Maps.asMap(EventId.EVENT_ID, ReportUtil.getReportId(memberViewModel.getMemberType())));
  100. }
  101. );
  102. }
  103. private void initObserver() {
  104. memberViewModel.getOnSubscribeSuccessEvent().observe(this, orderId -> {
  105. dismissQrCodeDialog(orderId);
  106. setPaySuccessGo();
  107. });
  108. memberViewModel.getScenesDataList().observe(this, strings -> normalScenesAdapter.setData(strings));
  109. memberViewModel.getShowAliQRPaymentEvent().observe(this, this::showAlipayQrCodeDialog);
  110. memberViewModel.getShowWxQRPaymentEvent().observe(this, this::showWxQrCodeDialog);
  111. memberViewModel.getShowLoadingEvent().observe(this, this::showLoading);
  112. memberViewModel.getMemberGoodsList().observe(this, goodsItemAdapter::submit);
  113. memberViewModel.getEvaluateList().observe(this, evaluateBeans -> memberEvaluateAdapter.submit(evaluateBeans));
  114. memberViewModel.getShowChoicePayWayDialog().observe(this, o -> showChoosePaymentWayDialog());
  115. }
  116. private void setPaySuccessGo() {
  117. finish();
  118. switch (memberViewModel.getMemberType()) {
  119. case MemberType.APP_WX_MESSAGE_RECOVER:
  120. WeChatRecoverActivity.start(this, MemberType.APP_WX_MESSAGE_RECOVER);
  121. break;
  122. case MemberType.APP_WX_FRIEND_RECOVER:
  123. WeChatRecoverActivity.start(this, MemberType.APP_WX_FRIEND_RECOVER);
  124. break;
  125. case MemberType.APP_IMAGE_RECOVER:
  126. MainActivity.startToTargetActivity(this, MemberType.APP_IMAGE_RECOVER);
  127. break;
  128. case MemberType.APP_FILE_RECOVER:
  129. MainActivity.startToTargetActivity(this, MemberType.APP_FILE_RECOVER);
  130. break;
  131. case MemberType.APP_VIDEO_RECOVER:
  132. MainActivity.startToTargetActivity(this, MemberType.APP_VIDEO_RECOVER);
  133. break;
  134. case MemberType.APP_AUDIO_RECOVER:
  135. MainActivity.startToTargetActivity(this, MemberType.APP_AUDIO_RECOVER);
  136. break;
  137. case MemberType.APP_IMAGE_CLEAN:
  138. MainActivity.startToTargetActivity(this, MemberType.APP_IMAGE_CLEAN);
  139. break;
  140. }
  141. }
  142. private void showWxQrCodeDialog(Pair<String, String> params) {
  143. if (params == null || params.first == null || params.second == null) {
  144. return;
  145. }
  146. if (wechatPayQrCodeDialog == null) {
  147. wechatPayQrCodeDialog = new WechatPayQrCodeDialog(this);
  148. }
  149. wechatPayQrCodeDialog.show(params.first, params.second, (orderId, payWay, showLoading, isReportPay) -> memberViewModel.queryOrderStatus(orderId, payWay, showLoading, isReportPay));
  150. }
  151. private void showAlipayQrCodeDialog(Pair<String, String> params) {
  152. if (params == null || params.first == null || params.second == null) {
  153. return;
  154. }
  155. if (alipayQrCodeDialog == null) {
  156. alipayQrCodeDialog = new AlipayQrCodeDialog(this);
  157. }
  158. alipayQrCodeDialog.show(params.first, params.second, (orderId, payWay, showLoading, isReportPay) -> memberViewModel.queryOrderStatus(orderId, payWay, showLoading, isReportPay));
  159. }
  160. private void dismissQrCodeDialog(String orderId) {
  161. if (alipayQrCodeDialog != null) {
  162. if (Objects.equals(orderId, alipayQrCodeDialog.getCurrentOrderId())) {
  163. alipayQrCodeDialog.dismiss();
  164. }
  165. }
  166. if (wechatPayQrCodeDialog != null) {
  167. if (Objects.equals(orderId, wechatPayQrCodeDialog.getCurrentOrderId())) {
  168. wechatPayQrCodeDialog.dismiss();
  169. }
  170. }
  171. }
  172. private void showLoading(Boolean show) {
  173. if (BoxingUtil.boxing(show)) {
  174. if (commonLoadingDialog == null) {
  175. commonLoadingDialog = new CommonLoadingDialog(this);
  176. commonLoadingDialog.setMessageGone();
  177. }
  178. commonLoadingDialog.show();
  179. } else {
  180. if (commonLoadingDialog != null) {
  181. commonLoadingDialog.dismiss();
  182. }
  183. }
  184. }
  185. private void showChoosePaymentWayDialog() {
  186. if (choosePaymentWayDialog == null) {
  187. choosePaymentWayDialog = new ChoosePaymentWayDialog(this, this, memberViewModel.getSubscribeTxt(), memberViewModel.getPayWayList().getValue())
  188. .setActionHandler((payPlatform, payMethod) -> memberViewModel.submitOrder(payPlatform, payMethod));
  189. }
  190. choosePaymentWayDialog.paymentShow();
  191. }
  192. private void showMemberRetentionDialog() {
  193. if (memberRetentionDialog == null) {
  194. memberRetentionDialog = new MemberRetentionDialog(this)
  195. .setActionHandler(new MemberRetentionDialog.ActionHandler() {
  196. @Override
  197. public void onCloseClick() {
  198. EventHelper.report(EventId.hf1000607, Maps.asMap(EventId.EVENT_ID, ReportUtil.getReportId(memberViewModel.getMemberType())));
  199. finish();
  200. }
  201. @Override
  202. public void onContinueClick() {
  203. EventHelper.report(EventId.hf1000608, Maps.asMap(EventId.EVENT_ID, ReportUtil.getReportId(memberViewModel.getMemberType())));
  204. memberViewModel.onRetainMemberSubscribeClick();
  205. }
  206. });
  207. }
  208. memberRetentionDialog.show();
  209. }
  210. @Override
  211. public void onBackPressed() {
  212. if (Objects.equals(memberViewModel.getMemberType(), MemberType.APP_IMAGE_CLEAN)) {
  213. super.onBackPressed();
  214. return;
  215. }
  216. if (!memberViewModel.isMember()) {
  217. showMemberRetentionDialog();
  218. } else {
  219. super.onBackPressed();
  220. }
  221. }
  222. @Override
  223. protected void configImmersion(@NonNull ImmersionBar immersionBar) {
  224. immersionBar.statusBarDarkFont(true);
  225. }
  226. @Override
  227. protected void initViewModel() {
  228. super.initViewModel();
  229. memberViewModel = getViewModelProvider().get(MemberViewModel.class);
  230. binding.setMemberViewModel(memberViewModel);
  231. }
  232. @Override
  233. protected boolean shouldImmersion() {
  234. return true;
  235. }
  236. }