Commit 8fad5d7a authored by wanglei's avatar wanglei

Merge remote-tracking branch 'origin/master'

parents 0060aeff 11eb31a3
......@@ -79,7 +79,7 @@ class CleanJunkActivity : BaseActivity2() {
binding.tvClean.visibility = View.GONE
isDisableBack = true
lifecycleScope.launch(Dispatchers.IO) {
val emptyFoldersDeferred = async { FileHelps.findEmptyFolders() }
val emptyFoldersDeferred = async { FileHelps.findEmptyFolders(lifecycleScope) }
val filesDeferred = async { MediaHelps.findSpecifiedFiles(this@CleanJunkActivity) }
val emptyFolder = emptyFoldersDeferred.await()
val files = filesDeferred.await()
......
package com.base.scanqrclear.luma
import android.os.Environment
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.scanqrclear.bean.FileBean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.joinAll
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File
object FileHelps {
......@@ -16,13 +21,41 @@ object FileHelps {
return list
}
fun findEmptyFolders(): MutableList<FileBean> {
val externalStorageDir = Environment.getExternalStorageDirectory()
suspend fun findEmptyFolders(lifecycleScope: LifecycleCoroutineScope): MutableList<FileBean> {
val rootDir = Environment.getExternalStorageDirectory()
val filters = arrayOf("/storage/emulated/0/Android/data", "/storage/emulated/0/Android/obb")
val emptyFolders = getAllEmptyFolders(externalStorageDir, filters)
val emptyFolders = mutableListOf<File>()
// 使用协程并发遍历文件夹
withContext(Dispatchers.IO) {
findEmptyFolders(lifecycleScope, rootDir, filters, emptyFolders)
}
return emptyFolders.map { FileBean(it.name, it.path, length = 4 * 1024) }.toMutableList()
}
private suspend fun findEmptyFolders(lifecycleScope: LifecycleCoroutineScope, folder: File, filters: Array<String>, emptyFolders: MutableList<File>) {
val files = folder.listFiles() ?: return
if (files.isEmpty() && !filters.contains(folder.path)) {
emptyFolders.add(folder)
return
}
files.filter { it.isDirectory }.map { file ->
lifecycleScope.launch(Dispatchers.IO) {
findEmptyFolders(lifecycleScope, file, filters, emptyFolders)
}
}.joinAll() // 等待所有子任务完成
}
// fun findEmptyFolders(): MutableList<FileBean> {
// val externalStorageDir = Environment.getExternalStorageDirectory()
// val filters = arrayOf("/storage/emulated/0/Android/data", "/storage/emulated/0/Android/obb")
// val emptyFolders = getAllEmptyFolders(externalStorageDir, filters)
// return emptyFolders.map { FileBean(it.name, it.path, length = 4 * 1024) }.toMutableList()
// }
fun findTempFiles(): MutableList<FileBean> {
val rootDir = Environment.getExternalStorageDirectory()
return findFilesRecursive(rootDir, arrayOf(".temp"))
......@@ -64,6 +97,7 @@ object FileHelps {
return "${Environment.getExternalStorageDirectory()}/$relativePath"
}
private fun getAllEmptyFolders(root: File, filters: Array<String>): List<File> {
return root.walk()
.filter {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment