Просмотр исходного кода

修复某些情况下的崩溃问题

HapeLee 6 месяцев назад
Родитель
Сommit
49d5c42fd8
1 измененных файлов с 15 добавлено и 19 удалено
  1. 15 19
      app/src/main/java/io/legado/app/help/FontLoader.kt

+ 15 - 19
app/src/main/java/io/legado/app/help/FontLoader.kt

@@ -4,32 +4,28 @@ import android.content.Context
 import android.net.Uri
 import androidx.documentfile.provider.DocumentFile
 import io.legado.app.utils.FileDoc
+import io.legado.app.utils.isContentScheme
 import io.legado.app.utils.listFileDocs
 import java.io.File
 
 fun loadFontFiles(context: Context, folderUri: Uri?): List<FileDoc> {
     val fontRegex = Regex("(?i).*\\.[ot]tf")
     if (folderUri != null) {
-        val documentFile = DocumentFile.fromTreeUri(context, folderUri)
-        return documentFile?.let { docFile ->
-            val fontFiles = mutableListOf<FileDoc>()
-            docFile.listFiles()?.forEach { file ->
-                if (file.isFile && file.name?.matches(fontRegex) == true) {
-                    fontFiles.add(
-                        FileDoc(
-                            name = file.name ?: "",
-                            isDir = false,
-                            size = file.length(),
-                            lastModified = file.lastModified(),
-                            uri = file.uri
-                        )
-                    )
+        try {
+            if (folderUri.isContentScheme()) {
+                val documentFile = DocumentFile.fromTreeUri(context, folderUri)
+                return documentFile?.listFileDocs { it.name.matches(fontRegex) } ?: emptyList()
+            } else {
+                val path = folderUri.path ?: folderUri.toString()
+                val file = File(path)
+                if (file.exists()) {
+                    return file.listFileDocs { it.name.matches(fontRegex) }
                 }
             }
-            fontFiles
-        } ?: emptyList()
-    } else {
-        val fontPath = "${context.getExternalFilesDir(null)?.absolutePath}/font"
-        return File(fontPath).listFileDocs { it.name.matches(fontRegex) }
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
     }
+    val fontPath = "${context.getExternalFilesDir(null)?.absolutePath}/font"
+    return File(fontPath).listFileDocs { it.name.matches(fontRegex) }
 }