Browse Source

解决bug&其他剩余埋点

zk 1 year ago
parent
commit
8b61a73724
20 changed files with 271 additions and 25 deletions
  1. 15 2
      app/src/main/java/com/datarecovery/master/data/consts/EventId.java
  2. 6 0
      app/src/main/java/com/datarecovery/master/dialog/CommonSureDialog.java
  3. 4 0
      app/src/main/java/com/datarecovery/master/dialog/MemberRetentionDialog.java
  4. 10 2
      app/src/main/java/com/datarecovery/master/module/about/AboutActivity.java
  5. 9 0
      app/src/main/java/com/datarecovery/master/module/audiorecover/AudioRecoverViewModel.java
  6. 6 1
      app/src/main/java/com/datarecovery/master/module/example/ExampleFragment.java
  7. 4 0
      app/src/main/java/com/datarecovery/master/module/feedback/UserFeedbackViewModel.java
  8. 10 0
      app/src/main/java/com/datarecovery/master/module/filerecover/FileRecoverViewModel.java
  9. 24 0
      app/src/main/java/com/datarecovery/master/module/imgrecover/ImageRecoverViewModel.java
  10. 3 0
      app/src/main/java/com/datarecovery/master/module/login/LoginViewModel.java
  11. 18 10
      app/src/main/java/com/datarecovery/master/module/main/MainActivity.java
  12. 0 1
      app/src/main/java/com/datarecovery/master/module/member/MemberActivity.java
  13. 92 7
      app/src/main/java/com/datarecovery/master/module/member/MemberViewModel.java
  14. 18 2
      app/src/main/java/com/datarecovery/master/module/mine/MineFragment.java
  15. 11 0
      app/src/main/java/com/datarecovery/master/module/mine/MineViewModel.java
  16. 10 0
      app/src/main/java/com/datarecovery/master/module/videorecover/VideoRecoverViewModel.java
  17. 22 0
      app/src/main/java/com/datarecovery/master/module/wxrecover/WeChatViewModel.java
  18. 6 0
      app/src/main/java/com/datarecovery/master/utils/FilePermissionHelper.java
  19. 2 0
      app/src/main/java/com/datarecovery/master/utils/ReportUtil.java
  20. 1 0
      app/src/main/res/layout/fragment_mine.xml

+ 15 - 2
app/src/main/java/com/datarecovery/master/data/consts/EventId.java

@@ -37,8 +37,6 @@ public interface EventId {
     String hf1000606 = "hf1000606"; // 服务详情-支付失败 ID:放弃支付hf11028,网络错误hf11021,其他原因hf11022
     String hf1000607 = "hf1000607"; // 服务详情-挽留弹窗-关闭图标-点击
     String hf1000608 = "hf1000608"; // 服务详情-挽留弹窗-立即恢复按钮-点击
-    String hf1000609 = "hf1000609"; // 服务详情-页面停留时长 加页面ID:微信消息恢复hf11011,微信好友恢复hf11009,图片恢复hf11001,文件恢复hf11003,视频恢复hf11005,音频恢复hf11007,图片清除hf11013
-    String hf1000701 = "hf1000701"; // 各功能页面停留时长 加页面ID:微信消息恢复hf11012,微信好友恢复hf11010,图片恢复hf11002,文件恢复hf11004,视频恢复hf11006,音频恢复hf11008,图片清除hf11014
     String hf1000801 = "hf1000801"; // 案例-案例详情
     String hf1000901 = "hf1000901"; // 订单-点击
     String hf1001101 = "hf1001101"; // 我的-banner图-点击
@@ -56,4 +54,19 @@ public interface EventId {
     String hf1001113 = "hf1001113"; // 我的-退出账号-二次确认弹窗-确认
     String hf1001114 = "hf1001114"; // 我的-退出账号-二次确认弹窗-取消
 
+    String hf1000516 = "hf1000516"; //微信消息恢复-进入服务详情页-停留时长
+    String hf1000517 = "hf1000517"; //微信消息恢复-使用服务-停留时长
+    String hf1000518 = "hf1000518"; //微信好友恢复-进入服务详情页-停留时长
+    String hf1000519 = "hf1000519"; //微信好友恢复-使用服务-停留时长
+    String hf1000520 = "hf1000520"; //图片恢复-进入服务详情页-停留时长
+    String hf1000521 = "hf1000521"; //图片恢复-使用服务-停留时长
+    String hf1000522 = "hf1000522"; //文件恢复-进入服务详情页-停留时长
+    String hf1000523 = "hf1000523"; //文件恢复-使用服务-停留时长
+    String hf1000524 = "hf1000524"; //视频恢复-进入服务详情页-停留时长
+    String hf1000525 = "hf1000525"; //视频恢复-使用服务-停留时长
+    String hf1000526 = "hf1000526"; //音频恢复-进入服务详情页-停留时长
+    String hf1000527 = "hf1000527"; //音频恢复-使用服务-停留时长
+    String hf1000528 = "hf1000528"; //图片清除-进入服务详情页-停留时长
+    String hf1000529 = "hf1000529"; //图片清除-使用服务-停留时长
+
 }

+ 6 - 0
app/src/main/java/com/datarecovery/master/dialog/CommonSureDialog.java

@@ -1,6 +1,7 @@
 package com.datarecovery.master.dialog;
 
 import android.content.Context;
+import android.view.View;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.StringRes;
@@ -63,7 +64,12 @@ public class CommonSureDialog extends BaseDialog<DialogCommonSureBinding> {
         return this;
     }
 
+    public void setOnCancelClick(View.OnClickListener onClickListener) {
+        binding.setOnClickCancel(onClickListener);
+    }
+
     public interface OnDialogClickListener {
         void onClickSure();
     }
+
 }

