Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-16 12:42:11 +03:00
parent 70e40cb2a7
commit bbb9280413
8 changed files with 294 additions and 49 deletions

View file

@ -1,25 +1,17 @@
package com.tangem.data.settings
import com.tangem.datasource.local.logs.AppLogsStore
import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.datasource.local.preferences.PreferencesKeys
import com.tangem.datasource.local.preferences.utils.getSyncOrDefault
import com.tangem.datasource.local.preferences.utils.store
import com.tangem.domain.settings.repositories.SettingsRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import org.joda.time.DateTime
internal class DefaultSettingsRepository(
private val appPreferencesStore: AppPreferencesStore,
dispatchers: CoroutineDispatcherProvider,
private val appLogsStore: AppLogsStore,
) : SettingsRepository {
private val scope = CoroutineScope(dispatchers.io)
private val mutex = Mutex()
override suspend fun shouldShowSaveUserWalletScreen(): Boolean {
return appPreferencesStore.getSyncOrDefault(
key = PreferencesKeys.SHOULD_SHOW_SAVE_USER_WALLET_SCREEN_KEY,
@ -46,35 +38,11 @@ internal class DefaultSettingsRepository(
}
override fun saveLogMessage(message: String) {
val newLogs = DateTime.now().millis.toString() to message
scope.launch {
mutex.withLock {
appPreferencesStore.editData { preferences ->
val savedLogs = preferences.getObjectMap<String>(PreferencesKeys.APP_LOGS_KEY)
preferences.setObjectMap(key = PreferencesKeys.APP_LOGS_KEY, value = savedLogs + newLogs)
}
}
}
appLogsStore.saveLogMessage(message)
}
override suspend fun deleteDeprecatedLogs(maxSize: Int) {
appPreferencesStore.editData { preferences ->
val savedLogs = preferences.getObjectMap<String>(PreferencesKeys.APP_LOGS_KEY)
var sum = 0
preferences.setObjectMap(
key = PreferencesKeys.APP_LOGS_KEY,
value = savedLogs.entries
.sortedBy(Map.Entry<String, String>::key)
.takeLastWhile {
sum += it.value.length
sum < maxSize
}
.associate { it.key to it.value },
)
}
override fun deleteDeprecatedLogs(maxSize: Int) {
appLogsStore.deleteDeprecatedLogs(maxSize)
}
override suspend fun isSendTapHelpPreviewEnabled(): Boolean {

View file

@ -4,12 +4,12 @@ import com.tangem.data.settings.DefaultAppRatingRepository
import com.tangem.data.settings.DefaultPermissionRepository
import com.tangem.data.settings.DefaultPromoSettingsRepository
import com.tangem.data.settings.DefaultSettingsRepository
import com.tangem.datasource.local.logs.AppLogsStore
import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.domain.settings.repositories.AppRatingRepository
import com.tangem.domain.settings.repositories.PermissionRepository
import com.tangem.domain.settings.repositories.PromoSettingsRepository
import com.tangem.domain.settings.repositories.SettingsRepository
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@ -24,9 +24,9 @@ internal object SettingsDataModule {
@Singleton
fun provideSettingsRepository(
appPreferencesStore: AppPreferencesStore,
dispatchers: CoroutineDispatcherProvider,
appLogsStore: AppLogsStore,
): SettingsRepository {
return DefaultSettingsRepository(appPreferencesStore = appPreferencesStore, dispatchers = dispatchers)
return DefaultSettingsRepository(appPreferencesStore = appPreferencesStore, appLogsStore = appLogsStore)
}
@Provides