HomePageViewModel.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.datarecovery.master.module.homepage;
  2. import com.atmob.app.lib.base.BaseViewModel;
  3. import com.atmob.app.lib.livedata.SingleLiveEvent;
  4. import com.atmob.common.runtime.ActivityUtil;
  5. import com.atmob.common.runtime.ContextUtil;
  6. import com.datarecovery.master.R;
  7. import com.datarecovery.master.data.repositories.AccountRepository;
  8. import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
  9. import com.datarecovery.master.utils.PermissionUtil;
  10. import com.datarecovery.master.utils.xfile.XFilePermission;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import javax.inject.Inject;
  14. import atmob.reactivex.rxjava3.annotations.NonNull;
  15. import atmob.reactivex.rxjava3.core.Single;
  16. import atmob.reactivex.rxjava3.core.SingleEmitter;
  17. import atmob.reactivex.rxjava3.core.SingleObserver;
  18. import atmob.reactivex.rxjava3.core.SingleOnSubscribe;
  19. import atmob.reactivex.rxjava3.disposables.Disposable;
  20. import atmob.rxjava.utils.RxJavaUtil;
  21. import dagger.hilt.android.lifecycle.HiltViewModel;
  22. import android.os.Build;
  23. import android.util.Pair;
  24. import androidx.lifecycle.LiveData;
  25. @HiltViewModel
  26. public class HomePageViewModel extends BaseViewModel {
  27. private final List<Pair<CharSequence, CharSequence>> informationList = new ArrayList<>();
  28. private final List<FunctionBean> functionList = new ArrayList<>();
  29. private final SingleLiveEvent<?> requestManagePermission = new SingleLiveEvent<>();
  30. private final SingleLiveEvent<?> requestAndroidDataPermission = new SingleLiveEvent<>();
  31. @Inject
  32. public HomePageViewModel() {
  33. initList();
  34. }
  35. public List<FunctionBean> getFunctionList() {
  36. return functionList;
  37. }
  38. public List<Pair<CharSequence, CharSequence>> getInformationList() {
  39. return informationList;
  40. }
  41. private void initList() {
  42. informationList.add(new Pair<>("华为P40用户 微信消息恢复", "2分钟前"));
  43. informationList.add(new Pair<>("小米Mi 11用户 图片恢复", "4分钟前"));
  44. informationList.add(new Pair<>("三星S20用户 微信好友恢复", "5分钟前"));
  45. informationList.add(new Pair<>("OPPOFind X3用户 微信消息恢复", "9分钟前"));
  46. informationList.add(new Pair<>("VivoY72用户 通讯录恢复", "11分钟前"));
  47. informationList.add(new Pair<>("华为P30用户 微信好友恢复", "15分钟前"));
  48. functionList.add(new FunctionBean(FunctionBean.FILE_RECOVERY, R.string.home_page_file_recovery, R.drawable.icon_home_page_file_recovery));
  49. functionList.add(new FunctionBean(FunctionBean.VIDEO_RECOVERY, R.string.home_page_video_recovery, R.drawable.icon_home_page_video_recovery));
  50. functionList.add(new FunctionBean(FunctionBean.AUDIO_RECOVERY, R.string.home_page_audio_recovery, R.drawable.icon_home_page_audio_recovery));
  51. functionList.add(new FunctionBean(FunctionBean.IMG_CLEARING, R.string.home_page_img_clearing, R.drawable.icon_home_page_img_clearing));
  52. }
  53. public LiveData<?> getRequestManagePermission() {
  54. return requestManagePermission;
  55. }
  56. public LiveData<?> getRequestAndroidDataPermission() {
  57. return requestAndroidDataPermission;
  58. }
  59. public void onWxMessageRecoveryClick() {
  60. }
  61. public void onWxFriendRecoveryClick() {
  62. }
  63. public void onImgRecoveryClick() {
  64. isCheckPermission(() -> ImageRecoverActivity.start(ActivityUtil.getTopActivity()));
  65. }
  66. /**
  67. * 判断是否有所需的存储权限
  68. *
  69. * @param stepCallback 有权限的回调
  70. */
  71. public void isCheckPermission(NextStepCallback stepCallback) {
  72. Single.just(Build.VERSION.SDK_INT).map(sdkInt -> {
  73. //判断是否有所有文件权限
  74. boolean result = PermissionUtil.hasFilePermission();
  75. if (!result) {
  76. throw new RequestManageExternalException();
  77. }
  78. return sdkInt;
  79. }).map(sdkInt -> {
  80. if (sdkInt >= Build.VERSION_CODES.TIRAMISU) {
  81. return true;
  82. }
  83. boolean dataFolder = XFilePermission.hasAndroidDataPermission(ContextUtil.getContext());
  84. if (!dataFolder) {
  85. throw new RequestDataFolderException();
  86. }
  87. return true;
  88. })
  89. .compose(RxJavaUtil.SingleSchedule.io2Main())
  90. .subscribe(new SingleObserver<Boolean>() {
  91. @Override
  92. public void onSubscribe(@NonNull Disposable d) {
  93. addDisposable(d);
  94. }
  95. @Override
  96. public void onSuccess(@NonNull Boolean aBoolean) {
  97. if (stepCallback != null) stepCallback.onNextStep();
  98. }
  99. @Override
  100. public void onError(@NonNull Throwable e) {
  101. if (e instanceof RequestManageExternalException) {
  102. requestManagePermission.call();
  103. } else if (e instanceof RequestDataFolderException) {
  104. requestAndroidDataPermission.call();
  105. }
  106. }
  107. });
  108. }
  109. public interface NextStepCallback {
  110. void onNextStep();
  111. }
  112. public static class RequestManageExternalException extends Exception {
  113. }
  114. public static class RequestDataFolderException extends Exception {
  115. }
  116. }