From bec01d86339732b25354bfe75f9d33199ba10452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Wed, 15 May 2024 17:17:05 +0200 Subject: [PATCH] Fix crash when creating an `EncryptedFile` in Android 6 --- changelog.d/2846.bugfix | 1 + .../sessionstorage/impl/di/SessionStorageModule.kt | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 changelog.d/2846.bugfix diff --git a/changelog.d/2846.bugfix b/changelog.d/2846.bugfix new file mode 100644 index 00000000000..2644b853f02 --- /dev/null +++ b/changelog.d/2846.bugfix @@ -0,0 +1 @@ +Fix a crash when trying to create an `EncryptedFile` in Android 6. diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt index 052943388eb..8d22dcfa61c 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt @@ -35,6 +35,13 @@ object SessionStorageModule { fun provideMatrixDatabase(@ApplicationContext context: Context): SessionDatabase { val name = "session_database" val secretFile = context.getDatabasePath("$name.key") + + // Make sure the parent directory of the key file exists, otherwise it will crash in older Android versions + val parentDir = secretFile.parentFile + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs() + } + val passphraseProvider = RandomSecretPassphraseProvider(context, secretFile) val driver = SqlCipherDriverFactory(passphraseProvider) .create(SessionDatabase.Schema, "$name.db", context)