Browse Source

调整文件预览

zk 2 years ago
parent
commit
35403931b9

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

@@ -4,7 +4,6 @@ import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
-import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
@@ -83,7 +82,7 @@ public class AudioRecoverActivity extends BaseActivity<ActivityAudioRecoverBindi
 
             @Override
             public void onItemClick(FilesSearch.DocumentFile file) {
-                PreviewActivity.start(AudioRecoverActivity.this, PreviewActivity.TYPE_AUDIO, file.getUri());
+                PreviewActivity.startDocumentPreView(AudioRecoverActivity.this, PreviewActivity.TYPE_AUDIO, file);
             }
         });
     }

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

@@ -325,7 +325,7 @@ public class ImageRecoverViewModel extends BaseViewModel {
         showLoadingEvent.setValue(true);
         RxJavaUtil.doInBackground(() -> {
             for (ImageDeepDetector.ImageFile item : list) {
-                MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_IMAGE, item.newInputStream(), FileUtil.getCreateFileName(item.getName(), ".jpg"));
+                MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_IMAGE, item.newInputStream(), FileUtil.getExportImageFileName(item.getName()));
                 item.setCheck(false);
             }
             return true;

+ 4 - 7
app/src/main/java/com/datarecovery/master/module/preview/PreviewActivity.java

@@ -18,7 +18,7 @@ import androidx.viewpager2.widget.ViewPager2;
 import com.atmob.app.lib.base.BaseActivity;
 import com.atmob.common.ui.SizeUtil;
 import com.datarecovery.master.databinding.ActivityPreviewBinding;
-import com.datarecovery.master.utils.BoxingUtil;
+import com.datarecovery.master.utils.FilesSearch;
 import com.datarecovery.master.utils.ImageDeepDetector;
 import com.datarecovery.master.utils.SafeMediaPlayer;
 import com.gyf.immersionbar.ImmersionBar;
@@ -60,11 +60,10 @@ public class PreviewActivity extends BaseActivity<ActivityPreviewBinding> {
         context.startActivity(intent);
     }
 
-
-    public static void start(Context context, @Type int type, Uri uri) {
+    public static void startDocumentPreView(Context context, @Type int type, FilesSearch.DocumentFile documentFile) {
         Intent intent = new Intent(context, PreviewActivity.class);
         intent.putExtra("type", type);
-        intent.putExtra("uri", uri);
+        PreviewViewModel.weakReference = new WeakReference<>(documentFile);
         if (!(context instanceof Activity)) {
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         }
@@ -106,10 +105,8 @@ public class PreviewActivity extends BaseActivity<ActivityPreviewBinding> {
         if (type == TYPE_IMG) {
             initImagePreviewPager();
         } else {
-            Uri uri = getIntent().getParcelableExtra("uri");
-            previewViewModel.setUri(uri);
             if (type == TYPE_VIDEO || type == TYPE_AUDIO) {
-                initMediaPlayer(uri);
+                initMediaPlayer(previewViewModel.getUri());
             }
             if (type == TYPE_VIDEO) {
                 initSurfaceView();

+ 44 - 6
app/src/main/java/com/datarecovery/master/module/preview/PreviewViewModel.java

@@ -10,6 +10,7 @@ import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.FileUtil;
+import com.datarecovery.master.utils.FilesSearch;
 import com.datarecovery.master.utils.ImageDeepDetector;
 import com.datarecovery.master.utils.MediaStoreHelper;
 import com.datarecovery.master.utils.ToastUtil;
@@ -26,7 +27,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel;
 @HiltViewModel
 public class PreviewViewModel extends BaseViewModel {
 
-    public static WeakReference<List<ImageDeepDetector.ImageFile>> weakReference;
+    public static WeakReference<?> weakReference;
     private final MutableLiveData<String> title = new MutableLiveData<>();
     private final MutableLiveData<Uri> previewUri = new MutableLiveData<>();
     private final MutableLiveData<Boolean> isPlaying = new MutableLiveData<>();
@@ -36,6 +37,7 @@ public class PreviewViewModel extends BaseViewModel {
 
     private final MutableLiveData<Boolean> isPlayStart = new MutableLiveData<>();
     private final MutableLiveData<ImageDeepDetector.ImageFile> currentImageFile = new MutableLiveData<>();
+    private FilesSearch.DocumentFile currentFileFile;
     private int position;
 
 
@@ -85,22 +87,55 @@ public class PreviewViewModel extends BaseViewModel {
         this.position = position;
         switch (type) {
             case PreviewActivity.TYPE_AUDIO:
-                title.setValue(ContextUtil.getContext().getString(R.string.preview_audio));
+                dealAudioInit();
                 break;
             case PreviewActivity.TYPE_IMG:
                 dealImageInit();
                 break;
             case PreviewActivity.TYPE_VIDEO:
-                title.setValue(ContextUtil.getContext().getString(R.string.preview_video));
+                dealVideoInit();
                 break;
         }
     }
 
+    private void dealVideoInit() {
+        title.setValue(ContextUtil.getContext().getString(R.string.preview_video));
+        if (weakReference != null) {
+            this.currentFileFile = (FilesSearch.DocumentFile) weakReference.get();
+            setUri(currentFileFile.getUri());
+        }
+    }
+
+    private void dealAudioInit() {
+        title.setValue(ContextUtil.getContext().getString(R.string.preview_audio));
+        if (weakReference != null) {
+            this.currentFileFile = (FilesSearch.DocumentFile) weakReference.get();
+            setUri(currentFileFile.getUri());
+        }
+    }
+
+    public Uri getUri() {
+        if (type == PreviewActivity.TYPE_IMG) {
+            ImageDeepDetector.ImageFile value = currentImageFile.getValue();
+            if (value != null) {
+                return value.getUri();
+            } else {
+                return null;
+            }
+        } else if (type == PreviewActivity.TYPE_AUDIO || type == PreviewActivity.TYPE_VIDEO) {
+            if (currentFileFile != null) {
+                return currentFileFile.getUri();
+            } else {
+                return null;
+            }
+        }
+        return null;
+    }
 
     private void dealImageInit() {
         title.setValue(ContextUtil.getContext().getString(R.string.preview_img));
         if (weakReference != null) {
-            this.imagePreviewList = weakReference.get();
+            this.imagePreviewList = (List<ImageDeepDetector.ImageFile>) weakReference.get();
         }
     }
 
@@ -134,9 +169,12 @@ public class PreviewViewModel extends BaseViewModel {
                         if (value == null) {
                             return false;
                         }
-                        MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_IMAGE, value.newInputStream(), FileUtil.getCreateFileName(value.getName(), ".jpg"));
+                        MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_IMAGE, value.newInputStream(), FileUtil.getExportImageFileName(value.getName()));
                     } else if (type == PreviewActivity.TYPE_AUDIO) {
-//            MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_AUDIO, item.newInputStream(), FileUtil.getCreateFileName(item.getName(), ""));
+                        if (currentFileFile == null) {
+                            return false;
+                        }
+                        MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_AUDIO, currentFileFile.newInputStream(), FileUtil.getCreateFileName(currentFileFile.getName(), ""));
                     }
                     return true;
                 }

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

@@ -80,7 +80,7 @@ public class VideoRecoverActivity extends BaseActivity<ActivityVideoRecoverBindi
 
             @Override
             public void onItemClick(FilesSearch.DocumentFile file) {
-                PreviewActivity.start(VideoRecoverActivity.this, PreviewActivity.TYPE_VIDEO, file.getUri());
+                PreviewActivity.startDocumentPreView(VideoRecoverActivity.this, PreviewActivity.TYPE_VIDEO, file);
             }
         });
     }

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

@@ -176,7 +176,7 @@ public class VideoRecoverViewModel extends BaseViewModel {
         showLoadingEvent.setValue(true);
         RxJavaUtil.doInBackground(() -> {
             for (FilesSearch.DocumentFile item : list) {
-                MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_VIDEO, item.newInputStream(), FileUtil.getCreateFileName(item.getName(), ".mp4"));
+                MediaStoreHelper.saveToSharedStorage(MediaStoreHelper.TYPE_VIDEO, item.newInputStream(), FileUtil.getCreateFileName(item.getName(), ""));
                 item.setCheck(false);
             }
             return true;

+ 24 - 0
app/src/main/java/com/datarecovery/master/utils/FileUtil.java

@@ -3,6 +3,7 @@ package com.datarecovery.master.utils;
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
 import android.text.format.Formatter;
 
 
@@ -34,6 +35,29 @@ public class FileUtil {
         return split[split.length - 1].toUpperCase(Locale.getDefault());
     }
 
+    public static String isImageFile(String fileName) {
+        if (fileName == null || fileName.isEmpty()) {
+            return null;
+        }
+        String[] imageExtensions = {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp", ".tiff", ".tif", ".ico", ".svg"};
+        for (String extension : imageExtensions) {
+            if (fileName.toLowerCase().endsWith(extension)) {
+                return extension;
+            }
+        }
+        return null;
+    }
+
+    public static String getExportImageFileName(String fileName) {
+        String uuid = UUID.randomUUID().toString();
+        String fileType = isImageFile(fileName);
+        if (!TextUtils.isEmpty(fileType)) {
+            return uuid + fileType;
+        } else {
+            return uuid + ".png";
+        }
+    }
+
 
     public static String getCreateFileName(String fileName, String defaultSuffix) {
         String uuid = UUID.randomUUID().toString();