From 752901e5c4a65048ccd3a27578ee1f60725b2a11 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Wed, 2 Aug 2023 21:01:33 +0200 Subject: [PATCH] fix: Fix AppSettings --- app/build.gradle | 5 ++- .../myzel394/locationtest/db/AppSettings.kt | 16 ++++++++- .../locationtest/db/AppSettingsSerializer.kt | 33 +++++++++++++++++++ build.gradle | 2 ++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/app/myzel394/locationtest/db/AppSettingsSerializer.kt diff --git a/app/build.gradle b/app/build.gradle index 818795d..3751990 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' } \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/locationtest/db/AppSettings.kt b/app/src/main/java/app/myzel394/locationtest/db/AppSettings.kt index 1dbbbc9..1cbc8a7 100644 --- a/app/src/main/java/app/myzel394/locationtest/db/AppSettings.kt +++ b/app/src/main/java/app/myzel394/locationtest/db/AppSettings.kt @@ -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, diff --git a/app/src/main/java/app/myzel394/locationtest/db/AppSettingsSerializer.kt b/app/src/main/java/app/myzel394/locationtest/db/AppSettingsSerializer.kt new file mode 100644 index 0000000..8dde1e7 --- /dev/null +++ b/app/src/main/java/app/myzel394/locationtest/db/AppSettingsSerializer.kt @@ -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 { + 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() + ) + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 2893c5f..2af2ea1 100644 --- a/build.gradle +++ b/build.gradle @@ -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' } \ No newline at end of file