Marc Planas
12/31/2023, 3:45 PMMoussa
12/31/2023, 3:46 PMMarc Planas
12/31/2023, 3:46 PMMoussa
12/31/2023, 3:48 PMMoussa
12/31/2023, 3:50 PMRoland
12/31/2023, 4:01 PMyoussef
12/31/2023, 5:19 PMMarc Planas
12/31/2023, 5:38 PMyoussef
12/31/2023, 5:41 PMRoland
12/31/2023, 5:57 PMiosMain:
import com.russhwolf.settings.ExperimentalSettingsImplementation
import com.russhwolf.settings.KeychainSettings
actual class EncryptedSettingsFactory(
) {
@OptIn(ExperimentalSettingsImplementation::class)
actual fun create(): EncryptedSettingsRepository {
return EncryptedSettingsRepository(
KeychainSettings(service = "ENCRYPTED_SESSION_SETTINGS")
)
}
}
private val encryptedSettingsRepository: EncryptedSettingsRepository by lazy {
EncryptedSettingsFactory().create()
}
androidMain:
import android.content.SharedPreferences
import com.russhwolf.settings.SharedPreferencesSettings
actual class EncryptedSettingsFactory(
private val sharedPrefs: SharedPreferences
) {
actual fun create(): EncryptedSettingsRepository {
return EncryptedSettingsRepository(
SharedPreferencesSettings(sharedPrefs)
)
}
}
fun Application.createEncryptedSettingsRepository(): EncryptedSettingsRepository {
val masterKey = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
val encryptedPrefs = EncryptedSharedPreferences.create(
/* fileName = */ "ENCRYPTED_SESSION_SETTINGS",
/* masterKeyAlias = */ masterKey,
/* context = */ this,
/* prefKeyEncryptionScheme = */ EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
/* prefValueEncryptionScheme = */ EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
return EncryptedSettingsFactory(
encryptedPrefs
).create()
}
private val encryptedSettingsRepository: EncryptedSettingsRepository by lazy {
context.createEncryptedSettingsRepository()
}
commonMain
expect class EncryptedSettingsFactory {
fun create(): EncryptedSettingsRepository
}
class EncryptedSettingsRepository(
private val settings: Settings
) {
fun setMyString(myString: String) {
settings.putString("my_string", myString)
}
fun setMyString(myString: String): String? {
settings.getStringOrNull("my_string")
}
}
russhwolf
12/31/2023, 7:50 PMMcEna
12/31/2023, 8:16 PM