From e516848f4f7e46f37ed28cf1f95dbfe021fe4d58 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Mon, 2 Oct 2023 11:30:23 +0200 Subject: [PATCH] File search: improve handling of launcher theme and launcher backup file types --- .../ui/settings/backup/CreateBackupSheet.kt | 2 +- core/base/src/main/res/drawable/ic_file_backup.xml | 5 +++++ core/base/src/main/res/drawable/ic_file_theme.xml | 5 +++++ core/i18n/src/main/res/values/strings.xml | 2 ++ .../de/mm20/launcher2/files/FileSerialization.kt | 2 +- .../launcher2/files/providers/LocalFileProvider.kt | 2 +- .../java/de/mm20/launcher2/search/data/File.kt | 14 +++++++++----- .../de/mm20/launcher2/search/data/LocalFile.kt | 3 ++- 8 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 core/base/src/main/res/drawable/ic_file_backup.xml create mode 100644 core/base/src/main/res/drawable/ic_file_theme.xml diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/backup/CreateBackupSheet.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/backup/CreateBackupSheet.kt index 04206270..c950c92b 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/backup/CreateBackupSheet.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/backup/CreateBackupSheet.kt @@ -42,7 +42,7 @@ fun CreateBackupSheet( val backupLauncher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.CreateDocument("application/vendor.de.mm20.launcher2.backup"), + contract = ActivityResultContracts.CreateDocument("application/vnd.de.mm20.launcher2.backup"), onResult = { if (it != null) viewModel.createBackup(it) } diff --git a/core/base/src/main/res/drawable/ic_file_backup.xml b/core/base/src/main/res/drawable/ic_file_backup.xml new file mode 100644 index 00000000..e6575877 --- /dev/null +++ b/core/base/src/main/res/drawable/ic_file_backup.xml @@ -0,0 +1,5 @@ + + + diff --git a/core/base/src/main/res/drawable/ic_file_theme.xml b/core/base/src/main/res/drawable/ic_file_theme.xml new file mode 100644 index 00000000..879e8ab0 --- /dev/null +++ b/core/base/src/main/res/drawable/ic_file_theme.xml @@ -0,0 +1,5 @@ + + + diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 0d176c46..220425b6 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -145,6 +145,8 @@ Form %1$s backup + + %1$s theme %1$s file diff --git a/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt b/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt index f660d6b5..2fbfcf8b 100644 --- a/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt +++ b/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt @@ -51,7 +51,7 @@ class LocalFileDeserializer( if (!java.io.File(path).exists()) return null val directory = java.io.File(path).isDirectory val id = cursor.getLong(0) - val mimeType = cursor.getStringOrNull(3) + val mimeType = cursor.getStringOrNull(3).takeIf { it != "application/octet-stream" } ?: if (directory) "resource/folder" else LocalFile.getMimetypeByFileExtension( path.substringAfterLast( '.' diff --git a/data/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt b/data/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt index 9bebb7bb..a8a7d022 100644 --- a/data/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt +++ b/data/files/src/main/java/de/mm20/launcher2/files/providers/LocalFileProvider.kt @@ -44,7 +44,7 @@ internal class LocalFileProvider( val path = cursor.getString(3) if (!java.io.File(path).exists()) continue val directory = java.io.File(path).isDirectory - val mimeType = (cursor.getStringOrNull(4) + val mimeType = (cursor.getStringOrNull(4).takeIf { it != "application/octet-stream" } ?: if (directory) "resource/folder" else LocalFile.getMimetypeByFileExtension( path.substringAfterLast( '.' diff --git a/data/files/src/main/java/de/mm20/launcher2/search/data/File.kt b/data/files/src/main/java/de/mm20/launcher2/search/data/File.kt index c6fc7c63..8dedb75a 100644 --- a/data/files/src/main/java/de/mm20/launcher2/search/data/File.kt +++ b/data/files/src/main/java/de/mm20/launcher2/search/data/File.kt @@ -49,6 +49,8 @@ interface File : SavableSearchable { "application/vnd.android.package-archive" -> R.drawable.ic_file_android to R.color.lightgreen "application/vnd.google-apps.form" -> R.drawable.ic_file_form to R.color.deeppurple "application/vnd.google-apps.drawing" -> R.drawable.ic_file_picture to R.color.teal + "application/vnd.de.mm20.launcher2.backup" -> R.drawable.ic_file_backup to R.color.brown + "application/vnd.de.mm20.launcher2.theme" -> R.drawable.ic_file_theme to R.color.amber else -> R.drawable.ic_file_generic to R.color.bluegrey } } @@ -64,12 +66,18 @@ interface File : SavableSearchable { fun getFileType(context: Context): String { if (isDirectory) return context.getString(R.string.file_type_directory) - if (mimeType == "application/vendor.de.mm20.launcher2.backup") { + if (mimeType == "application/vnd.de.mm20.launcher2.backup") { return context.getString( R.string.file_type_launcherbackup, context.getString(R.string.app_name) ) } + if (mimeType == "application/vnd.de.mm20.launcher2.theme") { + return context.getString( + R.string.file_type_launchertheme, + context.getString(R.string.app_name) + ) + } val resource = when (mimeType) { "application/zip", "application/x-zip-compressed", @@ -118,10 +126,6 @@ interface File : SavableSearchable { } if (resource == R.string.file_type_none && label.matches(Regex(".+\\..+"))) { val extension = label.substringAfterLast(".").uppercase(Locale.getDefault()) - if (extension == "kvaesitso") return context.getString( - R.string.file_type_launcherbackup, - context.getString(R.string.app_name) - ) return context.getString(R.string.file_type_generic, extension) } return context.getString(resource) diff --git a/data/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt b/data/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt index 3fca9c7b..242995da 100644 --- a/data/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt +++ b/data/files/src/main/java/de/mm20/launcher2/search/data/LocalFile.kt @@ -223,7 +223,8 @@ data class LocalFile( "ogg" -> "audio/ogg" "wav" -> "audio/wav" "mp4" -> "video/mp4" - "kvaesitso" -> "application/vendor.de.mm20.launcher2.backup" + "kvaesitso" -> "application/vnd.de.mm20.launcher2.backup" + "kvtheme" -> "application/vnd.de.mm20.launcher2.theme" else -> "application/octet-stream" } }