From 82f57e3e3eb0a9d4f06a4d20bc2540afb5340e73 Mon Sep 17 00:00:00 2001 From: VishnuSanal Date: Sat, 14 Sep 2024 15:24:19 +0530 Subject: [PATCH 1/3] trigger mediascanner when doing cut/paste to the same folder --- .../asynchronous/asynctasks/movecopy/PreparePasteTask.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/movecopy/PreparePasteTask.kt b/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/movecopy/PreparePasteTask.kt index e8e353194f..7ee9cb13cb 100644 --- a/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/movecopy/PreparePasteTask.kt +++ b/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/movecopy/PreparePasteTask.kt @@ -21,6 +21,7 @@ package com.amaze.filemanager.asynchronous.asynctasks.movecopy import android.app.ProgressDialog +import android.content.Context import android.content.Intent import android.view.LayoutInflater import android.widget.Toast @@ -43,6 +44,7 @@ import com.amaze.filemanager.filesystem.HybridFile import com.amaze.filemanager.filesystem.HybridFileParcelable import com.amaze.filemanager.filesystem.MakeDirectoryOperation import com.amaze.filemanager.filesystem.files.FileUtils +import com.amaze.filemanager.filesystem.files.MediaConnectionUtils import com.amaze.filemanager.ui.activities.MainActivity import com.amaze.filemanager.utils.OnFileFound import com.amaze.filemanager.utils.Utils @@ -140,6 +142,7 @@ class PreparePasteTask(strongRefMain: MainActivity) { filesToCopy[0].getParent(context.get()) == targetPath ) { Toast.makeText(context.get(), R.string.same_dir_move_error, Toast.LENGTH_SHORT).show() + MediaConnectionUtils.scanFile(context.get() as Context, filesToCopy.toTypedArray()) return } From cb849fa667ee0e8ebe4dad9dfe3486b8009c6027 Mon Sep 17 00:00:00 2001 From: VishnuSanal Date: Sat, 14 Sep 2024 15:24:50 +0530 Subject: [PATCH 2/3] better mediascanner handling for creation/deletion of nomedia files --- .../asynchronous/asynctasks/DeleteTask.java | 7 ++++++- .../filemanager/filesystem/Operations.java | 11 ++++++++++ .../filesystem/files/MediaConnectionUtils.kt | 20 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java b/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java index 4f83f4bd0a..f561199a75 100644 --- a/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java +++ b/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java @@ -38,6 +38,7 @@ import com.amaze.filemanager.filesystem.SafRootHolder; import com.amaze.filemanager.filesystem.cloud.CloudUtil; import com.amaze.filemanager.filesystem.files.CryptUtil; +import com.amaze.filemanager.filesystem.files.FileUtils; import com.amaze.filemanager.filesystem.files.MediaConnectionUtils; import com.amaze.filemanager.ui.activities.MainActivity; import com.amaze.filemanager.ui.fragments.CompressedExplorerFragment; @@ -113,10 +114,14 @@ protected final AsyncTaskResult doInBackground( } // delete file from media database - if (!file.isSmb() && !file.isSftp()) + if (!file.isSmb() && !file.isSftp()) { MediaConnectionUtils.scanFile( applicationContext, files.toArray(new HybridFile[files.size()])); + if (file.getName().equals(FileUtils.NOMEDIA_FILE)) + MediaConnectionUtils.scanFile(applicationContext, file.getParent(applicationContext)); + } + // delete file entry from encrypted database if (file.getName(applicationContext).endsWith(CryptUtil.CRYPT_EXTENSION)) { CryptHandler handler = CryptHandler.INSTANCE; diff --git a/app/src/main/java/com/amaze/filemanager/filesystem/Operations.java b/app/src/main/java/com/amaze/filemanager/filesystem/Operations.java index 02d46eb5ec..306eaaf3c7 100644 --- a/app/src/main/java/com/amaze/filemanager/filesystem/Operations.java +++ b/app/src/main/java/com/amaze/filemanager/filesystem/Operations.java @@ -442,6 +442,17 @@ protected Void doInBackground(Void... params) { } return null; } + + @Override + protected void onPostExecute(Void unused) { + super.onPostExecute(unused); + + // TODO: run this only when the operation gets completed successfully + MediaConnectionUtils.scanFile(context, file.path); + + if (file.name.equals(FileUtils.NOMEDIA_FILE)) + MediaConnectionUtils.scanFile(context, file.getParent(context)); + } }.executeOnExecutor(executor); } diff --git a/app/src/main/java/com/amaze/filemanager/filesystem/files/MediaConnectionUtils.kt b/app/src/main/java/com/amaze/filemanager/filesystem/files/MediaConnectionUtils.kt index e51370578c..1c982a04e3 100644 --- a/app/src/main/java/com/amaze/filemanager/filesystem/files/MediaConnectionUtils.kt +++ b/app/src/main/java/com/amaze/filemanager/filesystem/files/MediaConnectionUtils.kt @@ -52,4 +52,24 @@ object MediaConnectionUtils { LOG.info("MediaConnectionUtils#scanFile finished scanning path$path") } } + + /** + * Invokes MediaScannerConnection#scanFile for a given file + * + * @param context the context + * @param filePath the path of the file to be scanned + */ + @JvmStatic + fun scanFile( + context: Context, + filePath: String, + ) { + MediaScannerConnection.scanFile( + context, + arrayOf(filePath), + null, + ) { path: String, _: Uri? -> + LOG.info("MediaConnectionUtils#scanFile finished scanning path$path") + } + } } From c9243d49aa3d177e4d91fa44d17e22f3c048980f Mon Sep 17 00:00:00 2001 From: Vishnu Sanal T Date: Wed, 9 Oct 2024 17:55:06 +0530 Subject: [PATCH 3/3] address review comment --- .../amaze/filemanager/asynchronous/asynctasks/DeleteTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java b/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java index f561199a75..3f32e46abe 100644 --- a/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java +++ b/app/src/main/java/com/amaze/filemanager/asynchronous/asynctasks/DeleteTask.java @@ -118,7 +118,7 @@ protected final AsyncTaskResult doInBackground( MediaConnectionUtils.scanFile( applicationContext, files.toArray(new HybridFile[files.size()])); - if (file.getName().equals(FileUtils.NOMEDIA_FILE)) + if (FileUtils.NOMEDIA_FILE.equals(file.getName())) MediaConnectionUtils.scanFile(applicationContext, file.getParent(applicationContext)); }