diff --git a/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt b/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt index a16fde1b4..74927d4a1 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt @@ -26,6 +26,7 @@ import android.os.StrictMode import android.os.StrictMode.ThreadPolicy import android.os.StrictMode.VmPolicy import android.util.Log +import androidx.security.crypto.EncryptedSharedPreferences import coil.ImageLoader import coil.disk.DiskCache import com.vitorpamplona.amethyst.service.playback.VideoCache @@ -87,6 +88,10 @@ class Amethyst : Application() { return ImageLoader.Builder(applicationContext).diskCache { imageCache } } + fun encryptedStorage(npub: String? = null): EncryptedSharedPreferences { + return EncryptedStorage.preferences(instance, npub) + } + companion object { lateinit var instance: Amethyst private set diff --git a/app/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt b/app/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt index 9d6b15dad..130658ecf 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/EncryptedStorage.kt @@ -20,32 +20,35 @@ */ package com.vitorpamplona.amethyst +import android.content.Context import androidx.security.crypto.EncryptedSharedPreferences import androidx.security.crypto.MasterKey -object EncryptedStorage { - private const val PREFERENCES_NAME = "secret_keeper" +class EncryptedStorage { + companion object { + private const val PREFERENCES_NAME = "secret_keeper" - // returns the preferences for each account or a global file if null. - fun prefsFileName(npub: String? = null): String { - return if (npub == null) PREFERENCES_NAME else "${PREFERENCES_NAME}_$npub" - } + // returns the preferences for each account or a global file if null. + fun prefsFileName(npub: String? = null): String { + return if (npub == null) PREFERENCES_NAME else "${PREFERENCES_NAME}_$npub" + } - fun preferences(npub: String? = null): EncryptedSharedPreferences { - val context = Amethyst.instance - val masterKey: MasterKey = - MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS) - .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) - .build() + fun preferences( + applicationContext: Context, + npub: String? = null, + ): EncryptedSharedPreferences { + val masterKey: MasterKey = + MasterKey.Builder(applicationContext, MasterKey.DEFAULT_MASTER_KEY_ALIAS) + .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) + .build() - val preferencesName = prefsFileName(npub) - - return EncryptedSharedPreferences.create( - context, - preferencesName, - masterKey, - EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, - EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM, - ) as EncryptedSharedPreferences + return EncryptedSharedPreferences.create( + applicationContext, + prefsFileName(npub), + masterKey, + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM, + ) as EncryptedSharedPreferences + } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt index b553a33d2..178c1a514 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt @@ -233,7 +233,7 @@ object LocalPreferences { if (npub == null) DEBUG_PREFERENCES_NAME else "${DEBUG_PREFERENCES_NAME}_$npub" Amethyst.instance.getSharedPreferences(preferenceFile, Context.MODE_PRIVATE) } else { - return EncryptedStorage.preferences(npub) + return Amethyst.instance.encryptedStorage(npub) } }