Skip to content

Commit 7d48bcc

Browse files
author
Jan Guegel
committed
fixed moving nested folders cleanup
Signed-off-by: Jan Guegel <[email protected]>
1 parent 223e644 commit 7d48bcc

File tree

1 file changed

+46
-98
lines changed

1 file changed

+46
-98
lines changed

app/src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt

Lines changed: 46 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -35,82 +35,19 @@ import net.lingala.zip4j.model.LocalFileHeader
3535
import net.lingala.zip4j.model.ZipParameters
3636
import net.lingala.zip4j.model.enums.EncryptionMethod
3737
import org.fossify.commons.adapters.MyRecyclerViewAdapter
38-
import org.fossify.commons.dialogs.ConfirmationDialog
39-
import org.fossify.commons.dialogs.FilePickerDialog
40-
import org.fossify.commons.dialogs.PropertiesDialog
41-
import org.fossify.commons.dialogs.RadioGroupDialog
42-
import org.fossify.commons.dialogs.RenameDialog
43-
import org.fossify.commons.dialogs.RenameItemDialog
44-
import org.fossify.commons.dialogs.RenameItemsDialog
45-
import org.fossify.commons.extensions.applyColorFilter
46-
import org.fossify.commons.extensions.beGone
47-
import org.fossify.commons.extensions.beVisible
48-
import org.fossify.commons.extensions.beVisibleIf
49-
import org.fossify.commons.extensions.convertToBitmap
50-
import org.fossify.commons.extensions.copyToClipboard
51-
import org.fossify.commons.extensions.createDirectorySync
52-
import org.fossify.commons.extensions.deleteFile
53-
import org.fossify.commons.extensions.deleteFileBg
54-
import org.fossify.commons.extensions.deleteFolderBg
55-
import org.fossify.commons.extensions.formatDate
56-
import org.fossify.commons.extensions.formatSize
57-
import org.fossify.commons.extensions.getAndroidSAFFileItems
58-
import org.fossify.commons.extensions.getAndroidSAFUri
59-
import org.fossify.commons.extensions.getColoredDrawableWithColor
60-
import org.fossify.commons.extensions.getDefaultCopyDestinationPath
61-
import org.fossify.commons.extensions.getDocumentFile
62-
import org.fossify.commons.extensions.getDoesFilePathExist
63-
import org.fossify.commons.extensions.getFileCount
64-
import org.fossify.commons.extensions.getFileInputStreamSync
65-
import org.fossify.commons.extensions.getFileOutputStreamSync
66-
import org.fossify.commons.extensions.getFilenameFromPath
67-
import org.fossify.commons.extensions.getIsPathDirectory
68-
import org.fossify.commons.extensions.getMimeType
69-
import org.fossify.commons.extensions.getParentPath
70-
import org.fossify.commons.extensions.getProperSize
71-
import org.fossify.commons.extensions.getTextSize
72-
import org.fossify.commons.extensions.getTimeFormat
73-
import org.fossify.commons.extensions.handleDeletePasswordProtection
74-
import org.fossify.commons.extensions.hasOTGConnected
75-
import org.fossify.commons.extensions.highlightTextPart
76-
import org.fossify.commons.extensions.isPathOnOTG
77-
import org.fossify.commons.extensions.isRestrictedSAFOnlyRoot
78-
import org.fossify.commons.extensions.relativizeWith
79-
import org.fossify.commons.extensions.setupViewBackground
80-
import org.fossify.commons.extensions.showErrorToast
81-
import org.fossify.commons.extensions.toFileDirItem
82-
import org.fossify.commons.extensions.toast
83-
import org.fossify.commons.helpers.CONFLICT_OVERWRITE
84-
import org.fossify.commons.helpers.CONFLICT_SKIP
85-
import org.fossify.commons.helpers.VIEW_TYPE_LIST
86-
import org.fossify.commons.helpers.ensureBackgroundThread
87-
import org.fossify.commons.helpers.getFilePlaceholderDrawables
38+
import org.fossify.commons.dialogs.*
39+
import org.fossify.commons.extensions.*
40+
import org.fossify.commons.helpers.*
8841
import org.fossify.commons.models.FileDirItem
8942
import org.fossify.commons.models.RadioItem
9043
import org.fossify.commons.views.MyRecyclerView
9144
import org.fossify.filemanager.R
9245
import org.fossify.filemanager.activities.SimpleActivity
9346
import org.fossify.filemanager.activities.SplashActivity
94-
import org.fossify.filemanager.databinding.ItemDirGridBinding
95-
import org.fossify.filemanager.databinding.ItemEmptyBinding
96-
import org.fossify.filemanager.databinding.ItemFileDirListBinding
97-
import org.fossify.filemanager.databinding.ItemFileGridBinding
98-
import org.fossify.filemanager.databinding.ItemSectionBinding
47+
import org.fossify.filemanager.databinding.*
9948
import org.fossify.filemanager.dialogs.CompressAsDialog
100-
import org.fossify.filemanager.extensions.config
101-
import org.fossify.filemanager.extensions.isPathOnRoot
102-
import org.fossify.filemanager.extensions.isZipFile
103-
import org.fossify.filemanager.extensions.setAs
104-
import org.fossify.filemanager.extensions.setLastModified
105-
import org.fossify.filemanager.extensions.sharePaths
106-
import org.fossify.filemanager.extensions.toggleItemVisibility
107-
import org.fossify.filemanager.extensions.tryOpenPathIntent
108-
import org.fossify.filemanager.helpers.OPEN_AS_AUDIO
109-
import org.fossify.filemanager.helpers.OPEN_AS_IMAGE
110-
import org.fossify.filemanager.helpers.OPEN_AS_OTHER
111-
import org.fossify.filemanager.helpers.OPEN_AS_TEXT
112-
import org.fossify.filemanager.helpers.OPEN_AS_VIDEO
113-
import org.fossify.filemanager.helpers.RootHelpers
49+
import org.fossify.filemanager.extensions.*
50+
import org.fossify.filemanager.helpers.*
11451
import org.fossify.filemanager.interfaces.ItemOperationsListener
11552
import org.fossify.filemanager.models.ListItem
11653
import java.io.BufferedInputStream
@@ -532,39 +469,30 @@ class ItemsAdapter(
532469
copyHidden = config.shouldShowHidden()
533470
) {
534471
if (!isCopyOperation) {
535-
files.forEach { sourceFileDir ->
536-
val sourcePath = sourceFileDir.path
537-
if (
538-
activity.isRestrictedSAFOnlyRoot(sourcePath)
539-
&& activity.getDoesFilePathExist(sourcePath)
540-
) {
541-
activity.deleteFile(sourceFileDir, true) {
542-
listener?.refreshFragment()
543-
activity.runOnUiThread {
544-
finishActMode()
545-
}
546-
}
547-
} else {
548-
val sourceFile = File(sourcePath)
549-
if (
550-
activity.getDoesFilePathExist(source)
551-
&& activity.getIsPathDirectory(source)
552-
&& sourceFile.list()?.isEmpty() == true
553-
&& sourceFile.getProperSize(true) == 0L
554-
&& sourceFile.getFileCount(true) == 0
555-
) {
556-
val sourceFolder = sourceFile.toFileDirItem(activity)
557-
activity.deleteFile(sourceFolder, true) {
558-
listener?.refreshFragment()
559-
activity.runOnUiThread {
560-
finishActMode()
472+
ensureBackgroundThread {
473+
val sourceFoldersToCheck = HashSet<String>()
474+
475+
files.forEach { sourceFileDir ->
476+
val sourcePath = sourceFileDir.path
477+
478+
if (activity.getDoesFilePathExist(sourcePath)) {
479+
activity.deleteFile(sourceFileDir, true) {
480+
val parentPath = sourcePath.getParentPath()
481+
if (parentPath.isNotEmpty()) {
482+
sourceFoldersToCheck.add(parentPath)
561483
}
562484
}
563-
} else {
564-
listener?.refreshFragment()
565-
finishActMode()
566485
}
567486
}
487+
488+
sourceFoldersToCheck.forEach { folderPath ->
489+
checkAndDeleteEmptyFolder(folderPath)
490+
}
491+
492+
activity.runOnUiThread {
493+
listener?.refreshFragment()
494+
finishActMode()
495+
}
568496
}
569497
} else {
570498
listener?.refreshFragment()
@@ -575,6 +503,26 @@ class ItemsAdapter(
575503
}
576504
}
577505

506+
private fun checkAndDeleteEmptyFolder(folderPath: String) {
507+
if (!activity.getDoesFilePathExist(folderPath) || !activity.getIsPathDirectory(folderPath)) {
508+
return
509+
}
510+
511+
val folder = File(folderPath)
512+
val contents = folder.listFiles()
513+
514+
if (contents == null || contents.isEmpty()) {
515+
val parentPath = folderPath.getParentPath()
516+
val folderItem = folder.toFileDirItem(activity)
517+
518+
activity.deleteFile(folderItem, true) {
519+
if (parentPath.isNotEmpty()) {
520+
checkAndDeleteEmptyFolder(parentPath)
521+
}
522+
}
523+
}
524+
}
525+
578526
private fun copyMoveRootItems(
579527
files: ArrayList<FileDirItem>,
580528
destinationPath: String,

0 commit comments

Comments
 (0)