Browse Source

图片以及文件增加列表滑动底部试用逻辑

zk 1 year ago
parent
commit
1da21d1449

+ 0 - 3
app/src/main/java/com/datarecovery/master/dialog/ScanFileDialog.java

@@ -34,9 +34,6 @@ public class ScanFileDialog extends BaseDialog<DialogScanFileBinding> {
         this.onCancelListener = onCancelListener;
         this.onCancelListener = onCancelListener;
     }
     }
 
 
-    public void detectedFinish() {
-        dismiss();
-    }
 
 
     public interface OnCancelListener {
     public interface OnCancelListener {
         void onCancel();
         void onCancel();

+ 0 - 1
app/src/main/java/com/datarecovery/master/module/audiorecover/AudioRecoverActivity.java

@@ -121,7 +121,6 @@ public class AudioRecoverActivity extends BaseActivity<ActivityAudioRecoverBindi
         audioRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
         audioRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
         audioRecoverViewModel.getNotifyAudioData().observe(this, o -> audioItemAdapter.notifyDataSetChanged());
         audioRecoverViewModel.getNotifyAudioData().observe(this, o -> audioItemAdapter.notifyDataSetChanged());
         audioRecoverViewModel.getDetectedVideoList().observe(this, list -> audioItemAdapter.submit(list));
         audioRecoverViewModel.getDetectedVideoList().observe(this, list -> audioItemAdapter.submit(list));
-        audioRecoverViewModel.getDetectedFinish().observe(this, o -> scanFileDialog.detectedFinish());
         audioRecoverViewModel.getShowScanDialogEvent().observe(this, this::showScanProgressDialog);
         audioRecoverViewModel.getShowScanDialogEvent().observe(this, this::showScanProgressDialog);
         audioRecoverViewModel.getShowFilterPopup().observe(this, o -> showFilterPopup());
         audioRecoverViewModel.getShowFilterPopup().observe(this, o -> showFilterPopup());
     }
     }

+ 1 - 5
app/src/main/java/com/datarecovery/master/module/audiorecover/AudioRecoverViewModel.java

@@ -50,7 +50,6 @@ public class AudioRecoverViewModel extends BaseViewModel {
     private final MutableLiveData<List<FilesSearch.DocumentFile>> selectedList = new MutableLiveData<>(new ArrayList<>());
     private final MutableLiveData<List<FilesSearch.DocumentFile>> selectedList = new MutableLiveData<>(new ArrayList<>());
     private final MutableLiveData<Boolean> showTrialView = new MutableLiveData<>();
     private final MutableLiveData<Boolean> showTrialView = new MutableLiveData<>();
     private final SingleLiveEvent<?> showTrialExportFailDialog = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showTrialExportFailDialog = new SingleLiveEvent<>();
-    private final SingleLiveEvent<?> detectedFinish = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showFilterPopup = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showFilterPopup = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> notifyAudioData = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> notifyAudioData = new SingleLiveEvent<>();
@@ -131,9 +130,6 @@ public class AudioRecoverViewModel extends BaseViewModel {
         return selectedCountTxt;
         return selectedCountTxt;
     }
     }
 
 
-    public LiveData<?> getDetectedFinish() {
-        return detectedFinish;
-    }
 
 
     public LiveData<Boolean> getShowLoadingEvent() {
     public LiveData<Boolean> getShowLoadingEvent() {
         return showLoadingEvent;
         return showLoadingEvent;
@@ -203,7 +199,7 @@ public class AudioRecoverViewModel extends BaseViewModel {
                     @Override
                     @Override
                     public void onComplete() {
                     public void onComplete() {
                         setFreeExport();
                         setFreeExport();
-                        detectedFinish.call();
+                        showScanDialogEvent.setValue(false);
                     }
                     }
                 });
                 });
     }
     }

+ 3 - 2
app/src/main/java/com/datarecovery/master/module/filerecover/FileRecoverActivity.java

