From 39b6f4bbafe81126df2fc642d69ee42fe600b353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Mon, 24 Jul 2023 09:54:26 +0200 Subject: [PATCH] Handle password protection when copying/moving folders This changes copy and move handling to work similarly to delete. It will ask for protection if single folder is selected and it will ignore protected folders if multiple are selected. This closes #2901 --- .../gallery/pro/adapters/DirectoryAdapter.kt | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index dab4b2eab..11e60afef 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -52,6 +52,7 @@ import kotlinx.android.synthetic.main.directory_item_list.view.dir_holder import kotlinx.android.synthetic.main.directory_item_list.view.photo_cnt import java.io.File import java.util.* +import kotlin.collections.ArrayList class DirectoryAdapter( activity: BaseSimpleActivity, var dirs: ArrayList, val listener: DirectoryOperationsListener?, recyclerView: MyRecyclerView, @@ -152,7 +153,7 @@ class DirectoryAdapter( R.id.cab_exclude -> tryExcludeFolder() R.id.cab_lock -> tryLockFolder() R.id.cab_unlock -> unlockFolder() - R.id.cab_copy_to -> copyMoveTo(true) + R.id.cab_copy_to -> copyFilesTo() R.id.cab_move_to -> moveFilesTo() R.id.cab_select_all -> selectAll() R.id.cab_create_shortcut -> tryCreateShortcut() @@ -505,16 +506,24 @@ class DirectoryAdapter( } } - private fun moveFilesTo() { - activity.handleDeletePasswordProtection { - copyMoveTo(false) + private fun copyFilesTo() { + handleLockedFolderOpeningForFolders(getSelectedPaths()) { + copyMoveTo(it, true) } } - private fun copyMoveTo(isCopyOperation: Boolean) { + private fun moveFilesTo() { + activity.handleDeletePasswordProtection { + handleLockedFolderOpeningForFolders(getSelectedPaths()) { + copyMoveTo(it, false) + } + } + } + + private fun copyMoveTo(selectedPaths: Collection, isCopyOperation: Boolean) { val paths = ArrayList() val showHidden = config.shouldShowHidden - getSelectedPaths().forEach { + selectedPaths.forEach { val filter = config.filterMedia File(it).listFiles()?.filter { !File(it.absolutePath).isDirectory && @@ -583,6 +592,7 @@ class DirectoryAdapter( config.isDeletePasswordProtectionOn -> activity.handleDeletePasswordProtection { deleteFolders() } + config.skipDeleteConfirmation -> deleteFolders() else -> { val itemsCnt = selectedKeys.size @@ -654,20 +664,26 @@ class DirectoryAdapter( } } - if (foldersToDelete.size == 1) { - activity.handleLockedFolderOpening(foldersToDelete.first().absolutePath) { success -> - if (success) { - listener?.deleteFolders(foldersToDelete) - } - } - } else { - foldersToDelete = foldersToDelete.filter { !config.isFolderProtected(it.absolutePath) }.toMutableList() as ArrayList - listener?.deleteFolders(foldersToDelete) + handleLockedFolderOpeningForFolders(foldersToDelete.map { it.absolutePath }) { + listener?.deleteFolders(it.map { File(it) }.toMutableList() as ArrayList) } } } } + private fun handleLockedFolderOpeningForFolders(folders: Collection, callback: (Collection) -> Unit) { + if (folders.size == 1) { + activity.handleLockedFolderOpening(folders.first()) { success -> + if (success) { + callback(folders) + } + } + } else { + val filtered = folders.filter { !config.isFolderProtected(it) } + callback(filtered) + } + } + private fun tryChangeAlbumCover(useDefault: Boolean) { activity.handleLockedFolderOpening(getFirstSelectedItemPath() ?: "") { success -> if (success) {