+ 4 - 0
app/src/main/java/com/datarecovery/master/dialog/MemberRetentionDialog.java

@@ -6,7 +6,9 @@ import androidx.annotation.NonNull;
 
 import com.atmob.app.lib.base.BaseDialog;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.databinding.DialogMemberRetentionBinding;
+import com.datarecovery.master.handler.EventHelper;
 
 @BaseDialog.FullScreen
 public class MemberRetentionDialog extends BaseDialog<DialogMemberRetentionBinding> {
@@ -17,12 +19,14 @@ public class MemberRetentionDialog extends BaseDialog<DialogMemberRetentionBindi
         super(context, R.style.Theme_Common_Dialog);
         setCancelable(false);
         binding.setOnCloseClickListener(v -> {
+            EventHelper.report(EventId.hf1000607);
             if (actionHandler != null) {
                 actionHandler.onCloseClick();
             }
             dismiss();
         });
         binding.setOnContinueClickListener(v -> {
+            EventHelper.report(EventId.hf1000608);
             if (actionHandler != null) {
                 actionHandler.onContinueClick();
             }

+ 10 - 2
app/src/main/java/com/datarecovery/master/module/about/AboutActivity.java

@@ -9,7 +9,9 @@ import androidx.annotation.NonNull;
 
 import com.atmob.app.lib.base.BaseActivity;
 import com.datarecovery.master.data.consts.Constants;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.databinding.ActivityAboutBinding;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.browser.BrowserActivity;
 import com.datarecovery.master.utils.SystemUtil;
 import com.gyf.immersionbar.ImmersionBar;
@@ -51,7 +53,13 @@ public class AboutActivity extends BaseActivity<ActivityAboutBinding> {
         binding.tvVersionCode.setText(SystemUtil.getVersionName(getBaseContext()));
         binding.toolBar.setNavigationOnClickListener(v -> onBackPressed());
         addTopStatusBarHeight(binding.toolBar);
-        binding.setUserAgreementClick(v -> BrowserActivity.start(this, Constants.USER_AGREEMENT));
-        binding.setPrivacyAgreementClick(v -> BrowserActivity.start(this, Constants.PRIVACY_POLICY));
+        binding.setUserAgreementClick(v -> {
+            EventHelper.report(EventId.hf1001103);
+            BrowserActivity.start(this, Constants.USER_AGREEMENT);
+        });
+        binding.setPrivacyAgreementClick(v -> {
+            EventHelper.report(EventId.hf1001104);
+            BrowserActivity.start(this, Constants.PRIVACY_POLICY);
+        });
     }
 }

+ 9 - 0
app/src/main/java/com/datarecovery/master/module/audiorecover/AudioRecoverViewModel.java

@@ -8,7 +8,9 @@ import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.FileUtil;
@@ -77,6 +79,8 @@ public class AudioRecoverViewModel extends BaseViewModel {
             }
             return ContextUtil.getContext().getString(R.string.export_count, list.size());
         });
+        EventHelper.report(EventId.hf1000512);
+        EventHelper.timeEvent(EventId.hf1000527);
     }
 
 
@@ -352,4 +356,9 @@ public class AudioRecoverViewModel extends BaseViewModel {
         return list;
     }
 
+    @Override
+    protected void onCleared() {
+        super.onCleared();
+        EventHelper.report(EventId.hf1000527);
+    }
 }

+ 6 - 1
app/src/main/java/com/datarecovery/master/module/example/ExampleFragment.java