@@ -85,7 +85,6 @@ public class FileRecoverActivity extends BaseActivity<ActivityFileRecoverBinding
     private void initObserver() {
     private void initObserver() {
         fileRecoverViewModel.getShowTrialExportFailDialog().observe(this, o -> showTrialExportFailDialog());
         fileRecoverViewModel.getShowTrialExportFailDialog().observe(this, o -> showTrialExportFailDialog());
         fileRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
         fileRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
-        fileRecoverViewModel.getDetectedFinish().observe(this, o -> scanProgressDialog.detectedFinish());
         fileRecoverViewModel.getShowScanDialogEvent().observe(this, this::showScanProgressDialog);
         fileRecoverViewModel.getShowScanDialogEvent().observe(this, this::showScanProgressDialog);
     }
     }
 
 
@@ -103,7 +102,9 @@ public class FileRecoverActivity extends BaseActivity<ActivityFileRecoverBinding
                     .setDialogContent(R.string.trial_export_fail_content).setSureText(R.string.dialog_trial_recover);
                     .setDialogContent(R.string.trial_export_fail_content).setSureText(R.string.dialog_trial_recover);
             showTrialExportFailDialog.setOnDialogClickListener(() -> fileRecoverViewModel.onTrialRecoverClick());
             showTrialExportFailDialog.setOnDialogClickListener(() -> fileRecoverViewModel.onTrialRecoverClick());
         }
         }
-        showTrialExportFailDialog.show();
+        if (!showTrialExportFailDialog.isShowing()) {
+            showTrialExportFailDialog.show();
+        }
     }
     }
 
 
     public void showLoadingDialog(Boolean show) {
     public void showLoadingDialog(Boolean show) {

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

@@ -6,6 +6,7 @@ import androidx.lifecycle.Transformations;
 
 
 import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
+import com.atmob.common.logging.AtmobLog;
 import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.R;
@@ -58,7 +59,6 @@ public class FileRecoverViewModel extends BaseViewModel {
     private final MutableLiveData<Integer> checkPosition = new MutableLiveData<>();
     private final MutableLiveData<Integer> checkPosition = new MutableLiveData<>();
     private final SingleLiveEvent<?> showTrialExportFailDialog = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showTrialExportFailDialog = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
-    private final SingleLiveEvent<?> detectedFinish = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final DeviceFuncRepository deviceFuncRepository;
     private final DeviceFuncRepository deviceFuncRepository;
     private int totalCount = 0;
     private int totalCount = 0;
@@ -127,10 +127,6 @@ public class FileRecoverViewModel extends BaseViewModel {
         return showLoadingEvent;
         return showLoadingEvent;
     }
     }
 
 
-    public LiveData<?> getDetectedFinish() {
-        return detectedFinish;
-    }
-
     public LiveData<Integer> getTotalDetectedCount() {
     public LiveData<Integer> getTotalDetectedCount() {
         return totalDetectedCount;
         return totalDetectedCount;
     }
     }
@@ -207,13 +203,14 @@ public class FileRecoverViewModel extends BaseViewModel {
                     @Override
                     @Override
                     public void onComplete() {
                     public void onComplete() {
                         setFreeExport();
                         setFreeExport();
-                        detectedFinish.call();
+                        showScanDialogEvent.setValue(false);
                     }
                     }
                 });
                 });
     }
     }
 
 
     public void cancelScan() {
     public void cancelScan() {
         if (scanDisposable != null) scanDisposable.dispose();
         if (scanDisposable != null) scanDisposable.dispose();
+        showScanDialogEvent.setValue(false);
         setFreeExport();
         setFreeExport();
     }
     }
 
 
@@ -352,4 +349,11 @@ public class FileRecoverViewModel extends BaseViewModel {
     public void onTrialRecoverClick() {
     public void onTrialRecoverClick() {
         MemberActivity.start(ActivityUtil.getTopActivity(), MemberType.APP_FILE_RECOVER);
         MemberActivity.start(ActivityUtil.getTopActivity(), MemberType.APP_FILE_RECOVER);
     }
     }
+
+    public void scrollPosition(int firstCompletePosition, int lastCompletelyItemPosition, int itemCount) {
+        if (lastCompletelyItemPosition == itemCount - 1 && firstCompletePosition > 0 && !BoxingUtil.boxing(showScanDialogEvent.getValue())) {
+            AtmobLog.d("TAG", "call");
+            showTrialExportFailDialog.call();
+        }
+    }
 }
 }

