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
This commit is contained in:
Ensar Sarajčić 2023-07-24 09:54:26 +02:00
parent 1b4adbb597
commit 39b6f4bbaf

View file

@ -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 kotlinx.android.synthetic.main.directory_item_list.view.photo_cnt
import java.io.File import java.io.File
import java.util.* import java.util.*
import kotlin.collections.ArrayList
class DirectoryAdapter( class DirectoryAdapter(
activity: BaseSimpleActivity, var dirs: ArrayList<Directory>, val listener: DirectoryOperationsListener?, recyclerView: MyRecyclerView, activity: BaseSimpleActivity, var dirs: ArrayList<Directory>, val listener: DirectoryOperationsListener?, recyclerView: MyRecyclerView,
@ -152,7 +153,7 @@ class DirectoryAdapter(
R.id.cab_exclude -> tryExcludeFolder() R.id.cab_exclude -> tryExcludeFolder()
R.id.cab_lock -> tryLockFolder() R.id.cab_lock -> tryLockFolder()
R.id.cab_unlock -> unlockFolder() 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_move_to -> moveFilesTo()
R.id.cab_select_all -> selectAll() R.id.cab_select_all -> selectAll()
R.id.cab_create_shortcut -> tryCreateShortcut() R.id.cab_create_shortcut -> tryCreateShortcut()
@ -505,16 +506,24 @@ class DirectoryAdapter(
} }
} }
private fun moveFilesTo() { private fun copyFilesTo() {
activity.handleDeletePasswordProtection { handleLockedFolderOpeningForFolders(getSelectedPaths()) {
copyMoveTo(false) copyMoveTo(it, true)
} }
} }
private fun copyMoveTo(isCopyOperation: Boolean) { private fun moveFilesTo() {
activity.handleDeletePasswordProtection {
handleLockedFolderOpeningForFolders(getSelectedPaths()) {
copyMoveTo(it, false)
}
}
}
private fun copyMoveTo(selectedPaths: Collection<String>, isCopyOperation: Boolean) {
val paths = ArrayList<String>() val paths = ArrayList<String>()
val showHidden = config.shouldShowHidden val showHidden = config.shouldShowHidden
getSelectedPaths().forEach { selectedPaths.forEach {
val filter = config.filterMedia val filter = config.filterMedia
File(it).listFiles()?.filter { File(it).listFiles()?.filter {
!File(it.absolutePath).isDirectory && !File(it.absolutePath).isDirectory &&
@ -583,6 +592,7 @@ class DirectoryAdapter(
config.isDeletePasswordProtectionOn -> activity.handleDeletePasswordProtection { config.isDeletePasswordProtectionOn -> activity.handleDeletePasswordProtection {
deleteFolders() deleteFolders()
} }
config.skipDeleteConfirmation -> deleteFolders() config.skipDeleteConfirmation -> deleteFolders()
else -> { else -> {
val itemsCnt = selectedKeys.size val itemsCnt = selectedKeys.size
@ -654,17 +664,23 @@ class DirectoryAdapter(
} }
} }
if (foldersToDelete.size == 1) { handleLockedFolderOpeningForFolders(foldersToDelete.map { it.absolutePath }) {
activity.handleLockedFolderOpening(foldersToDelete.first().absolutePath) { success -> listener?.deleteFolders(it.map { File(it) }.toMutableList() as ArrayList<File>)
}
}
}
}
private fun handleLockedFolderOpeningForFolders(folders: Collection<String>, callback: (Collection<String>) -> Unit) {
if (folders.size == 1) {
activity.handleLockedFolderOpening(folders.first()) { success ->
if (success) { if (success) {
listener?.deleteFolders(foldersToDelete) callback(folders)
} }
} }
} else { } else {
foldersToDelete = foldersToDelete.filter { !config.isFolderProtected(it.absolutePath) }.toMutableList() as ArrayList<File> val filtered = folders.filter { !config.isFolderProtected(it) }
listener?.deleteFolders(foldersToDelete) callback(filtered)
}
}
} }
} }