@@ -9,7 +9,9 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 
 import com.atmob.app.lib.base.BaseFragment;
 import com.datarecovery.master.data.api.bean.ExampleBean;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.databinding.FragmentExampleBinding;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.browser.BrowserActivity;
 import com.gyf.immersionbar.ImmersionBar;
 
@@ -34,7 +36,10 @@ public class ExampleFragment extends BaseFragment<FragmentExampleBinding> {
         exampleAdapter = new ExampleAdapter(this);
         binding.ryExample.setLayoutManager(new LinearLayoutManager(getContext()));
         binding.ryExample.setAdapter(exampleAdapter);
-        exampleAdapter.setOnItemClickListener(itemBean -> BrowserActivity.start(getActivity(), itemBean.getLink()));
+        exampleAdapter.setOnItemClickListener(itemBean -> {
+            EventHelper.report(EventId.hf1000801);
+            BrowserActivity.start(getActivity(), itemBean.getLink());
+        });
     }
 
     private void initObserver() {

+ 4 - 0
app/src/main/java/com/datarecovery/master/module/feedback/UserFeedbackViewModel.java

@@ -6,6 +6,9 @@ import androidx.lifecycle.MutableLiveData;
 import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
+import com.datarecovery.master.handler.EventHelper;
+import com.datarecovery.master.utils.Maps;
 import com.datarecovery.master.utils.ToastUtil;
 
 import javax.inject.Inject;
@@ -41,6 +44,7 @@ public class UserFeedbackViewModel extends BaseViewModel {
             ToastUtil.show(R.string.feedback_hint, ToastUtil.LENGTH_SHORT);
             return;
         }
+        EventHelper.report(EventId.hf1001106, Maps.asMap("hf11029", etContent.getValue()));
         ToastUtil.show(R.string.feed_back_success, ToastUtil.LENGTH_SHORT);
         finishEvent.call();
     }

+ 10 - 0
app/src/main/java/com/datarecovery/master/module/filerecover/FileRecoverViewModel.java

@@ -8,7 +8,9 @@ import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.FileUtil;
@@ -65,6 +67,8 @@ public class FileRecoverViewModel extends BaseViewModel {
             return ContextUtil.getContext().getString(R.string.export_count, list.size());
         });
         for (int i = 0; i < tabTitle.length; i++) checkList.add(new MutableLiveData<>(false));
+        EventHelper.report(EventId.hf1000508);
+        EventHelper.timeEvent(EventId.hf1000523);
     }
 
     public LiveData<Integer> getCheckPosition() {
@@ -271,4 +275,10 @@ public class FileRecoverViewModel extends BaseViewModel {
         }
         this.selectedList.setValue(list);
     }
+
+    @Override
+    protected void onCleared() {
+        super.onCleared();
+        EventHelper.report(EventId.hf1000523);
+    }
 }

+ 24 - 0
app/src/main/java/com/datarecovery/master/module/imgrecover/ImageRecoverViewModel.java

@@ -1,5 +1,7 @@
 package com.datarecovery.master.module.imgrecover;
 
+import android.text.TextUtils;
+
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.Transformations;
@@ -8,7 +10,9 @@ import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.FileUtil;
 import com.datarecovery.master.utils.ImageDeepDetector;