+ 16 - 1
app/src/main/java/com/datarecovery/master/module/filerecover/fragment/FileRecoverFragment.java

@@ -8,8 +8,10 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.Nullable;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.LiveData;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
 
 
 import com.atmob.app.lib.base.BaseFragment;
 import com.atmob.app.lib.base.BaseFragment;
+import com.atmob.common.logging.AtmobLog;
 import com.datarecovery.master.R;
 import com.datarecovery.master.R;
 import com.datarecovery.master.databinding.FragmentFileRecoverListBinding;
 import com.datarecovery.master.databinding.FragmentFileRecoverListBinding;
 import com.datarecovery.master.module.filerecover.FileRecoverViewModel;
 import com.datarecovery.master.module.filerecover.FileRecoverViewModel;
@@ -53,8 +55,21 @@ public class FileRecoverFragment extends BaseFragment<FragmentFileRecoverListBin
     private void initView() {
     private void initView() {
         fileRecoverAdapter = new FileRecoverAdapter(this, recoverFragmentViewModel.getId());
         fileRecoverAdapter = new FileRecoverAdapter(this, recoverFragmentViewModel.getId());
         fileRecoverAdapter.setOnItemClick(file -> fileRecoverViewModel.itemClick(file));
         fileRecoverAdapter.setOnItemClick(file -> fileRecoverViewModel.itemClick(file));
-        binding.rvFileRecoverList.setLayoutManager(new LinearLayoutManager(getContext()));
+        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
+        binding.rvFileRecoverList.setLayoutManager(linearLayoutManager);
         binding.rvFileRecoverList.setAdapter(fileRecoverAdapter);
         binding.rvFileRecoverList.setAdapter(fileRecoverAdapter);
+        if (fileRecoverViewModel.isTrial()) {
+            binding.rvFileRecoverList.addOnScrollListener(new RecyclerView.OnScrollListener() {
+                @Override
+                public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+                    if (fileRecoverViewModel.isTrial()) {
+                        AtmobLog.d("TAG", "onScrolled: " + linearLayoutManager.findFirstCompletelyVisibleItemPosition() + "---"
+                                + linearLayoutManager.findLastCompletelyVisibleItemPosition() + "---" + linearLayoutManager.getItemCount());
+                        fileRecoverViewModel.scrollPosition(linearLayoutManager.findFirstCompletelyVisibleItemPosition(), linearLayoutManager.findLastCompletelyVisibleItemPosition(), linearLayoutManager.getItemCount());
+                    }
+                }
+            });
+        }
     }
     }
 
 
     private void initObserver() {
     private void initObserver() {

+ 1 - 0
app/src/main/java/com/datarecovery/master/module/filerecover/fragment/FileRecoverFragmentViewModel.java

@@ -2,6 +2,7 @@ package com.datarecovery.master.module.filerecover.fragment;
 
 
 
 
 import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.base.BaseViewModel;
+import com.datarecovery.master.utils.BoxingUtil;
 
 
 
 
 import javax.inject.Inject;
 import javax.inject.Inject;

+ 7 - 3
app/src/main/java/com/datarecovery/master/module/imgrecover/ImageRecoverActivity.java

@@ -21,6 +21,7 @@ import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
 
 
 import com.atmob.app.lib.base.BaseActivity;
 import com.atmob.app.lib.base.BaseActivity;
+import com.atmob.common.logging.AtmobLog;
 import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ActivityUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.R;
@@ -172,7 +173,9 @@ public class ImageRecoverActivity extends BaseActivity<ActivityImageRecoverBindi
             public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
             public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                 int firstVisibleItem = gridLayoutManager.findFirstVisibleItemPosition();
                 int firstVisibleItem = gridLayoutManager.findFirstVisibleItemPosition();
                 int lastVisibleItem = gridLayoutManager.findLastVisibleItemPosition();
                 int lastVisibleItem = gridLayoutManager.findLastVisibleItemPosition();
-
+                if (imageRecoverViewModel.isTrial()) {
+                    imageRecoverViewModel.scrollPosition(gridLayoutManager.findFirstCompletelyVisibleItemPosition(), gridLayoutManager.findLastCompletelyVisibleItemPosition(), gridLayoutManager.getItemCount());
+                }
                 int photoPosition = getPhotoPosition();
                 int photoPosition = getPhotoPosition();
                 int wxPosition = getWxPosition();
                 int wxPosition = getWxPosition();
                 int qqPosition = getQQPosition();
                 int qqPosition = getQQPosition();
@@ -308,7 +311,6 @@ public class ImageRecoverActivity extends BaseActivity<ActivityImageRecoverBindi
         imageRecoverViewModel.getDetectedWxImg().observe(this, list -> wxAdapter.submit(list));
         imageRecoverViewModel.getDetectedWxImg().observe(this, list -> wxAdapter.submit(list));
         imageRecoverViewModel.getDetectedQQImg().observe(this, list -> qqAdapter.submit(list));
         imageRecoverViewModel.getDetectedQQImg().observe(this, list -> qqAdapter.submit(list));
         imageRecoverViewModel.getDetectedOtherImg().observe(this, list -> otherAdapter.submit(list));
         imageRecoverViewModel.getDetectedOtherImg().observe(this, list -> otherAdapter.submit(list));
-        imageRecoverViewModel.getDetectedFinish().observe(this, o -> scanFileDialog.detectedFinish());
         imageRecoverViewModel.getPreviewEvent().observe(this, pair -> PreviewActivity.startImagePreView(this, pair.first, pair.second, imageRecoverViewModel.isTrial()));
         imageRecoverViewModel.getPreviewEvent().observe(this, pair -> PreviewActivity.startImagePreView(this, pair.first, pair.second, imageRecoverViewModel.isTrial()));
         imageRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
         imageRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
         imageRecoverViewModel.getShowClearDialog().observe(this, o -> showClearDialog());
         imageRecoverViewModel.getShowClearDialog().observe(this, o -> showClearDialog());
@@ -321,7 +323,9 @@ public class ImageRecoverActivity extends BaseActivity<ActivityImageRecoverBindi
                     .setDialogContent(R.string.trial_export_fail_content).setSureText(R.string.dialog_trial_recover);
                     .setDialogContent(R.string.trial_export_fail_content).setSureText(R.string.dialog_trial_recover);
             showTrialExportFailDialog.setOnDialogClickListener(() -> imageRecoverViewModel.onTrialRecoverClick());
             showTrialExportFailDialog.setOnDialogClickListener(() -> imageRecoverViewModel.onTrialRecoverClick());
         }
         }
