From 5cd85dfcc18f4fdacb45c89d15675daa192db063 Mon Sep 17 00:00:00 2001 From: Suhas Dissanayake Date: Thu, 14 Mar 2024 17:34:28 +0530 Subject: [PATCH] fix: Changing save directory makes the old recordings inaccessible --- .../com/bnyro/recorder/util/FileRepository.kt | 28 ++++++++++++------- .../com/bnyro/recorder/util/IntentHelper.kt | 11 +++++--- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/bnyro/recorder/util/FileRepository.kt b/app/src/main/java/com/bnyro/recorder/util/FileRepository.kt index f213bb79..7f169688 100644 --- a/app/src/main/java/com/bnyro/recorder/util/FileRepository.kt +++ b/app/src/main/java/com/bnyro/recorder/util/FileRepository.kt @@ -21,6 +21,7 @@ interface FileRepository { suspend fun deleteAllFiles() fun getOutputFile(extension: String, prefix: String = ""): DocumentFile? fun getOutputDir(): DocumentFile + fun getOutputDirs(): List } class FileRepositoryImpl(val context: Context) : FileRepository { @@ -44,13 +45,17 @@ class FileRepositoryImpl(val context: Context) : FileRepository { ) private fun getVideoFiles(): List = - getOutputDir().listFiles().filter { file -> + getOutputDirs().flatMap { + it.listFiles().filter { file -> file.isFile && commonVideoExtensions.any { file.name?.endsWith(it) ?: false } } + } private fun getAudioFiles(): List = - getOutputDir().listFiles().filter { file -> + getOutputDirs().flatMap { + it.listFiles().filter { file -> file.isFile && commonAudioExtensions.any { file.name?.endsWith(it) ?: false } + } } override suspend fun getVideoRecordingItems(sortOrder: SortOrder): List { @@ -85,9 +90,11 @@ class FileRepositoryImpl(val context: Context) : FileRepository { override suspend fun deleteAllFiles() { withContext(Dispatchers.IO) { - getOutputDir().listFiles().forEach { + getOutputDirs().map { files -> + files.listFiles().forEach { if (it.isFile) it.delete() } + } } } @@ -117,15 +124,16 @@ class FileRepositoryImpl(val context: Context) : FileRepository { return existingFile ?: outputDir.createFile("audio/*", fullFileName) } - override fun getOutputDir(): DocumentFile { + override fun getOutputDir(): DocumentFile = getOutputDirs().last() + override fun getOutputDirs(): List { val prefDir = Preferences.prefs.getString(Preferences.targetFolderKey, "") + val externalFilesDir = run { + val dir = context.getExternalFilesDir(null) ?: context.filesDir + DocumentFile.fromFile(dir) + } return when { - prefDir.isNullOrBlank() -> { - val dir = context.getExternalFilesDir(null) ?: context.filesDir - DocumentFile.fromFile(dir) - } - - else -> DocumentFile.fromTreeUri(context, prefDir.toUri())!! + prefDir.isNullOrBlank() -> listOf(externalFilesDir) + else -> listOf(externalFilesDir, DocumentFile.fromTreeUri(context, prefDir.toUri())!!) } } diff --git a/app/src/main/java/com/bnyro/recorder/util/IntentHelper.kt b/app/src/main/java/com/bnyro/recorder/util/IntentHelper.kt index 69606945..54df9408 100644 --- a/app/src/main/java/com/bnyro/recorder/util/IntentHelper.kt +++ b/app/src/main/java/com/bnyro/recorder/util/IntentHelper.kt @@ -36,17 +36,20 @@ object IntentHelper { } private fun getFileUri(context: Context, file: DocumentFile): Uri { - return when (Preferences.prefs.getString(Preferences.targetFolderKey, "")) { - "", null -> { + return if (file.uri.path!!.startsWith( + (context.getExternalFilesDir(null) ?: context.filesDir).path + ) + ) { val rawFile = File( context.getExternalFilesDir(null) ?: context.filesDir, file.name.orEmpty() ) Log.e("using raw", rawFile.absolutePath) FileProvider.getUriForFile(context, context.packageName + ".provider", rawFile) + } else { + file.uri } - else -> file.uri - } + } fun openHref(context: Context, url: String) {