diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt index c0fc7e0cef..cd1facee55 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt @@ -2,6 +2,7 @@ package com.tangem.datasource.local.preferences.utils import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit +import com.squareup.moshi.JsonDataException import com.squareup.moshi.Types import com.tangem.datasource.local.preferences.AppPreferencesStore import kotlinx.coroutines.flow.Flow @@ -11,7 +12,15 @@ import kotlinx.coroutines.flow.map /** Get flow of nullable data [T] by string [key] */ inline fun AppPreferencesStore.getObject(key: Preferences.Key): Flow { val adapter = moshi.adapter(T::class.java) - return data.map { it[key]?.let(adapter::fromJson) } + return data.map { preferences -> + preferences[key]?.let { + try { + adapter.fromJson(it) + } catch (e: JsonDataException) { + null + } + } + } } /** @@ -23,7 +32,13 @@ inline fun AppPreferencesStore.getObject(key: Preferences.Key AppPreferencesStore.getObject(key: Preferences.Key, default: T): Flow { val adapter = moshi.adapter(T::class.java) // TODO: Support parameterized types - return data.map { it[key]?.let(adapter::fromJson) ?: default } + return data.map { + try { + it[key]?.let(adapter::fromJson) ?: default + } catch (e: JsonDataException) { + default + } + } } /** @@ -37,7 +52,13 @@ suspend inline fun AppPreferencesStore.getObjectSyncOrNull(key: Pref val adapter = moshi.adapter(T::class.java) // TODO: Support parameterized types return data.firstOrNull() ?.get(key) - ?.let(adapter::fromJson) + ?.let { + try { + adapter.fromJson(it) + } catch (e: JsonDataException) { + null + } + } } /** Get data [T] by string [key]. If data is not found, it returns [default] */ @@ -48,7 +69,13 @@ suspend inline fun AppPreferencesStore.getObjectSyncOrDefault( val adapter = moshi.adapter(T::class.java) return data.firstOrNull() ?.get(key) - ?.let(adapter::fromJson) + ?.let { + try { + adapter.fromJson(it) + } catch (e: JsonDataException) { + default + } + } ?: default }