-        showTrialExportFailDialog.show();
+        if (!showTrialExportFailDialog.isShowing()) {
+            showTrialExportFailDialog.show();
+        }
     }
     }
 
 
     private void showClearDialog() {
     private void showClearDialog() {

+ 8 - 7
app/src/main/java/com/datarecovery/master/module/imgrecover/ImageRecoverViewModel.java

@@ -43,7 +43,6 @@ import javax.inject.Inject;
 
 
 import atmob.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
 import atmob.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
 import atmob.reactivex.rxjava3.annotations.NonNull;
 import atmob.reactivex.rxjava3.annotations.NonNull;
-import atmob.reactivex.rxjava3.core.Flowable;
 import atmob.reactivex.rxjava3.core.FlowableSubscriber;
 import atmob.reactivex.rxjava3.core.FlowableSubscriber;
 import atmob.reactivex.rxjava3.core.Single;
 import atmob.reactivex.rxjava3.core.Single;
 import atmob.reactivex.rxjava3.core.SingleObserver;
 import atmob.reactivex.rxjava3.core.SingleObserver;
@@ -75,7 +74,6 @@ public class ImageRecoverViewModel extends BaseViewModel {
     private LiveData<String> detectedOtherTitle;
     private LiveData<String> detectedOtherTitle;
 
 
     private final SingleLiveEvent<Pair<List<ImageDeepDetector.ImageFile>, Integer>> previewEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Pair<List<ImageDeepDetector.ImageFile>, Integer>> previewEvent = new SingleLiveEvent<>();
-    private final SingleLiveEvent<?> detectedFinish = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showClearDialog = new SingleLiveEvent<>();
     private final SingleLiveEvent<?> showClearDialog = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showScanDialogEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
     private final SingleLiveEvent<Boolean> showLoadingEvent = new SingleLiveEvent<>();
@@ -141,10 +139,6 @@ public class ImageRecoverViewModel extends BaseViewModel {
         return previewEvent;
         return previewEvent;
     }
     }
 
 
-    public LiveData<?> getDetectedFinish() {
-        return detectedFinish;
-    }
-
     public LiveData<Integer> getTotalDetectedCount() {
     public LiveData<Integer> getTotalDetectedCount() {
         return totalDetectedCount;
         return totalDetectedCount;
     }
     }
@@ -306,7 +300,7 @@ public class ImageRecoverViewModel extends BaseViewModel {
                     @Override
                     @Override
                     public void onComplete() {
                     public void onComplete() {
                         setFreeExport();
                         setFreeExport();
-                        detectedFinish.call();
+                        showScanDialogEvent.setValue(false);
                     }
                     }
                 });
                 });
     }
     }
@@ -339,6 +333,7 @@ public class ImageRecoverViewModel extends BaseViewModel {
 
 
     public void cancelScan() {
     public void cancelScan() {
         if (scanDisposable != null) scanDisposable.dispose();
         if (scanDisposable != null) scanDisposable.dispose();
+        showScanDialogEvent.setValue(false);
         setFreeExport();
         setFreeExport();
     }
     }
 
 
@@ -627,4 +622,10 @@ public class ImageRecoverViewModel extends BaseViewModel {
     public void onTrialRecoverClick() {
     public void onTrialRecoverClick() {
         MemberActivity.start(ActivityUtil.getTopActivity(), type);
         MemberActivity.start(ActivityUtil.getTopActivity(), type);
     }
     }
+
+    public void scrollPosition(int firstCompletePosition, int lastCompletelyItemPosition, int itemCount) {
+        if (lastCompletelyItemPosition == itemCount - 1 && firstCompletePosition > 0 && !BoxingUtil.boxing(showScanDialogEvent.getValue())) {
+            showTrialExportFailDialog.call();
+        }
+    }
 }
 }

+ 1 - 4
app/src/main/java/com/datarecovery/master/module/videorecover/VideoRecoverActivity.java

@@ -83,10 +83,7 @@ public class VideoRecoverActivity extends BaseActivity<ActivityVideoRecoverBindi
         videoRecoverViewModel.getShowTrialExportFailDialog().observe(this, o -> showTrialExportFailDialog());
         videoRecoverViewModel.getShowTrialExportFailDialog().observe(this, o -> showTrialExportFailDialog());
         videoRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
         videoRecoverViewModel.getShowLoadingEvent().observe(this, this::showLoadingDialog);
         videoRecoverViewModel.getDetectedVideoList().observe(this, list -> videoItemAdapter.submit(list));
         videoRecoverViewModel.getDetectedVideoList().observe(this, list -> videoItemAdapter.submit(list));
-        videoRecoverViewModel.getDetectedFinish().observe(this, o -> {
-            binding.ryVideoRecover.scrollToPosition(0);
-            scanFileDialog.detectedFinish();
-        });
+        videoRecoverViewModel.getDetectedFinish().observe(this, o -> binding.ryVideoRecover.scrollToPosition(0));
         videoRecoverViewModel.getShowScanDialogEvent().observe(this, this::showScanProgressDialog);
         videoRecoverViewModel.getShowScanDialogEvent().observe(this, this::showScanProgressDialog);
     }
     }
 
 

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

@@ -174,6 +174,7 @@ public class VideoRecoverViewModel extends BaseViewModel {
                     @Override
                     @Override
                     public void onComplete() {
                     public void onComplete() {
                         setFreeExport();
                         setFreeExport();
+                        showScanDialogEvent.setValue(false);
                         detectedFinish.call();
                         detectedFinish.call();
                     }
                     }
                 });
                 });