diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/AppPreferencesStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/AppPreferencesStore.kt index 810c38230d..2b1de6b7b0 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/AppPreferencesStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/AppPreferencesStore.kt @@ -65,11 +65,11 @@ class AppPreferencesStore( } /** Get map with [String] key and value [V] by string [key] from [MutablePreferences] */ - inline fun MutablePreferences.getObjectMap(key: Preferences.Key): Map? { + inline fun MutablePreferences.getObjectMap(key: Preferences.Key): Map { val type = Types.newParameterizedType(Map::class.java, String::class.java, V::class.java) val adapter = moshi.adapter>(type) - return this[key]?.let(adapter::fromJson) + return this[key]?.let(adapter::fromJson).orEmpty() } /** diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt index 4ff06e36b2..22d8aa8ea3 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesKeys.kt @@ -61,6 +61,8 @@ object PreferencesKeys { val IS_TANGEM_TOS_ACCEPTED_KEY by lazy { booleanPreferencesKey(name = "tangem_tos_accepted") } + val APP_LOGS_KEY by lazy { stringPreferencesKey(name = "app_logs") } + fun getStart2CoinTOSAcceptedKey(region: String?) = booleanPreferencesKey(name = "start2Coin_tos_accepted_$region") } diff --git a/data/settings/build.gradle.kts b/data/settings/build.gradle.kts index 5daa9b86f0..f12116b4cf 100644 --- a/data/settings/build.gradle.kts +++ b/data/settings/build.gradle.kts @@ -22,9 +22,15 @@ dependencies { implementation(deps.androidx.datastore) - /** DI */ + // region DI implementation(deps.hilt.android) kapt(deps.hilt.kapt) + // endregion + // region Others dependencies + implementation(deps.jodatime) implementation(deps.kotlin.coroutines) + implementation(deps.moshi) + implementation(deps.moshi.kotlin) + // endregion } diff --git a/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt b/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt index 8d3c6f18bc..4e7ff03252 100644 --- a/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt +++ b/data/settings/src/main/java/com/tangem/data/settings/DefaultSettingsRepository.kt @@ -3,11 +3,14 @@ package com.tangem.data.settings import com.tangem.data.source.preferences.PreferencesDataSource import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys +import com.tangem.datasource.local.preferences.utils.getObjectMap import com.tangem.datasource.local.preferences.utils.getSyncOrDefault import com.tangem.datasource.local.preferences.utils.store +import com.tangem.domain.settings.models.AppLogsModel import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext +import org.joda.time.DateTime internal class DefaultSettingsRepository( private val preferencesDataSource: PreferencesDataSource, @@ -32,4 +35,38 @@ internal class DefaultSettingsRepository( value = isEnabled, ) } + + override suspend fun getAppLogs(): List { + return appPreferencesStore.getObjectMap(key = PreferencesKeys.APP_LOGS_KEY) + .map { AppLogsModel(timestamp = it.key.toLong(), message = it.value) } + } + + override suspend fun updateAppLogs(message: String) { + val newLogs = DateTime.now().millis.toString() to message + + appPreferencesStore.editData { preferences -> + val savedLogs = preferences.getObjectMap(PreferencesKeys.APP_LOGS_KEY) + + preferences.setObjectMap(key = PreferencesKeys.APP_LOGS_KEY, value = savedLogs + newLogs) + } + } + + override suspend fun deleteDeprecatedLogs() { + val threeDaysAgo = getThreeDaysAgoTimestamp() + + appPreferencesStore.editData { preferences -> + val savedLogs = preferences.getObjectMap(PreferencesKeys.APP_LOGS_KEY) + + preferences.setObjectMap( + key = PreferencesKeys.APP_LOGS_KEY, + value = savedLogs.filterKeys { it.toLong() > threeDaysAgo }, + ) + } + } + + private fun getThreeDaysAgoTimestamp(): Long = DateTime.now().minusDays(THREE_DAYS).millis + + private companion object { + const val THREE_DAYS = 3 + } } \ No newline at end of file diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/models/AppLogsModel.kt b/domain/settings/src/main/java/com/tangem/domain/settings/models/AppLogsModel.kt new file mode 100644 index 0000000000..746974930f --- /dev/null +++ b/domain/settings/src/main/java/com/tangem/domain/settings/models/AppLogsModel.kt @@ -0,0 +1,3 @@ +package com.tangem.domain.settings.models + +data class AppLogsModel(val timestamp: Long, val message: String) \ No newline at end of file diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt b/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt index 7dd4507554..f686561f3e 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt +++ b/domain/settings/src/main/java/com/tangem/domain/settings/repositories/SettingsRepository.kt @@ -1,5 +1,7 @@ package com.tangem.domain.settings.repositories +import com.tangem.domain.settings.models.AppLogsModel + interface SettingsRepository { suspend fun shouldShowSaveUserWalletScreen(): Boolean @@ -7,4 +9,13 @@ interface SettingsRepository { suspend fun isWalletScrollPreviewEnabled(): Boolean suspend fun setWalletScrollPreviewAvailability(isEnabled: Boolean) + + @Throws + suspend fun getAppLogs(): List + + @Throws + suspend fun updateAppLogs(message: String) + + @Throws + suspend fun deleteDeprecatedLogs() } \ No newline at end of file diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/DefaultSwapTransactionRepository.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/DefaultSwapTransactionRepository.kt index 3499d36f4c..e360f8bfad 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/DefaultSwapTransactionRepository.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/DefaultSwapTransactionRepository.kt @@ -152,7 +152,7 @@ class DefaultSwapTransactionRepository( key = PreferencesKeys.SWAP_TRANSACTIONS_STATUSES_KEY, ) - val updatesMap = savedMap?.toMutableMap() ?: mutableMapOf() + val updatesMap = savedMap.toMutableMap() updatesMap[txId] = status mutablePreferences.setObjectMap( @@ -232,9 +232,9 @@ class DefaultSwapTransactionRepository( val savedList = mutablePreferences.getObjectMap( key = PreferencesKeys.SWAP_TRANSACTIONS_STATUSES_KEY, ) - val editedList = savedList?.filterNot { it.key == txId } + val editedList = savedList.filterNot { it.key == txId } - if (editedList.isNullOrEmpty()) { + if (editedList.isEmpty()) { mutablePreferences.remove(key = PreferencesKeys.SWAP_TRANSACTIONS_STATUSES_KEY) } else { mutablePreferences.setObjectMap(