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> informationList = new ArrayList<>(); private final List functionList = new ArrayList<>(); private final SingleLiveEvent requestManagePermission = new SingleLiveEvent<>(); private final SingleLiveEvent requestAndroidDataPermission = new SingleLiveEvent<>(); @Inject public HomePageViewModel() { initList(); } public List getFunctionList() { return functionList; } public List> 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() { @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 { } }