fix: Fix AppSettings

This commit is contained in:
Myzel394 2023-08-02 21:01:33 +02:00
parent 8d7dd96110
commit 752901e5c4
No known key found for this signature in database
GPG Key ID: 50098FCA22080F0F
4 changed files with 54 additions and 2 deletions

View File

@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'org.jetbrains.kotlin.plugin.serialization'
}
android {
@ -49,7 +50,6 @@ android {
}
dependencies {
implementation 'androidx.core:core-ktx:1.10.1'
implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0')
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
@ -75,5 +75,8 @@ dependencies {
implementation "androidx.datastore:datastore-preferences:1.0.0"
implementation "androidx.navigation:navigation-compose:2.6.0"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1"
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3'
}

View File

@ -2,11 +2,25 @@ package app.myzel394.locationtest.db
import android.media.MediaRecorder
import android.os.Build
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
@Serializable
data class AppSettings(
val audioRecorderSettings: AudioRecorderSettings = AudioRecorderSettings(),
)
val showAdvancedSettings: Boolean = false,
) {
fun setShowAdvancedSettings(showAdvancedSettings: Boolean): AppSettings {
return copy(showAdvancedSettings = showAdvancedSettings)
}
companion object {
fun getDefaultInstance(): AppSettings = AppSettings()
}
}
@Serializable
data class AudioRecorderSettings(
// 60 seconds
val intervalDuration: Long = 60 * 1000L,

View File

@ -0,0 +1,33 @@
package app.myzel394.locationtest.db
import androidx.datastore.core.Serializer
import kotlinx.serialization.SerializationException
import kotlinx.serialization.json.Json
import java.io.InputStream
import java.io.OutputStream
class AppSettingsSerializer: Serializer<AppSettings> {
override val defaultValue: AppSettings = AppSettings.getDefaultInstance()
override suspend fun readFrom(input: InputStream): AppSettings {
return try {
Json.decodeFromString(
AppSettings.serializer(),
input.readBytes().decodeToString()
)
} catch (error: SerializationException) {
error.printStackTrace()
defaultValue
}
}
@Suppress("BlockingMethodInNonBlockingContext")
override suspend fun writeTo(t: AppSettings, output: OutputStream) {
output.write(
Json.encodeToString(
AppSettings.serializer(),
t
).encodeToByteArray()
)
}
}

View File

@ -3,4 +3,6 @@ plugins {
id 'com.android.application' version '8.0.2' apply false
id 'com.android.library' version '8.0.2' apply false
id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
id 'org.jetbrains.kotlin.plugin.serialization' version '1.8.21'
}