| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package com.datarecovery.master.module.homepage;
- import com.atmob.app.lib.base.BaseViewModel;
- 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.repositories.AccountRepository;
- import com.datarecovery.master.module.imgrecover.ImageRecoverActivity;
- import com.datarecovery.master.utils.PermissionUtil;
- import com.datarecovery.master.utils.xfile.XFilePermission;
- import java.util.ArrayList;
- import java.util.List;
- import javax.inject.Inject;
- import atmob.reactivex.rxjava3.annotations.NonNull;
- import atmob.reactivex.rxjava3.core.Single;
- import atmob.reactivex.rxjava3.core.SingleEmitter;
- import atmob.reactivex.rxjava3.core.SingleObserver;
- import atmob.reactivex.rxjava3.core.SingleOnSubscribe;
- import atmob.reactivex.rxjava3.disposables.Disposable;
- import atmob.rxjava.utils.RxJavaUtil;
- import dagger.hilt.android.lifecycle.HiltViewModel;
- import android.os.Build;
- import android.util.Pair;
- import androidx.lifecycle.LiveData;
- @HiltViewModel
- public class HomePageViewModel extends BaseViewModel {
- private final List<Pair<CharSequence, CharSequence>> informationList = new ArrayList<>();
- private final List<FunctionBean> functionList = new ArrayList<>();
- private final SingleLiveEvent<?> requestManagePermission = new SingleLiveEvent<>();
- private final SingleLiveEvent<?> requestAndroidDataPermission = new SingleLiveEvent<>();
- @Inject
- public HomePageViewModel() {
- initList();
- }
- public List<FunctionBean> getFunctionList() {
- return functionList;
- }
- public List<Pair<CharSequence, CharSequence>> getInformationList() {
- return informationList;
- }
- private void initList() {
- informationList.add(new Pair<>("华为P40用户 微信消息恢复", "2分钟前"));
- informationList.add(new Pair<>("小米Mi 11用户 图片恢复", "4分钟前"));
- informationList.add(new Pair<>("三星S20用户 微信好友恢复", "5分钟前"));
- informationList.add(new Pair<>("OPPOFind X3用户 微信消息恢复", "9分钟前"));
- informationList.add(new Pair<>("VivoY72用户 通讯录恢复", "11分钟前"));
- informationList.add(new Pair<>("华为P30用户 微信好友恢复", "15分钟前"));
- functionList.add(new FunctionBean(FunctionBean.FILE_RECOVERY, R.string.home_page_file_recovery, R.drawable.icon_home_page_file_recovery));
- functionList.add(new FunctionBean(FunctionBean.VIDEO_RECOVERY, R.string.home_page_video_recovery, R.drawable.icon_home_page_video_recovery));
- functionList.add(new FunctionBean(FunctionBean.AUDIO_RECOVERY, R.string.home_page_audio_recovery, R.drawable.icon_home_page_audio_recovery));
- functionList.add(new FunctionBean(FunctionBean.IMG_CLEARING, R.string.home_page_img_clearing, R.drawable.icon_home_page_img_clearing));
- }
- public LiveData<?> getRequestManagePermission() {
- return requestManagePermission;
- }
- public LiveData<?> getRequestAndroidDataPermission() {
- return requestAndroidDataPermission;
- }
- public void onWxMessageRecoveryClick() {
- }
- public void onWxFriendRecoveryClick() {
- }
- public void onImgRecoveryClick() {
- isCheckPermission(() -> ImageRecoverActivity.start(ActivityUtil.getTopActivity()));
- }
- /**
- * 判断是否有所需的存储权限
- *
- * @param stepCallback 有权限的回调
- */
- public void isCheckPermission(NextStepCallback stepCallback) {
- Single.just(Build.VERSION.SDK_INT).map(sdkInt -> {
- //判断是否有所有文件权限
- boolean result = PermissionUtil.hasFilePermission();
- if (!result) {
- throw new RequestManageExternalException();
- }
- return sdkInt;
- }).map(sdkInt -> {
- if (sdkInt >= Build.VERSION_CODES.TIRAMISU) {
- return true;
- }
- boolean dataFolder = XFilePermission.hasAndroidDataPermission(ContextUtil.getContext());
- if (!dataFolder) {
- throw new RequestDataFolderException();
- }
- return true;
- })
- .compose(RxJavaUtil.SingleSchedule.io2Main())
- .subscribe(new SingleObserver<Boolean>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- addDisposable(d);
- }
- @Override
- public void onSuccess(@NonNull Boolean aBoolean) {
- if (stepCallback != null) stepCallback.onNextStep();
- }
- @Override
- public void onError(@NonNull Throwable e) {
- if (e instanceof RequestManageExternalException) {
- requestManagePermission.call();
- } else if (e instanceof RequestDataFolderException) {
- requestAndroidDataPermission.call();
- }
- }
- });
- }
- public interface NextStepCallback {
- void onNextStep();
- }
- public static class RequestManageExternalException extends Exception {
- }
- public static class RequestDataFolderException extends Exception {
- }
- }
|