Browse Source

首页增加功能权限检查

zk 1 year ago
parent
commit
0417ea4ffa

+ 3 - 3
app/src/main/java/com/datarecovery/master/data/api/response/FuncAuthsResponse.java

@@ -8,13 +8,13 @@ public class FuncAuthsResponse {
 
 
 
 
     @SerializedName("auths")
     @SerializedName("auths")
-    private List<?> auths;
+    private List<String> auths;
 
 
-    public List<?> getAuths() {
+    public List<String> getAuths() {
         return auths;
         return auths;
     }
     }
 
 
-    public void setAuths(List<?> auths) {
+    public void setAuths(List<String> auths) {
         this.auths = auths;
         this.auths = auths;
     }
     }
 }
 }

+ 5 - 1
app/src/main/java/com/datarecovery/master/data/repositories/AccountRepository.java

@@ -34,6 +34,7 @@ public class AccountRepository {
     private final MutableLiveData<?> memberStatusInfo = new MutableLiveData<>();
     private final MutableLiveData<?> memberStatusInfo = new MutableLiveData<>();
     public static String token;
     public static String token;
     private final AtmobApi atmobApi;
     private final AtmobApi atmobApi;
+    private final DeviceFuncRepository deviceFuncRepository;
 
 
     private int errorCodeTimes;
     private int errorCodeTimes;
 
 
@@ -44,10 +45,12 @@ public class AccountRepository {
     }
     }
 
 
     @Inject
     @Inject