@@ -374,9 +378,14 @@ public class ImageRecoverViewModel extends BaseViewModel {
 
 
     public void setType(@MemberType String type) {
+        if (!TextUtils.isEmpty(this.type)) {
+            return;
+        }
         this.type = type;
         switch (type) {
             case MemberType.APP_IMAGE_CLEAN:
+                EventHelper.report(EventId.hf1000514);
+                EventHelper.timeEvent(EventId.hf1000529);
                 selectedCountTxt = Transformations.map(selectedList, list -> {
                     if (list == null || list.isEmpty()) {
                         return ContextUtil.getContext().getString(R.string.delete);
@@ -385,6 +394,8 @@ public class ImageRecoverViewModel extends BaseViewModel {
                 });
                 break;
             case MemberType.APP_IMAGE_RECOVER:
+                EventHelper.report(EventId.hf1000506);
+                EventHelper.timeEvent(EventId.hf1000521);
                 selectedCountTxt = Transformations.map(selectedList, list -> {
                     if (list == null || list.isEmpty()) {
                         return ContextUtil.getContext().getString(R.string.export);
@@ -394,4 +405,17 @@ public class ImageRecoverViewModel extends BaseViewModel {
                 break;
         }
     }
+
+    @Override
+    protected void onCleared() {
+        super.onCleared();
+        switch (type) {
+            case MemberType.APP_IMAGE_CLEAN:
+                EventHelper.report(EventId.hf1000529);
+                break;
+            case MemberType.APP_IMAGE_RECOVER:
+                EventHelper.report(EventId.hf1000521);
+                break;
+        }
+    }
 }

+ 3 - 0
app/src/main/java/com/datarecovery/master/module/login/LoginViewModel.java

@@ -100,6 +100,7 @@ public class LoginViewModel extends BaseViewModel {
         if (isPhone(phoneNumText)) {
             doRequestVerificationCode(phoneNumText);
         } else {
+            EventHelper.report(EventId.hf1000305, Maps.asMap(EventId.EVENT_ID, "hf11034"));
             ToastUtil.show(R.string.login_phone_num_11, ToastUtil.LENGTH_SHORT);
         }
     }
@@ -128,11 +129,13 @@ public class LoginViewModel extends BaseViewModel {
                     public void onError(@NonNull Throwable e) {
                         showLoading.setValue(false);
                         if (e instanceof AccountRepository.RequestCodeTooOftenException) {
+                            EventHelper.report(EventId.hf1000305, Maps.asMap(EventId.EVENT_ID, "hf11022"));
                             ToastUtil.show(R.string.login_request_code_frequently_toast, ToastUtil.LENGTH_SHORT);
                             return;
                         }
                         e.printStackTrace();
                         stopGetCodeCountdown();
+                        EventHelper.report(EventId.hf1000305, Maps.asMap(EventId.EVENT_ID, "hf11022"));
                         ToastUtil.show(R.string.login_verification_code_request_failed_toast, ToastUtil.LENGTH_SHORT);
                     }
                 });

+ 18 - 10
app/src/main/java/com/datarecovery/master/module/main/MainActivity.java

@@ -7,11 +7,19 @@ import android.os.Bundle;
 import android.view.KeyEvent;
 
 import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
 
 import com.atmob.app.lib.base.BaseActivity;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.databinding.ActivityMainBinding;
 import com.datarecovery.master.databinding.ItemMainTabLayoutBinding;
+import com.datarecovery.master.handler.EventHelper;
+import com.datarecovery.master.module.example.ExampleFragment;
+import com.datarecovery.master.module.homepage.HomePageFragment;
+import com.datarecovery.master.module.mine.MineFragment;
+import com.datarecovery.master.module.order.OrderFragment;
+import com.datarecovery.master.utils.Maps;
 import com.datarecovery.master.utils.ToastUtil;
 import com.google.android.material.tabs.TabLayout;
 import com.google.android.material.tabs.TabLayoutMediator;
@@ -70,16 +78,16 @@ public class MainActivity extends BaseActivity<ActivityMainBinding> {
                     itemBinding.tabText.setSelected(true);
                     itemBinding.tabIcon.setSelected(true);
                 }
-//                Class<? extends Fragment> pagerClass = mainPagerAdapter.getMainPagerItemByPosition(tab.getPosition()).getPagerClass();
-//                if (pagerClass.equals(FriendsFragment.class)) {
-//
-//                } else if (pagerClass.equals(LocationFragment.class)) {
-//
-//                } else if (pagerClass.equals(MessageFragment.class)) {
-//
-//                } else if (pagerClass.equals(MineFragment.class)) {
-//
-//                }
+                Class<? extends Fragment> pagerClass = mainPagerAdapter.getMainPagerItemByPosition(tab.getPosition()).getPagerClass();
+                if (pagerClass.equals(HomePageFragment.class)) {
+                    EventHelper.report(EventId.hf1000515, Maps.asMap(EventId.EVENT_ID, "hf11015"));
+                } else if (pagerClass.equals(ExampleFragment.class)) {
+                    EventHelper.report(EventId.hf1000515, Maps.asMap(EventId.EVENT_ID, "hf11016"));
+                } else if (pagerClass.equals(OrderFragment.class)) {
+                    EventHelper.report(EventId.hf1000901);
+                } else if (pagerClass.equals(MineFragment.class)) {
+                    EventHelper.report(EventId.hf1000515, Maps.asMap(EventId.EVENT_ID, "hf11018"));
+                }
             }
 
             @Override

+ 0 - 1
app/src/main/java/com/datarecovery/master/module/member/MemberActivity.java

@@ -117,7 +117,6 @@ public class MemberActivity extends BaseActivity<ActivityMemberBinding> {
             dismissQrCodeDialog(orderId);
             setPaySuccessGo();
         });
-        memberViewModel.getGoTargetActEvent().observe(this, o -> setPaySuccessGo());
         memberViewModel.getShowAliQRPaymentEvent().observe(this, this::showAlipayQrCodeDialog);
         memberViewModel.getShowWxQRPaymentEvent().observe(this, this::showWxQrCodeDialog);
         memberViewModel.getShowLoadingEvent().observe(this, this::showLoading);

+ 92 - 7
app/src/main/java/com/datarecovery/master/module/member/MemberViewModel.java

@@ -17,6 +17,7 @@ import com.datarecovery.master.data.api.bean.WechatPaymentSignBean;
 import com.datarecovery.master.data.api.response.MemberDetailResponse;
 import com.datarecovery.master.data.api.response.MemberPayResponse;
 import com.datarecovery.master.data.consts.Constants;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.data.repositories.MemberRepository;
 import com.datarecovery.master.handler.EventHelper;
@@ -24,6 +25,7 @@ import com.datarecovery.master.module.login.LoginActivity;
 import com.datarecovery.master.module.member.bean.EvaluateBean;
 import com.datarecovery.master.module.member.bean.SuperScenesBean;
 import com.datarecovery.master.utils.BoxingUtil;
+import com.datarecovery.master.utils.Maps;
 import com.datarecovery.master.utils.OrderReportHelper;
 import com.datarecovery.master.utils.ReportUtil;
 import com.datarecovery.master.utils.RxHttpHandler;
@@ -68,7 +70,6 @@ public class MemberViewModel extends BaseViewModel {
     private List<SuperScenesBean> superScenesBeans;
 
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
-    private final SingleLiveEvent<?> goTargetActEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showChoicePayWayDialog = new SingleLiveEvent<>();
 
     private final SingleLiveEvent<Pair<String, String>> showWxQRPaymentEvent = new SingleLiveEvent<>();
@@ -86,10 +87,6 @@ public class MemberViewModel extends BaseViewModel {
     }
 
 
-    public LiveData<?> getGoTargetActEvent() {
-        return goTargetActEvent;
-    }
-
     public String getMemberType() {
         return memberType;
     }
@@ -123,6 +120,9 @@ public class MemberViewModel extends BaseViewModel {
     }
 
     public void setSelectBean(MemberGoodsBean bean) {
+        if (bean != null) {
+            EventHelper.report(EventId.hf1000601, Maps.asMap(EventId.EVENT_ID, ReportUtil.getReportId(memberType)));
+        }
         selectBean.setValue(bean);
     }
 
@@ -147,17 +147,54 @@ public class MemberViewModel extends BaseViewModel {
     }
 
     public void setMemberType(@MemberType String type) {
+        if (!TextUtils.isEmpty(memberType)) {
+            return;
+        }
         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));
         }
+        reportId();
         initScenes();
         initCommentData();
         refreshMemberDetail();
     }
 
+    private void reportId() {
+        switch (memberType) {
+            case MemberType.APP_WX_MESSAGE_RECOVER:
+                EventHelper.report(EventId.hf1000501);
+                EventHelper.timeEvent(EventId.hf1000516);
+                break;
+            case MemberType.APP_WX_FRIEND_RECOVER:
+                EventHelper.report(EventId.hf1000503);
+                EventHelper.timeEvent(EventId.hf1000518);
+                break;
+            case MemberType.APP_IMAGE_RECOVER:
+                EventHelper.report(EventId.hf1000505);
+                EventHelper.timeEvent(EventId.hf1000520);
+                break;
+            case MemberType.APP_FILE_RECOVER:
+                EventHelper.report(EventId.hf1000507);
+                EventHelper.timeEvent(EventId.hf1000522);
+                break;
+            case MemberType.APP_VIDEO_RECOVER:
+                EventHelper.report(EventId.hf1000509);
+                EventHelper.timeEvent(EventId.hf1000524);
+                break;
+            case MemberType.APP_AUDIO_RECOVER:
+                EventHelper.report(EventId.hf1000511);
+                EventHelper.timeEvent(EventId.hf1000526);
+                break;
+            case MemberType.APP_IMAGE_CLEAN:
+                EventHelper.report(EventId.hf1000513);
+                EventHelper.timeEvent(EventId.hf1000528);
+                break;
+        }
+    }
+
     private void initCommentData() {
         List<EvaluateBean> evaluateBeans = new ArrayList<>();
         evaluateBeans.add(new EvaluateBean(R.drawable.icon_evaluate_1, "冬季温暖优雅", "我非常满意数据恢复服务的效果。他们专业的团队帮助我成功恢复了丢失的文件,让我感到非常安心和放心。他们高效的工作速度和专业的技术水平让我对他们的服务印象深刻。强烈推荐!"));
@@ -272,6 +309,7 @@ public class MemberViewModel extends BaseViewModel {
 //            LoginActivity.start(ActivityUtil.getTopActivity());
 //            return;
 //        }
+        EventHelper.report(EventId.hf1000602);
         MemberGoodsBean currentSelected = selectBean.getValue();
         if (currentSelected == null) {
             return;
@@ -286,6 +324,15 @@ public class MemberViewModel extends BaseViewModel {
         if (bean == null) {
             return;
         }
+        if (payPlatform == 1 && payMethod == 2) {
+
+        } else if (payPlatform == 4 && payMethod == 2) {
+
+        } else if (payPlatform == 1 && payMethod == 1) {
+            EventHelper.report(EventId.hf1000603, Maps.asMap(EventId.EVENT_ID, "hf11023"));
+        } else if (payPlatform == 4 && payMethod == 1) {
+            EventHelper.report(EventId.hf1000603, Maps.asMap(EventId.EVENT_ID, "hf11024"));
+        }
         memberRepository.requestPayOrder(bean.getId(), payPlatform, payMethod).subscribe(new SingleObserver<MemberPayResponse>() {
             @Override
             public void onSubscribe(@NonNull Disposable d) {
@@ -365,8 +412,10 @@ public class MemberViewModel extends BaseViewModel {
             public void error(int errno, String error) {
                 if (errno == 6001) {
                     //用户取消支付
+                    EventHelper.report(EventId.hf1000606, Maps.asMap(EventId.EVENT_ID, "hf11028"));
                     return;
                 }
+                EventHelper.report(EventId.hf1000606, Maps.asMap(EventId.EVENT_ID, "hf11022"));
                 ToastUtil.show(R.string.member_payment_failed, ToastUtil.LENGTH_SHORT);
             }
 
@@ -374,8 +423,10 @@ public class MemberViewModel extends BaseViewModel {
             public void payError(int errno, String error) {
                 if (errno == 6001) {
                     //用户取消支付
+                    EventHelper.report(EventId.hf1000606, Maps.asMap(EventId.EVENT_ID, "hf11028"));
                     return;
                 }
+                EventHelper.report(EventId.hf1000606, Maps.asMap(EventId.EVENT_ID, "hf11022"));
                 ToastUtil.show(R.string.member_payment_failed, ToastUtil.LENGTH_SHORT);
             }
 
@@ -417,8 +468,15 @@ public class MemberViewModel extends BaseViewModel {
                 .subscribe(aBoolean -> {
                     showLoadingEvent.setValue(false);
                     if (BoxingUtil.boxing(aBoolean)) {
-                        if (BoxingUtil.boxing(accountRepository.getIsLogin().getValue())) {
-                            goTargetActEvent.call();
+                        EventHelper.report(EventId.hf1000604, Maps.asMap(EventId.EVENT_ID, ReportUtil.getReportId(memberType)));
+                        if (memberBean != null) {
+                            if (Objects.equals(memberBean.getAuths(), MemberType.APP_SUPER_RECOVER)) {
+                                EventHelper.report(EventId.hf1000605, Maps.asMap(EventId.EVENT_ID, "hf11026"));
+                            } else if (Objects.equals(memberBean.getAuths(), MemberType.APP_IMAGE_CLEAN) && memberBean.isPopular()) {
+                                EventHelper.report(EventId.hf1000605, Maps.asMap(EventId.EVENT_ID, "hf11027"));
+                            } else {
+                                EventHelper.report(EventId.hf1000605, Maps.asMap(EventId.EVENT_ID, "hf11025"));
+                            }
                         }
                         onSubscribeSuccessEvent.setValue(orderId);
                     } else {
@@ -431,4 +489,31 @@ public class MemberViewModel extends BaseViewModel {
     }
 
 
+    @Override
+    protected void onCleared() {
+        super.onCleared();
+        switch (memberType) {
+            case MemberType.APP_WX_MESSAGE_RECOVER:
+                EventHelper.report(EventId.hf1000516);
+                break;
+            case MemberType.APP_WX_FRIEND_RECOVER:
+                EventHelper.report(EventId.hf1000518);
+                break;
+            case MemberType.APP_IMAGE_RECOVER:
+                EventHelper.report(EventId.hf1000520);
+                break;
+            case MemberType.APP_FILE_RECOVER:
+                EventHelper.report(EventId.hf1000522);
+                break;
+            case MemberType.APP_VIDEO_RECOVER:
+                EventHelper.report(EventId.hf1000524);
+                break;
+            case MemberType.APP_AUDIO_RECOVER:
+                EventHelper.report(EventId.hf1000526);
+                break;
+            case MemberType.APP_IMAGE_CLEAN:
+                EventHelper.report(EventId.hf1000528);
+                break;
+        }
+    }
 }

+ 18 - 2
app/src/main/java/com/datarecovery/master/module/mine/MineFragment.java

@@ -8,8 +8,10 @@ import androidx.annotation.Nullable;
 
 import com.atmob.app.lib.base.BaseFragment;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.databinding.FragmentMineBinding;
 import com.datarecovery.master.dialog.CommonSureDialog;
+import com.datarecovery.master.handler.EventHelper;
 import com.gyf.immersionbar.ImmersionBar;
 
 import dagger.hilt.android.AndroidEntryPoint;
@@ -43,7 +45,14 @@ public class MineFragment extends BaseFragment<FragmentMineBinding> {
         if (exitDialog == null) {
             exitDialog = new CommonSureDialog(requireContext());
             exitDialog.setDialogTitle(R.string.dialog_kind_tips).setDialogContent(R.string.dialog_exit_content);
-            exitDialog.setOnDialogClickListener(() -> mineViewModel.onAccountExit());
+            exitDialog.setOnDialogClickListener(() -> {
+                EventHelper.report(EventId.hf1001113);
+                mineViewModel.onAccountExit();
+            });
+            exitDialog.setOnCancelClick(v -> {
+                exitDialog.dismiss();
+                EventHelper.report(EventId.hf1001114);
+            });
         }
         exitDialog.show();
     }
@@ -52,7 +61,14 @@ public class MineFragment extends BaseFragment<FragmentMineBinding> {
         if (logoutDialog == null) {
             logoutDialog = new CommonSureDialog(requireContext());
             logoutDialog.setDialogTitle(R.string.dialog_logout_tips).setDialogContent(R.string.dialog_logout_content);
-            logoutDialog.setOnDialogClickListener(() -> mineViewModel.onAccountLogout());
+            logoutDialog.setOnDialogClickListener(() -> {
+                EventHelper.report(EventId.hf1001110);
+                mineViewModel.onAccountLogout();
+            });
+            logoutDialog.setOnCancelClick(v -> {
+                logoutDialog.dismiss();
+                EventHelper.report(EventId.hf1001111);
+            });
         }
         logoutDialog.show();
     }

+ 11 - 0
app/src/main/java/com/datarecovery/master/module/mine/MineViewModel.java

@@ -10,8 +10,10 @@ import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.about.AboutActivity;
 import com.datarecovery.master.module.feedback.UserFeedbackActivity;
 import com.datarecovery.master.module.homepage.HomePageViewModel;
@@ -75,10 +77,12 @@ public class MineViewModel extends BaseViewModel {
     }
 
     public void onAboutClick() {
+        EventHelper.report(EventId.hf1001102);
         AboutActivity.start(ActivityUtil.getTopActivity());
     }
 
     public void onExitClick() {
+        EventHelper.report(EventId.hf1001112);
         showExitDialog.call();
     }
 
@@ -87,6 +91,7 @@ public class MineViewModel extends BaseViewModel {
     }
 
     public void onLogoutClick() {
+        EventHelper.report(EventId.hf1001109);
         showLogoutDialog.call();
     }
 
@@ -95,10 +100,12 @@ public class MineViewModel extends BaseViewModel {
     }
 
     public void onFeedbackClick() {
+        EventHelper.report(EventId.hf1001105);
         UserFeedbackActivity.start(ActivityUtil.getTopActivity());
     }
 
     public void onMemberClick() {
+        EventHelper.report(EventId.hf1001101);
         //指定跳转至微信消息恢复
         isHaveAuths(MemberType.APP_WX_MESSAGE_RECOVER, () -> WeChatRecoverActivity.start(ActivityUtil.getTopActivity(), MemberType.APP_WX_MESSAGE_RECOVER));
     }
@@ -110,4 +117,8 @@ public class MineViewModel extends BaseViewModel {
             MemberActivity.start(ActivityUtil.getTopActivity(), type);
         }
     }
+
+    public void onCustomerServiceClick() {
+        EventHelper.report(EventId.hf1001108);
+    }
 }

+ 10 - 0
app/src/main/java/com/datarecovery/master/module/videorecover/VideoRecoverViewModel.java

@@ -9,7 +9,9 @@ import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.data.KVUtils;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.DeviceFuncRepository;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.FileUtil;
 import com.datarecovery.master.utils.FilesSearch;
@@ -64,6 +66,8 @@ public class VideoRecoverViewModel extends BaseViewModel {
         if (KVUtils.getDefault().getBoolean(IS_SHOW_VIDEO_HINT, true)) {
             isShowHint.setValue(true);
         }
+        EventHelper.report(EventId.hf1000510);
+        EventHelper.timeEvent(EventId.hf1000525);
     }
 
     public LiveData<Boolean> getIsShowHint() {
@@ -215,4 +219,10 @@ public class VideoRecoverViewModel extends BaseViewModel {
         KVUtils.getDefault().putBoolean(IS_SHOW_VIDEO_HINT, false);
         isShowHint.setValue(false);
     }
+
+    @Override
+    protected void onCleared() {
+        super.onCleared();
+        EventHelper.report(EventId.hf1000525);
+    }
 }

+ 22 - 0
app/src/main/java/com/datarecovery/master/module/wxrecover/WeChatViewModel.java

@@ -9,8 +9,10 @@ import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.datarecovery.master.R;
 import com.datarecovery.master.data.api.response.FindOrderResponse;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.data.repositories.PayRepository;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.ClipboardUtil;
 import com.datarecovery.master.utils.ToastUtil;
@@ -111,11 +113,31 @@ public class WeChatViewModel extends BaseViewModel {
     }
 
     public void setType(String type) {
+        if (!TextUtils.isEmpty(this.type)) {
+            return;
+        }
         this.type = type;
+        if (Objects.equals(type, MemberType.APP_WX_MESSAGE_RECOVER)) {
+            EventHelper.report(EventId.hf1000502);
+            EventHelper.timeEvent(EventId.hf1000517);
+        } else if (Objects.equals(type, MemberType.APP_WX_FRIEND_RECOVER)) {
+            EventHelper.report(EventId.hf1000504);
+            EventHelper.timeEvent(EventId.hf1000519);
+        }
     }
 
     public String getType() {
         return type;
     }
 
+
+    @Override
+    protected void onCleared() {
+        super.onCleared();
+        if (Objects.equals(type, MemberType.APP_WX_MESSAGE_RECOVER)) {
+            EventHelper.report(EventId.hf1000517);
+        } else if (Objects.equals(type, MemberType.APP_WX_FRIEND_RECOVER)) {
+            EventHelper.report(EventId.hf1000519);
+        }
+    }
 }

+ 6 - 0
app/src/main/java/com/datarecovery/master/utils/FilePermissionHelper.java

@@ -11,8 +11,10 @@ import androidx.lifecycle.LifecycleOwner;
 
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
+import com.datarecovery.master.data.consts.EventId;
 import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.dialog.PermissionDialog;
+import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.login.LoginActivity;
 import com.datarecovery.master.module.member.MemberType;
 import com.datarecovery.master.utils.xfile.XFilePermission;
@@ -82,6 +84,7 @@ public class FilePermissionHelper {
                                     .setOnDialogClickListener(new PermissionDialog.OnDialogClickListener() {
                                         @Override
                                         public void onClickSure() {
+                                            EventHelper.report(EventId.hf1000402);
                                             PermissionUtil.requestWriteStoragePermission(activity, new PermissionUtil.PermissionCallback() {
                                                 @Override
                                                 public void onPermissionGranted() {
@@ -98,6 +101,7 @@ public class FilePermissionHelper {
 
                                         @Override
                                         public void onClickCancel() {
+                                            EventHelper.report(EventId.hf1000401);
                                             observer.onError(new CancelException());
                                         }
                                     });
@@ -122,6 +126,7 @@ public class FilePermissionHelper {
                                     .setOnDialogClickListener(new PermissionDialog.OnDialogClickListener() {
                                         @Override
                                         public void onClickSure() {
+                                            EventHelper.report(EventId.hf1000404);
                                             XFilePermission.requestAndroidDataPermission(activity, new XFilePermission.PermissionCallback() {
                                                 @Override
                                                 public void onPermissionGranted() {
@@ -138,6 +143,7 @@ public class FilePermissionHelper {
 
                                         @Override
                                         public void onClickCancel() {
+                                            EventHelper.report(EventId.hf1000403);
                                             observer.onError(new CancelException());
                                         }
                                     });

+ 2 - 0
app/src/main/java/com/datarecovery/master/utils/ReportUtil.java

@@ -21,6 +21,8 @@ public class ReportUtil {
             return "hf11007";
         } else if (Objects.equals(memberType, MemberType.APP_IMAGE_CLEAN)) {
             return "hf11013";
+        } else if (Objects.equals(memberType, MemberType.APP_SUPER_RECOVER)) {
+            return "hf11035";
         }
         return null;
     }

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

@@ -189,6 +189,7 @@
                         android:onClick="@{()->mineViewModel.onFeedbackClick()}" />
 
                     <include
+                        android:onClick="@{()->mineViewModel.onCustomerServiceClick()}"
                         layout="@layout/layout_item_settings"
                         settingsIcon="@{@drawable/icon_small_customer_service}"
                         settingsName="@{@string/mine_customer_service}"