|
|
@@ -1,16 +1,19 @@
|
|
|
package com.datarecovery.master.utils;
|
|
|
|
|
|
import android.os.Build;
|
|
|
+import android.text.TextUtils;
|
|
|
import android.view.Gravity;
|
|
|
|
|
|
import androidx.activity.ComponentActivity;
|
|
|
+import androidx.lifecycle.Lifecycle;
|
|
|
+import androidx.lifecycle.LifecycleEventObserver;
|
|
|
+import androidx.lifecycle.LifecycleOwner;
|
|
|
|
|
|
-import com.atmob.app.lib.livedata.SingleLiveEvent;
|
|
|
import com.atmob.common.runtime.ContextUtil;
|
|
|
import com.datarecovery.master.R;
|
|
|
-import com.datarecovery.master.dialog.CommonSureDialog;
|
|
|
+import com.datarecovery.master.data.repositories.AccountRepository;
|
|
|
import com.datarecovery.master.dialog.PermissionDialog;
|
|
|
-import com.datarecovery.master.module.homepage.HomePageViewModel;
|
|
|
+import com.datarecovery.master.module.login.LoginActivity;
|
|
|
import com.datarecovery.master.utils.xfile.XFilePermission;
|
|
|
|
|
|
import atmob.reactivex.rxjava3.annotations.NonNull;
|
|
|
@@ -23,54 +26,81 @@ import atmob.rxjava.utils.RxJavaUtil;
|
|
|
|
|
|
public class FilePermissionHelper {
|
|
|
|
|
|
- public static void requestDataFilePermission(ComponentActivity activity, NextStepCallback stepCallback) {
|
|
|
-
|
|
|
- Single.just(Build.VERSION.SDK_INT).flatMap((Function<Integer, SingleSource<Integer>>) sdkInt -> {
|
|
|
+ Disposable disposable;
|
|
|
+
|
|
|
+ public void requestDataFilePermission(ComponentActivity activity, NextStepCallback stepCallback) {
|
|
|
+ Single.just(AccountRepository.token)
|
|
|
+ .flatMap(token -> {
|
|
|
+ if (TextUtils.isEmpty(token)) {
|
|
|
+ return (SingleSource<Integer>) observer -> activity.runOnUiThread(() -> {
|
|
|
+ PermissionDialog loginDialog = new PermissionDialog(activity);
|
|
|
+ loginDialog.setDialogContent(R.string.dialog_no_login)
|
|
|
+ .setDialogTitle(R.string.dialog_no_login_title)
|
|
|
+ .setOnDialogClickListener(new PermissionDialog.OnDialogClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClickSure() {
|
|
|
+ LoginActivity.start(activity);
|
|
|
+ activity.getLifecycle().addObserver(new LifecycleEventObserver() {
|
|
|
+ @Override
|
|
|
+ public void onStateChanged(@androidx.annotation.NonNull LifecycleOwner lifecycleOwner, @androidx.annotation.NonNull Lifecycle.Event event) {
|
|
|
+ if (event == Lifecycle.Event.ON_RESUME) {
|
|
|
+ if (!TextUtils.isEmpty(AccountRepository.token)) {
|
|
|
+ loginDialog.dismiss();
|
|
|
+ activity.getLifecycle().removeObserver(this);
|
|
|
+ observer.onSuccess(Build.VERSION.SDK_INT);
|
|
|
+ }
|
|
|
+ } else if (event == Lifecycle.Event.ON_DESTROY) {
|
|
|
+ activity.getLifecycle().removeObserver(this);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onClickCancel() {
|
|
|
+ observer.onError(new CancelException());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ return Single.just(Build.VERSION.SDK_INT);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .flatMap((Function<Integer, SingleSource<Integer>>) sdkInt -> {
|
|
|
//判断是否有所有文件权限
|
|
|
boolean result = PermissionUtil.hasFilePermission();
|
|
|
if (!result) {
|
|
|
- return (SingleSource<Integer>) observer -> {
|
|
|
- if (activity == null || activity.isFinishing() || activity.isDestroyed()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- activity.runOnUiThread(() -> {
|
|
|
- PermissionDialog requestManageDialog = new PermissionDialog(activity);
|
|
|
- requestManageDialog.setDialogTitle(R.string.request_manage_permission_title)
|
|
|
- .setDialogContent(R.string.request_manage_permission_content)
|
|
|
- .setTitleGravity(Gravity.START)
|
|
|
- .setContentGravity(Gravity.START)
|
|
|
- .setSureText(R.string.teaching_limit)
|
|
|
- .setOnDialogClickListener(new PermissionDialog.OnDialogClickListener() {
|
|
|
- @Override
|
|
|
- public void onClickSure() {
|
|
|
- PermissionUtil.requestWriteStoragePermission(activity, new PermissionUtil.PermissionCallback() {
|
|
|
- @Override
|
|
|
- public void onPermissionGranted() {
|
|
|
- if (activity.isFinishing() || activity.isDestroyed()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- requestManageDialog.dismiss();
|
|
|
- observer.onSuccess(sdkInt);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onPermissionDenied() {
|
|
|
+ return (SingleSource<Integer>) observer -> activity.runOnUiThread(() -> {
|
|
|
+ PermissionDialog requestManageDialog = new PermissionDialog(activity);
|
|
|
+ requestManageDialog.setDialogTitle(R.string.request_manage_permission_title)
|
|
|
+ .setDialogContent(R.string.request_manage_permission_content)
|
|
|
+ .setTitleGravity(Gravity.START)
|
|
|
+ .setContentGravity(Gravity.START)
|
|
|
+ .setSureText(R.string.teaching_limit)
|
|
|
+ .setOnDialogClickListener(new PermissionDialog.OnDialogClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClickSure() {
|
|
|
+ PermissionUtil.requestWriteStoragePermission(activity, new PermissionUtil.PermissionCallback() {
|
|
|
+ @Override
|
|
|
+ public void onPermissionGranted() {
|
|
|
+ requestManageDialog.dismiss();
|
|
|
+ observer.onSuccess(sdkInt);
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public void onPermissionDenied() {
|
|
|
|
|
|
- @Override
|
|
|
- public void onClickCancel() {
|
|
|
- if (activity.isFinishing() || activity.isDestroyed()) {
|
|
|
- return;
|
|
|
}
|
|
|
- observer.onError(new CancelException());
|
|
|
- }
|
|
|
- });
|
|
|
- requestManageDialog.show();
|
|
|
- });
|
|
|
- };
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onClickCancel() {
|
|
|
+ observer.onError(new CancelException());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ requestManageDialog.show();
|
|
|
+ });
|
|
|
} else {
|
|
|
return Single.just(sdkInt);
|
|
|
}
|
|
|
@@ -81,47 +111,36 @@ public class FilePermissionHelper {
|
|
|
}
|
|
|
boolean dataFolder = XFilePermission.hasAndroidDataPermission(ContextUtil.getContext());
|
|
|
if (!dataFolder) {
|
|
|
- return observer -> {
|
|
|
- if (activity == null || activity.isFinishing() || activity.isDestroyed()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- activity.runOnUiThread(() -> {
|
|
|
- PermissionDialog requestAndroidDataDialog = new PermissionDialog(activity);
|
|
|
- requestAndroidDataDialog.setDialogTitle(R.string.request_android_data_permission_title)
|
|
|
- .setDialogContent(R.string.request_android_data_permission_content)
|
|
|
- .setCancelText(R.string.wait_moment)
|
|
|
- .setSureText(R.string.teaching_limit)
|
|
|
- .setOnDialogClickListener(new PermissionDialog.OnDialogClickListener() {
|
|
|
- @Override
|
|
|
- public void onClickSure() {
|
|
|
- XFilePermission.requestAndroidDataPermission(activity, new XFilePermission.PermissionCallback() {
|
|
|
- @Override
|
|
|
- public void onPermissionGranted() {
|
|
|
- if (activity.isFinishing() || activity.isDestroyed()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- requestAndroidDataDialog.dismiss();
|
|
|
- observer.onSuccess(sdkInt);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onPermissionDenied() {
|
|
|
+ return observer -> activity.runOnUiThread(() -> {
|
|
|
+ PermissionDialog requestAndroidDataDialog = new PermissionDialog(activity);
|
|
|
+ requestAndroidDataDialog.setDialogTitle(R.string.request_android_data_permission_title)
|
|
|
+ .setDialogContent(R.string.request_android_data_permission_content)
|
|
|
+ .setCancelText(R.string.wait_moment)
|
|
|
+ .setSureText(R.string.teaching_limit)
|
|
|
+ .setOnDialogClickListener(new PermissionDialog.OnDialogClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClickSure() {
|
|
|
+ XFilePermission.requestAndroidDataPermission(activity, new XFilePermission.PermissionCallback() {
|
|
|
+ @Override
|
|
|
+ public void onPermissionGranted() {
|
|
|
+ requestAndroidDataDialog.dismiss();
|
|
|
+ observer.onSuccess(sdkInt);
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public void onPermissionDenied() {
|
|
|
|
|
|
- @Override
|
|
|
- public void onClickCancel() {
|
|
|
- if (activity.isFinishing() || activity.isDestroyed()) {
|
|
|
- return;
|
|
|
}
|
|
|
- observer.onError(new CancelException());
|
|
|
- }
|
|
|
- });
|
|
|
- requestAndroidDataDialog.show();
|
|
|
- });
|
|
|
- };
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onClickCancel() {
|
|
|
+ observer.onError(new CancelException());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ requestAndroidDataDialog.show();
|
|
|
+ });
|
|
|
} else {
|
|
|
return Single.just(sdkInt);
|
|
|
}
|
|
|
@@ -130,7 +149,7 @@ public class FilePermissionHelper {
|
|
|
.subscribe(new SingleObserver<Integer>() {
|
|
|
@Override
|
|
|
public void onSubscribe(@NonNull Disposable d) {
|
|
|
-
|
|
|
+ disposable = d;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -145,6 +164,17 @@ public class FilePermissionHelper {
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
+ activity.getLifecycle().addObserver(new LifecycleEventObserver() {
|
|
|
+ @Override
|
|
|
+ public void onStateChanged(@androidx.annotation.NonNull LifecycleOwner lifecycleOwner, @androidx.annotation.NonNull Lifecycle.Event event) {
|
|
|
+ if (event == Lifecycle.Event.ON_DESTROY) {
|
|
|
+ if (disposable != null && !disposable.isDisposed()) {
|
|
|
+ disposable.dispose();
|
|
|
+ }
|
|
|
+ activity.getLifecycle().removeObserver(this);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
public interface NextStepCallback {
|