@@ -237,20 +237,29 @@ fun DocumentFile.createBinaryFile(
237237 }
238238}
239239
240+ fun DocumentFile.findFiles (names : Array <String >, documentType : DocumentFileType = DocumentFileType .ALL ): List <DocumentFile > {
241+ val files = listFiles().filter { it.name in names }
242+ return when (documentType) {
243+ DocumentFileType .FILE -> files.filter { it.isFile }
244+ DocumentFileType .FOLDER -> files.filter { it.isDirectory }
245+ else -> files
246+ }
247+ }
248+
240249/* *
241250 * @param recursive walk into sub folders
242251 */
243252@WorkerThread
244253fun DocumentFile.search (
245254 recursive : Boolean = false,
246- searchMode : FileSearchMode = FileSearchMode .ALL ,
255+ documentType : DocumentFileType = DocumentFileType .ALL ,
247256 mimeType : String = DocumentFileCompat .MIME_TYPE_UNKNOWN ,
248257 name : String = "",
249258 regex : Regex ? = null
250259): List <DocumentFile > {
251260 return when {
252261 ! isDirectory -> emptyList()
253- recursive -> walkFileTree(searchMode , mimeType, name, regex)
262+ recursive -> walkFileTree(documentType , mimeType, name, regex)
254263 else -> {
255264 var sequence = listFiles().asSequence().filter { it.canRead() }
256265 if (name.isNotEmpty()) {
@@ -263,17 +272,17 @@ fun DocumentFile.search(
263272 sequence = sequence.filter { it.type == mimeType }
264273 }
265274 @Suppress(" NON_EXHAUSTIVE_WHEN" )
266- when (searchMode ) {
267- FileSearchMode . FILE_ONLY -> sequence = sequence.filter { it.isFile }
268- FileSearchMode . FOLDER_ONLY -> sequence = sequence.filter { it.isDirectory }
275+ when (documentType ) {
276+ DocumentFileType . FILE -> sequence = sequence.filter { it.isFile }
277+ DocumentFileType . FOLDER -> sequence = sequence.filter { it.isDirectory }
269278 }
270279 sequence.toList()
271280 }
272281 }
273282}
274283
275284private fun DocumentFile.walkFileTree (
276- searchMode : FileSearchMode ,
285+ documentType : DocumentFileType ,
277286 mimeType : String ,
278287 nameFilter : String ,
279288 regex : Regex ?
@@ -283,7 +292,7 @@ private fun DocumentFile.walkFileTree(
283292 if (! canRead()) continue
284293
285294 if (file.isFile) {
286- if (searchMode == FileSearchMode . FOLDER_ONLY ) {
295+ if (documentType == DocumentFileType . FOLDER ) {
287296 continue
288297 }
289298 val filename = file.name.orEmpty()
@@ -294,14 +303,13 @@ private fun DocumentFile.walkFileTree(
294303 fileTree.add(file)
295304 }
296305 } else {
297- val folderName = file.name.orEmpty()
298- if (searchMode != FileSearchMode .FILE_ONLY
299- && (nameFilter.isEmpty() || folderName == nameFilter)
300- && (regex == null || regex.matches(folderName))
301- ) {
302- fileTree.add(file)
306+ if (documentType != DocumentFileType .FILE ) {
307+ val folderName = file.name.orEmpty()
308+ if ((nameFilter.isEmpty() || folderName == nameFilter) && (regex == null || regex.matches(folderName))) {
309+ fileTree.add(file)
310+ }
303311 }
304- fileTree.addAll(file.walkFileTree(searchMode , mimeType, nameFilter, regex))
312+ fileTree.addAll(file.walkFileTree(documentType , mimeType, nameFilter, regex))
305313 }
306314 }
307315 return fileTree
0 commit comments