-    public AccountRepository(AtmobApi atmobApi) {
+    public AccountRepository(AtmobApi atmobApi, DeviceFuncRepository deviceFuncRepository) {
         this.atmobApi = atmobApi;
         this.atmobApi = atmobApi;
+        this.deviceFuncRepository = deviceFuncRepository;
         loginPhoneNum.setValue(KVUtils.getDefault().getString(KEY_LOGIN_PHONE_NUM, null));
         loginPhoneNum.setValue(KVUtils.getDefault().getString(KEY_LOGIN_PHONE_NUM, null));
         isLogin.observeForever(isLogin -> AtmobLog.d(TAG, "isLogin: " + isLogin));
         isLogin.observeForever(isLogin -> AtmobLog.d(TAG, "isLogin: " + isLogin));
+        deviceFuncRepository.refreshFuncAuths();
     }
     }
 
 
     public LiveData<String> getLoginPhoneNum() {
     public LiveData<String> getLoginPhoneNum() {
@@ -61,6 +64,7 @@ public class AccountRepository {
     private void onLoginSuccess(String phoneNum, String token) {
     private void onLoginSuccess(String phoneNum, String token) {
         AccountRepository.token = token;
         AccountRepository.token = token;
         this.loginPhoneNum.setValue(phoneNum);
         this.loginPhoneNum.setValue(phoneNum);
+        deviceFuncRepository.refreshFuncAuths();
         KVUtils.getDefault().putString(KEY_LOGIN_PHONE_NUM, phoneNum);
         KVUtils.getDefault().putString(KEY_LOGIN_PHONE_NUM, phoneNum);
         KVUtils.getDefault().putString(KEY_LOGIN_TOKEN, token);
         KVUtils.getDefault().putString(KEY_LOGIN_TOKEN, token);
 
 

+ 32 - 0
app/src/main/java/com/datarecovery/master/data/repositories/DeviceFuncRepository.java

@@ -1,10 +1,18 @@
 package com.datarecovery.master.data.repositories;
 package com.datarecovery.master.data.repositories;
 
 
 
 
+import android.text.TextUtils;
+
 import com.atmob.app.lib.handler.RxHttpHandler;
 import com.atmob.app.lib.handler.RxHttpHandler;
+import com.atmob.common.text.TextUtil;
 import com.datarecovery.master.data.api.AtmobApi;
 import com.datarecovery.master.data.api.AtmobApi;
 import com.datarecovery.master.data.api.request.BaseRequest;
 import com.datarecovery.master.data.api.request.BaseRequest;
 import com.datarecovery.master.data.api.response.FuncAuthsResponse;
 import com.datarecovery.master.data.api.response.FuncAuthsResponse;
+import com.datarecovery.master.module.member.MemberType;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 
 
 import javax.inject.Inject;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import javax.inject.Singleton;
@@ -18,6 +26,7 @@ import atmob.rxjava.utils.RxJavaUtil;
 public class DeviceFuncRepository {
 public class DeviceFuncRepository {
 
 
 
 
+    private final List<String> authsList = new ArrayList<>();
     private final AtmobApi atmobApi;
     private final AtmobApi atmobApi;
 
 
     private boolean refreshFunAuthsFlag;
     private boolean refreshFunAuthsFlag;
@@ -28,6 +37,23 @@ public class DeviceFuncRepository {
     }
     }
 
 
 
 
+    public List<String> getAuthsList() {
+        return authsList;
+    }
+
+    public boolean isHaveAuth(@MemberType String auth) {
+        if (TextUtils.isEmpty(auth) || authsList.size() == 0) {
+            return false;
+        }
+        if (!Objects.equals(auth, MemberType.APP_IMAGE_CLEAN) && authsList.contains(MemberType.APP_SUPER_RECOVER)) {
+            return true;
+        }
+        if (Objects.equals(auth, MemberType.APP_WX_MESSAGE_RECOVER) || Objects.equals(auth, MemberType.APP_WX_FRIEND_RECOVER)) {
+            return authsList.contains(MemberType.APP_WX_MESSAGE_RECOVER) || authsList.contains(MemberType.APP_WX_FRIEND_RECOVER);
+        }
+        return authsList.contains(auth);
+    }
+
     public void refreshFuncAuths() {
     public void refreshFuncAuths() {
         if (refreshFunAuthsFlag) {
         if (refreshFunAuthsFlag) {
             return;
             return;
@@ -44,6 +70,8 @@ public class DeviceFuncRepository {
                     @Override
                     @Override
                     public void onSuccess(@NonNull FuncAuthsResponse funcAuthsResponse) {
                     public void onSuccess(@NonNull FuncAuthsResponse funcAuthsResponse) {
                         refreshFunAuthsFlag = false;
                         refreshFunAuthsFlag = false;
+                        clearAuths();
+                        authsList.addAll(funcAuthsResponse.getAuths());
                     }
                     }
 
 
                     @Override
                     @Override
@@ -52,4 +80,8 @@ public class DeviceFuncRepository {
                     }
                     }
                 });
                 });
     }
     }
+
+    public void clearAuths() {
+        authsList.clear();
+    }
 }
 }

+ 3 - 1
app/src/main/java/com/datarecovery/master/dialog/ChoosePaymentWayDialog.java

@@ -8,6 +8,7 @@ import android.view.LayoutInflater;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
 import androidx.lifecycle.LifecycleOwner;
 import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.MutableLiveData;
 
 
 
 
@@ -30,10 +31,11 @@ public class ChoosePaymentWayDialog extends BaseDialog<DialogChoosePaymentWayBin
     private final MutableLiveData<Integer> selectedPosition = new MutableLiveData<>(0);
     private final MutableLiveData<Integer> selectedPosition = new MutableLiveData<>(0);
 
 
     @SuppressLint("UseCompatLoadingForDrawables")
     @SuppressLint("UseCompatLoadingForDrawables")
-    public ChoosePaymentWayDialog(@NonNull Context context, LifecycleOwner lifecycleOwner, List<PayOptionsBean> paymentWayList) {
+    public ChoosePaymentWayDialog(@NonNull Context context, LifecycleOwner lifecycleOwner, LiveData<String> payNowTxt, List<PayOptionsBean> paymentWayList) {
         super(context, R.style.Theme_Common_BottomSheetDialog);
         super(context, R.style.Theme_Common_BottomSheetDialog);
         this.paymentWayList = paymentWayList;
         this.paymentWayList = paymentWayList;
         setCancelable(false);
         setCancelable(false);
+        binding.setPayNowTxt(payNowTxt);
         binding.setOnCloseClickListener(v -> dismiss());
         binding.setOnCloseClickListener(v -> dismiss());
         binding.setOnPayClickListener(v -> {
         binding.setOnPayClickListener(v -> {
             Integer index = selectedPosition.getValue();
             Integer index = selectedPosition.getValue();

+ 19 - 7
app/src/main/java/com/datarecovery/master/module/homepage/HomePageViewModel.java

@@ -5,12 +5,14 @@ import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
 import com.datarecovery.master.module.audiorecover.AudioRecoverActivity;
 import com.datarecovery.master.module.audiorecover.AudioRecoverActivity;
 import com.datarecovery.master.module.filerecover.FileRecoverActivity;
 import com.datarecovery.master.module.filerecover.FileRecoverActivity;
 import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
 import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
 import com.datarecovery.master.module.member.MemberActivity;
 import com.datarecovery.master.module.member.MemberActivity;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.module.videorecover.VideoRecoverActivity;
 import com.datarecovery.master.module.videorecover.VideoRecoverActivity;
+import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
 import com.datarecovery.master.utils.PermissionUtil;
 import com.datarecovery.master.utils.PermissionUtil;
 import com.datarecovery.master.utils.xfile.XFilePermission;
 import com.datarecovery.master.utils.xfile.XFilePermission;
 
 
@@ -41,10 +43,12 @@ public class HomePageViewModel extends BaseViewModel {
 
 
     private final SingleLiveEvent<?> requestManagePermission = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> requestManagePermission = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> requestAndroidDataPermission = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> requestAndroidDataPermission = new SingleLiveEvent<>();
+    private final DeviceFuncRepository deviceFuncRepository;
 
 
 
 
     @Inject
     @Inject
-    public HomePageViewModel() {
+    public HomePageViewModel(DeviceFuncRepository deviceFuncRepository) {
+        this.deviceFuncRepository = deviceFuncRepository;
         initList();
         initList();
     }
     }
 
 
@@ -79,17 +83,25 @@ public class HomePageViewModel extends BaseViewModel {
     }
     }
 
 
     public void onWxMessageRecoveryClick() {
     public void onWxMessageRecoveryClick() {
-        MemberActivity.start(ActivityUtil.getTopActivity(), MemberType.APP_WX_MESSAGE_RECOVER);
+        isHaveAuths(MemberType.APP_WX_MESSAGE_RECOVER, () -> WeChatRecoverActivity.start(ActivityUtil.getTopActivity()));
     }
     }
 
 
     public void onWxFriendRecoveryClick() {
     public void onWxFriendRecoveryClick() {
-
+        isHaveAuths(MemberType.APP_WX_FRIEND_RECOVER, () -> WeChatRecoverActivity.start(ActivityUtil.getTopActivity()));
     }
     }
 
 
     public void onImgRecoveryClick() {
     public void onImgRecoveryClick() {
         isCheckPermission(() -> ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.RECOVER));
         isCheckPermission(() -> ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.RECOVER));
     }
     }
 
 
+    public void isHaveAuths(@MemberType String type, NextStepCallback stepCallback) {
+        if (deviceFuncRepository.isHaveAuth(type)) {
+            if (stepCallback != null) stepCallback.onNextStep();
+        } else {
+            MemberActivity.start(ActivityUtil.getTopActivity(), type);
+        }
+    }
+
     /**
     /**
      * 判断是否有所需的存储权限
      * 判断是否有所需的存储权限
      *
      *
@@ -144,16 +156,16 @@ public class HomePageViewModel extends BaseViewModel {
             // TODO: 2024/1/9 需要判断是否会员
             // TODO: 2024/1/9 需要判断是否会员
             switch (bean.getFunctionId()) {
             switch (bean.getFunctionId()) {
                 case FunctionBean.AUDIO_RECOVERY:
                 case FunctionBean.AUDIO_RECOVERY:
-                    AudioRecoverActivity.start(ActivityUtil.getTopActivity());
+                    isHaveAuths(MemberType.APP_AUDIO_RECOVER, () -> AudioRecoverActivity.start(ActivityUtil.getTopActivity()));
                     break;
                     break;
                 case FunctionBean.FILE_RECOVERY:
                 case FunctionBean.FILE_RECOVERY:
-                    FileRecoverActivity.start(ActivityUtil.getTopActivity());
+                    isHaveAuths(MemberType.APP_FILE_RECOVER, () -> FileRecoverActivity.start(ActivityUtil.getTopActivity()));
                     break;
                     break;
                 case FunctionBean.IMG_CLEARING:
                 case FunctionBean.IMG_CLEARING:
-                    ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.DELETE);
+                    isHaveAuths(MemberType.APP_IMAGE_CLEAN, () -> ImageRecoverActivity.start(ActivityUtil.getTopActivity(), ImageRecoverActivity.Type.DELETE));
                     break;
                     break;
                 case FunctionBean.VIDEO_RECOVERY:
                 case FunctionBean.VIDEO_RECOVERY:
-                    VideoRecoverActivity.start(ActivityUtil.getTopActivity());
+                    isHaveAuths(MemberType.APP_VIDEO_RECOVER, () -> VideoRecoverActivity.start(ActivityUtil.getTopActivity()));
                     break;
                     break;
             }
             }
         });
         });

+ 5 - 0
app/src/main/java/com/datarecovery/master/module/member/GoodsItemAdapter.java

@@ -60,6 +60,11 @@ public class GoodsItemAdapter extends RecyclerView.Adapter<GoodsItemAdapter.View
                     memberGoodsBean.setSelect(true);
                     memberGoodsBean.setSelect(true);
                     setSelectBean(memberGoodsBean);
                     setSelectBean(memberGoodsBean);
                     break;
                     break;
+                } else if (Objects.equals(memberGoodsBean.getAuths(), MemberType.APP_IMAGE_CLEAN)) {
+                    MemberGoodsBean bean = list.get(list.size() - 1);
+                    bean.setSelect(true);
+                    setSelectBean(bean);
+                    break;
                 }
                 }
             }
             }
         });
         });

+ 34 - 4
app/src/main/java/com/datarecovery/master/module/member/MemberActivity.java

@@ -12,17 +12,19 @@ import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
 
 
 import com.atmob.app.lib.base.BaseActivity;
 import com.atmob.app.lib.base.BaseActivity;
-import com.datarecovery.master.R;
 import com.datarecovery.master.databinding.ActivityMemberBinding;
 import com.datarecovery.master.databinding.ActivityMemberBinding;
 import com.datarecovery.master.dialog.AlipayQrCodeDialog;
 import com.datarecovery.master.dialog.AlipayQrCodeDialog;
 import com.datarecovery.master.dialog.ChoosePaymentWayDialog;
 import com.datarecovery.master.dialog.ChoosePaymentWayDialog;
 import com.datarecovery.master.dialog.CommonLoadingDialog;
 import com.datarecovery.master.dialog.CommonLoadingDialog;
 import com.datarecovery.master.dialog.MemberRetentionDialog;
 import com.datarecovery.master.dialog.MemberRetentionDialog;
 import com.datarecovery.master.dialog.WechatPayQrCodeDialog;
 import com.datarecovery.master.dialog.WechatPayQrCodeDialog;
+import com.datarecovery.master.module.audiorecover.AudioRecoverActivity;
+import com.datarecovery.master.module.filerecover.FileRecoverActivity;
+import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
+import com.datarecovery.master.module.videorecover.VideoRecoverActivity;
 import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
 import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.GridLayoutItemDecoration;
 import com.datarecovery.master.utils.GridLayoutItemDecoration;
-import com.datarecovery.master.utils.ToastUtil;
 import com.gyf.immersionbar.ImmersionBar;
 import com.gyf.immersionbar.ImmersionBar;
 
 
 import java.util.Objects;
 import java.util.Objects;
@@ -97,7 +99,7 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
     private void initObserver() {
     private void initObserver() {
         memberViewModel.getOnSubscribeSuccessEvent().observe(this, orderId -> {
         memberViewModel.getOnSubscribeSuccessEvent().observe(this, orderId -> {
             dismissQrCodeDialog(orderId);
             dismissQrCodeDialog(orderId);
-            WeChatRecoverActivity.start(this);
+            setPaySuccessGo();
             finish();
             finish();
         });
         });
         memberViewModel.getShowAliQRPaymentEvent().observe(this, this::showAlipayQrCodeDialog);
         memberViewModel.getShowAliQRPaymentEvent().observe(this, this::showAlipayQrCodeDialog);
@@ -124,6 +126,30 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
         memberViewModel.getShowChoicePayWayDialog().observe(this, o -> showChoosePaymentWayDialog());
         memberViewModel.getShowChoicePayWayDialog().observe(this, o -> showChoosePaymentWayDialog());
     }
     }
 
 
+    private void setPaySuccessGo() {
+        switch (memberViewModel.getMemberType()) {
+            case MemberType.APP_WX_MESSAGE_RECOVER:
+            case MemberType.APP_WX_FRIEND_RECOVER:
+                WeChatRecoverActivity.start(this);
+                break;
+            case MemberType.APP_IMAGE_RECOVER:
+                ImageRecoverActivity.start(this, ImageRecoverActivity.Type.RECOVER);
+                break;
+            case MemberType.APP_FILE_RECOVER:
+                FileRecoverActivity.start(this);
+                break;
+            case MemberType.APP_VIDEO_RECOVER:
+                VideoRecoverActivity.start(this);
+                break;
+            case MemberType.APP_AUDIO_RECOVER:
+                AudioRecoverActivity.start(this);
+                break;
+            case MemberType.APP_IMAGE_CLEAN:
+                ImageRecoverActivity.start(this, ImageRecoverActivity.Type.DELETE);
+                break;
+        }
+    }
+
     private void showWxQrCodeDialog(Pair<String, String> params) {
     private void showWxQrCodeDialog(Pair<String, String> params) {
         if (params == null || params.first == null || params.second == null) {
         if (params == null || params.first == null || params.second == null) {
             return;
             return;
@@ -174,7 +200,7 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
 
 
     private void showChoosePaymentWayDialog() {
     private void showChoosePaymentWayDialog() {
         if (choosePaymentWayDialog == null) {
         if (choosePaymentWayDialog == null) {
-            choosePaymentWayDialog = new ChoosePaymentWayDialog(this, this, memberViewModel.getPayWayList().getValue());
+            choosePaymentWayDialog = new ChoosePaymentWayDialog(this, this, memberViewModel.getSubscribeTxt(), memberViewModel.getPayWayList().getValue());
         }
         }
         choosePaymentWayDialog.setActionHandler((payPlatform, payMethod) -> memberViewModel.submitOrder(payPlatform, payMethod));
         choosePaymentWayDialog.setActionHandler((payPlatform, payMethod) -> memberViewModel.submitOrder(payPlatform, payMethod));
         choosePaymentWayDialog.paymentShow();
         choosePaymentWayDialog.paymentShow();
@@ -200,6 +226,10 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
 
 
     @Override
     @Override
     public void onBackPressed() {
     public void onBackPressed() {
+        if (Objects.equals(memberViewModel.getMemberType(), MemberType.APP_IMAGE_CLEAN)) {
+            super.onBackPressed();
+            return;
+        }
         if (!memberViewModel.isMember()) {
         if (!memberViewModel.isMember()) {
             showMemberRetentionDialog();
             showMemberRetentionDialog();
         } else {
         } else {

+ 17 - 0
app/src/main/java/com/datarecovery/master/module/member/MemberViewModel.java

@@ -22,6 +22,7 @@ import com.datarecovery.master.data.repositories.MemberRepository;
 import com.datarecovery.master.module.login.LoginActivity;
 import com.datarecovery.master.module.login.LoginActivity;
 import com.datarecovery.master.module.member.bean.EvaluateBean;
 import com.datarecovery.master.module.member.bean.EvaluateBean;
 import com.datarecovery.master.module.member.bean.SuperScenesBean;
 import com.datarecovery.master.module.member.bean.SuperScenesBean;
+import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.ToastUtil;
 import com.datarecovery.master.utils.ToastUtil;
 import com.google.gson.Gson;
 import com.google.gson.Gson;
@@ -50,6 +51,7 @@ public class MemberViewModel extends BaseViewModel {
 
 
 
 
     private final MemberRepository memberRepository;
     private final MemberRepository memberRepository;
+    private final MutableLiveData<String> subscribeTxt = new MutableLiveData<>();
 
 
     private final MutableLiveData<List<MemberGoodsBean>> memberGoodsList = new MutableLiveData<>();
     private final MutableLiveData<List<MemberGoodsBean>> memberGoodsList = new MutableLiveData<>();
     private final MutableLiveData<List<PayOptionsBean>> payWayList = new MutableLiveData<>();
     private final MutableLiveData<List<PayOptionsBean>> payWayList = new MutableLiveData<>();
@@ -77,6 +79,14 @@ public class MemberViewModel extends BaseViewModel {
         this.gson = gson;
         this.gson = gson;
     }
     }
 
 
+    public String getMemberType() {
+        return memberType;
+    }
+
+    public LiveData<String> getSubscribeTxt() {
+        return subscribeTxt;
+    }
+
     public LiveData<Pair<String, String>> getShowWxQRPaymentEvent() {
     public LiveData<Pair<String, String>> getShowWxQRPaymentEvent() {
         return showWxQRPaymentEvent;
         return showWxQRPaymentEvent;
     }
     }
@@ -127,6 +137,11 @@ public class MemberViewModel extends BaseViewModel {
 
 
     public void setMemberType(@MemberType String type) {
     public void setMemberType(@MemberType String type) {
         this.memberType = type;
         this.memberType = type;
+        if (Objects.equals(memberType, MemberType.APP_IMAGE_CLEAN)) {
+            subscribeTxt.setValue(ContextUtil.getContext().getString(R.string.member_clear_buy));
+        } else {
+            subscribeTxt.setValue(ContextUtil.getContext().getString(R.string.member_recover_buy));
+        }
         initScenes();
         initScenes();
         initCommentData();
         initCommentData();
         refreshMemberDetail();
         refreshMemberDetail();
@@ -378,4 +393,6 @@ public class MemberViewModel extends BaseViewModel {
                     showLoadingEvent.setValue(false);
                     showLoadingEvent.setValue(false);
                 });
                 });
     }
     }
+
+
 }
 }

+ 21 - 1
app/src/main/java/com/datarecovery/master/module/mine/MineViewModel.java

@@ -11,9 +11,14 @@ import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.R;
 import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.data.repositories.AccountRepository;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
 import com.datarecovery.master.module.about.AboutActivity;
 import com.datarecovery.master.module.about.AboutActivity;
 import com.datarecovery.master.module.feedback.UserFeedbackActivity;
 import com.datarecovery.master.module.feedback.UserFeedbackActivity;
+import com.datarecovery.master.module.homepage.HomePageViewModel;
 import com.datarecovery.master.module.login.LoginActivity;
 import com.datarecovery.master.module.login.LoginActivity;
+import com.datarecovery.master.module.member.MemberActivity;
+import com.datarecovery.master.module.member.MemberType;
+import com.datarecovery.master.module.wxrecover.WeChatRecoverActivity;
 
 
 import javax.inject.Inject;
 import javax.inject.Inject;
 
 
@@ -27,10 +32,12 @@ public class MineViewModel extends BaseViewModel {
     private final SingleLiveEvent<?> showLogoutDialog = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showLogoutDialog = new SingleLiveEvent<>();
     private final LiveData<String> loginTips;
     private final LiveData<String> loginTips;
     private final AccountRepository accountRepository;
     private final AccountRepository accountRepository;
+    private final DeviceFuncRepository deviceFuncRepository;
 
 
     @Inject
     @Inject
-    public MineViewModel(AccountRepository accountRepository) {
+    public MineViewModel(AccountRepository accountRepository, DeviceFuncRepository deviceFuncRepository) {
         this.accountRepository = accountRepository;
         this.accountRepository = accountRepository;
+        this.deviceFuncRepository = deviceFuncRepository;
         loginTips = Transformations.map(accountRepository.getLoginPhoneNum(), phone -> {
         loginTips = Transformations.map(accountRepository.getLoginPhoneNum(), phone -> {
             if (TextUtils.isEmpty(phone)) {
             if (TextUtils.isEmpty(phone)) {
                 return ContextUtil.getContext().getString(R.string.mine_no_login);
                 return ContextUtil.getContext().getString(R.string.mine_no_login);
@@ -86,4 +93,17 @@ public class MineViewModel extends BaseViewModel {
     public void onFeedbackClick() {
     public void onFeedbackClick() {
         UserFeedbackActivity.start(ActivityUtil.getTopActivity());
         UserFeedbackActivity.start(ActivityUtil.getTopActivity());
     }
     }
+
+    public void onMemberClick() {
+        //指定跳转至微信消息恢复
+        isHaveAuths(MemberType.APP_WX_MESSAGE_RECOVER, () -> WeChatRecoverActivity.start(ActivityUtil.getTopActivity()));
+    }
+
+    public void isHaveAuths(@MemberType String type, HomePageViewModel.NextStepCallback stepCallback) {
+        if (deviceFuncRepository.isHaveAuth(type)) {
+            if (stepCallback != null) stepCallback.onNextStep();
+        } else {
+            MemberActivity.start(ActivityUtil.getTopActivity(), type);
+        }
+    }
 }
 }

+ 19 - 1
app/src/main/java/com/datarecovery/master/module/wxrecover/WeChatViewModel.java

@@ -45,7 +45,7 @@ public class WeChatViewModel extends BaseViewModel {
 
 
 
 
     public void findOrder() {
     public void findOrder() {
-        payRepository.findOrder(new String[]{MemberType.APP_WX_MESSAGE_RECOVER, MemberType.APP_WX_FRIEND_RECOVER, MemberType.APP_SUPER_RECOVER}).subscribe(new SingleObserver<FindOrderResponse>() {
+        payRepository.findOrder(new String[]{MemberType.APP_SUPER_RECOVER, MemberType.APP_WX_MESSAGE_RECOVER, MemberType.APP_WX_FRIEND_RECOVER}).subscribe(new SingleObserver<FindOrderResponse>() {
             @Override
             @Override
             public void onSubscribe(@NonNull Disposable d) {
             public void onSubscribe(@NonNull Disposable d) {
                 addDisposable(d);
                 addDisposable(d);
@@ -75,4 +75,22 @@ public class WeChatViewModel extends BaseViewModel {
         ClipboardUtil.copy(value.getTutorialUrl());
         ClipboardUtil.copy(value.getTutorialUrl());
         ToastUtil.show(R.string.copy_success, ToastUtil.LENGTH_SHORT);
         ToastUtil.show(R.string.copy_success, ToastUtil.LENGTH_SHORT);
     }
     }
+
+    public void onCopyOrderNoClick() {
+        FindOrderResponse value = findOrderDetail.getValue();
+        if (value == null) {
+            return;
+        }
+        ClipboardUtil.copy(value.getOutTradeNo());
+        ToastUtil.show(R.string.copy_success, ToastUtil.LENGTH_SHORT);
+    }
+
+    public void onCopyAuthCodeClick() {
+        FindOrderResponse value = findOrderDetail.getValue();
+        if (value == null) {
+            return;
+        }
+        ClipboardUtil.copy(value.getAuthCode());
+        ToastUtil.show(R.string.copy_success, ToastUtil.LENGTH_SHORT);
+    }
 }
 }

+ 4 - 3
app/src/main/res/layout/activity_member.xml

@@ -248,7 +248,8 @@
                 android:text="@string/member_action_title"
                 android:text="@string/member_action_title"
                 android:textColor="#202020"
                 android:textColor="#202020"
                 android:textSize="17sp"
                 android:textSize="17sp"
-                android:textStyle="bold" />
+                android:textStyle="bold"
+                android:visibility="gone" />
 
 
         </androidx.appcompat.widget.Toolbar>
         </androidx.appcompat.widget.Toolbar>
 
 
@@ -268,9 +269,9 @@
             android:background="@drawable/bg_member_buy_btn"
             android:background="@drawable/bg_member_buy_btn"
             android:elevation="10dp"
             android:elevation="10dp"
             android:gravity="center"
             android:gravity="center"
-            android:text="@string/member_buy"
-            android:textColor="#6A3420"
             android:onClick="@{() -> memberViewModel.onMemberSubscribeClick()}"
             android:onClick="@{() -> memberViewModel.onMemberSubscribeClick()}"
+            android:text="@{memberViewModel.getSubscribeTxt}"
+            android:textColor="#6A3420"
             android:textSize="16sp"
             android:textSize="16sp"
             android:textStyle="bold"
             android:textStyle="bold"
             app:layout_constraintBottom_toBottomOf="@+id/view_bottom"
             app:layout_constraintBottom_toBottomOf="@+id/view_bottom"

+ 7 - 2
app/src/main/res/layout/activity_wx_recover.xml

@@ -150,6 +150,7 @@
             app:layout_constraintTop_toBottomOf="@+id/v_order_line" />
             app:layout_constraintTop_toBottomOf="@+id/v_order_line" />
 
 
         <TextView
         <TextView
+            android:onClick="@{()-> wechatViewModel.onCopyOrderNoClick()}"
             android:id="@+id/tv_order_no_copy"
             android:id="@+id/tv_order_no_copy"
             android:layout_width="wrap_content"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
@@ -196,6 +197,7 @@
             app:layout_constraintTop_toBottomOf="@+id/space5" />
             app:layout_constraintTop_toBottomOf="@+id/space5" />
 
 
         <TextView
         <TextView
+            android:onClick="@{()-> wechatViewModel.onCopyAuthCodeClick()}"
             android:id="@+id/tv_auth_code_copy"
             android:id="@+id/tv_auth_code_copy"
             android:layout_width="wrap_content"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
@@ -212,14 +214,17 @@
 
 
 
 
         <TextView
         <TextView
-            android:layout_width="wrap_content"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/app_common_page_horizontal_padding"
             android:layout_marginEnd="6dp"
             android:layout_marginEnd="6dp"
+            android:gravity="center_vertical|right"
             android:text="@{wechatViewModel.findOrderDetail.authCode}"
             android:text="@{wechatViewModel.findOrderDetail.authCode}"
             android:textColor="#A7A7A7"
             android:textColor="#A7A7A7"
             android:textSize="14sp"
             android:textSize="14sp"
             app:layout_constraintBottom_toBottomOf="@+id/tv_auth_code"
             app:layout_constraintBottom_toBottomOf="@+id/tv_auth_code"
             app:layout_constraintEnd_toStartOf="@+id/tv_order_no_copy"
             app:layout_constraintEnd_toStartOf="@+id/tv_order_no_copy"
+            app:layout_constraintStart_toEndOf="@+id/tv_auth_code"
             app:layout_constraintTop_toTopOf="@id/tv_auth_code"
             app:layout_constraintTop_toTopOf="@id/tv_auth_code"
             tools:text="15419881810" />
             tools:text="15419881810" />
 
 
@@ -276,11 +281,11 @@
             app:layout_constraintDimensionRatio="360:72" />
             app:layout_constraintDimensionRatio="360:72" />
 
 
         <TextView
         <TextView
-            android:onClick="@{()-> wechatViewModel.onCopyLinkClick()}"
             android:layout_width="0dp"
             android:layout_width="0dp"
             android:layout_height="0dp"
             android:layout_height="0dp"
             android:background="@drawable/bg_common_btn"
             android:background="@drawable/bg_common_btn"
             android:gravity="center"
             android:gravity="center"
+            android:onClick="@{()-> wechatViewModel.onCopyLinkClick()}"
             android:text="@string/wx_recover_copy_link"
             android:text="@string/wx_recover_copy_link"
             android:textColor="@color/white"
             android:textColor="@color/white"
             android:textSize="16sp"
             android:textSize="16sp"

+ 5 - 1
app/src/main/res/layout/dialog_choose_payment_way.xml

@@ -6,6 +6,10 @@
     <data>
     <data>
 
 
         <variable
         <variable
+            name="payNowTxt"
+            type="androidx.lifecycle.LiveData&lt;String>" />
+
+        <variable
             name="onCloseClickListener"
             name="onCloseClickListener"
             type="android.view.View.OnClickListener" />
             type="android.view.View.OnClickListener" />
 
 
@@ -78,7 +82,7 @@
             android:background="@drawable/bg_member_buy_btn"
             android:background="@drawable/bg_member_buy_btn"
             android:gravity="center"
             android:gravity="center"
             android:onClickListener="@{onPayClickListener}"
             android:onClickListener="@{onPayClickListener}"
-            android:text="@string/member_pay_right_now"
+            android:text="@{payNowTxt}"
             android:textColor="#6A3420"
             android:textColor="#6A3420"
             android:textSize="16sp"
             android:textSize="16sp"
             android:textStyle="bold"
             android:textStyle="bold"

+ 3 - 1
app/src/main/res/layout/fragment_mine.xml

@@ -105,6 +105,7 @@
                     android:layout_width="match_parent"
                     android:layout_width="match_parent"
                     android:layout_height="0dp"
                     android:layout_height="0dp"
                     android:layout_marginHorizontal="@dimen/app_common_page_horizontal_padding"
                     android:layout_marginHorizontal="@dimen/app_common_page_horizontal_padding"
+                    android:onClick="@{()-> mineViewModel.onMemberClick()}"
                     android:src="@drawable/bg_mine_member"
                     android:src="@drawable/bg_mine_member"
                     app:layout_constraintDimensionRatio="984:234"
                     app:layout_constraintDimensionRatio="984:234"
                     app:layout_constraintTop_toBottomOf="@+id/space2" />
                     app:layout_constraintTop_toBottomOf="@+id/space2" />
@@ -192,7 +193,8 @@
                         settingsIcon="@{@drawable/icon_small_customer_service}"
                         settingsIcon="@{@drawable/icon_small_customer_service}"
                         settingsName="@{@string/mine_customer_service}"
                         settingsName="@{@string/mine_customer_service}"
                         android:layout_width="match_parent"
                         android:layout_width="match_parent"
-                        android:layout_height="wrap_content" />
+                        android:layout_height="wrap_content"
+                        android:visibility="gone" />
 
 
                     <include
                     <include
                         isGone="@{!mineViewModel.isLogin}"
                         isGone="@{!mineViewModel.isLogin}"

+ 2 - 1
app/src/main/res/values/strings.xml

@@ -138,7 +138,7 @@
     <string name="order_copy_link">复制教程链接</string>
     <string name="order_copy_link">复制教程链接</string>
     <string name="wechat_version_too_low_toast">请先更新到最新版本微信</string>
     <string name="wechat_version_too_low_toast">请先更新到最新版本微信</string>
     <string name="member_action_title">服务详情</string>
     <string name="member_action_title">服务详情</string>
-    <string name="member_buy">立即恢复</string>
+    <string name="member_recover_buy">立即恢复</string>
     <string name="member_func_title">选择服务</string>
     <string name="member_func_title">选择服务</string>
     <string name="member_buy_tag_txt">最多人买</string>
     <string name="member_buy_tag_txt">最多人买</string>
     <string name="rmb">¥</string>
     <string name="rmb">¥</string>
@@ -175,4 +175,5 @@
     <string name="wx_recover_copy_link">复制教程链接</string>
     <string name="wx_recover_copy_link">复制教程链接</string>
     <string name="copy_success">复制成功</string>
     <string name="copy_success">复制成功</string>
     <string name="no_login">账号未登录</string>
     <string name="no_login">账号未登录</string>
+    <string name="member_clear_buy">立即删除</string>
 </resources>
 </resources>