Skip to content

Commit 38904bd

Browse files
committed
Add DocumentFile.findFiles()
1 parent 57ef1f9 commit 38904bd

3 files changed

Lines changed: 40 additions & 17 deletions

File tree

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,21 @@ Adding Simple Storage into your project is simple:
1313
implementation "com.anggrayudi:storage:0.1.0"
1414
```
1515

16+
Snapshots can be found [here](https://oss.sonatype.org/#nexus-search;quick~com.anggrayudi).
17+
To use SNAPSHOT version, you need to add this URL to the root Gradle:
18+
19+
```groovy
20+
allprojects {
21+
repositories {
22+
google()
23+
jcenter()
24+
mavenCentral()
25+
// add this line
26+
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
27+
}
28+
}
29+
```
30+
1631
## Request Storage Access
1732

1833
Although user has granted read and write permissions during runtime, your app may still does not

storage/src/main/java/com/anggrayudi/storage/file/DocumentFileExt.kt

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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
244253
fun 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

275284
private 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

storage/src/main/java/com/anggrayudi/storage/file/FileSearchMode.kt renamed to storage/src/main/java/com/anggrayudi/storage/file/DocumentFileType.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ package com.anggrayudi.storage.file
44
* Created on 08/09/20
55
* @author Anggrayudi H
66
*/
7-
enum class FileSearchMode {
7+
enum class DocumentFileType {
88
ALL,
9-
FILE_ONLY,
10-
FOLDER_ONLY
9+
FILE,
10+
FOLDER
1111
}

0 commit comments

Comments
 (0)