Updated on 2026-08-14

This commit is contained in:
Tangem 2024-04-07 09:29:59 +08:00
parent 55bda27036
commit 50a485e986
16 changed files with 34 additions and 100 deletions

View file

@ -88,7 +88,6 @@ dependencies {
implementation(projects.data.card) implementation(projects.data.card)
implementation(projects.data.common) implementation(projects.data.common)
implementation(projects.data.settings) implementation(projects.data.settings)
implementation(projects.data.source.preferences)
implementation(projects.data.tokens) implementation(projects.data.tokens)
implementation(projects.data.txhistory) implementation(projects.data.txhistory)
implementation(projects.data.wallets) implementation(projects.data.wallets)

View file

@ -16,7 +16,6 @@ import com.tangem.blockchainsdk.BlockchainSDKFactory
import com.tangem.core.analytics.Analytics import com.tangem.core.analytics.Analytics
import com.tangem.core.analytics.filter.OneTimeEventFilter import com.tangem.core.analytics.filter.OneTimeEventFilter
import com.tangem.core.featuretoggle.manager.FeatureTogglesManager import com.tangem.core.featuretoggle.manager.FeatureTogglesManager
import com.tangem.data.source.preferences.PreferencesDataSource
import com.tangem.datasource.api.common.MoshiConverter import com.tangem.datasource.api.common.MoshiConverter
import com.tangem.datasource.api.common.createNetworkLoggingInterceptor import com.tangem.datasource.api.common.createNetworkLoggingInterceptor
import com.tangem.datasource.asset.AssetReader import com.tangem.datasource.asset.AssetReader
@ -80,7 +79,6 @@ lateinit var store: Store<AppState>
lateinit var foregroundActivityObserver: ForegroundActivityObserver lateinit var foregroundActivityObserver: ForegroundActivityObserver
lateinit var activityResultCaller: ActivityResultCaller lateinit var activityResultCaller: ActivityResultCaller
lateinit var preferencesStorage: PreferencesDataSource
lateinit var walletConnectRepository: WalletConnectRepository lateinit var walletConnectRepository: WalletConnectRepository
internal lateinit var derivationsFinder: DerivationsFinder internal lateinit var derivationsFinder: DerivationsFinder
@ -106,9 +104,6 @@ internal class TapApplication : Application(), ImageLoaderFactory {
@Inject @Inject
lateinit var customTokenFeatureToggles: CustomTokenFeatureToggles lateinit var customTokenFeatureToggles: CustomTokenFeatureToggles
@Inject
lateinit var preferencesDataSource: PreferencesDataSource
@Inject @Inject
lateinit var walletConnect2Repository: WalletConnect2Repository lateinit var walletConnect2Repository: WalletConnect2Repository
@ -202,7 +197,6 @@ internal class TapApplication : Application(), ImageLoaderFactory {
activityResultCaller = foregroundActivityObserver activityResultCaller = foregroundActivityObserver
registerActivityLifecycleCallbacks(foregroundActivityObserver.callbacks) registerActivityLifecycleCallbacks(foregroundActivityObserver.callbacks)
preferencesStorage = preferencesDataSource
walletConnectRepository = WalletConnectRepository(this) walletConnectRepository = WalletConnectRepository(this)
// TODO: Try to performance and user experience. // TODO: Try to performance and user experience.

View file

@ -148,4 +148,12 @@ internal object SettingsDomainModule {
): SetSaveWalletScreenShownUseCase { ): SetSaveWalletScreenShownUseCase {
return SetSaveWalletScreenShownUseCase(settingsRepository = settingsRepository) return SetSaveWalletScreenShownUseCase(settingsRepository = settingsRepository)
} }
@Provides
@ViewModelScoped
fun provideIncrementAppLaunchCounterUseCase(
settingsRepository: SettingsRepository,
): IncrementAppLaunchCounterUseCase {
return IncrementAppLaunchCounterUseCase(settingsRepository = settingsRepository)
}
} }

View file

@ -11,6 +11,7 @@ import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase
import com.tangem.domain.balancehiding.ListenToFlipsUseCase import com.tangem.domain.balancehiding.ListenToFlipsUseCase
import com.tangem.domain.balancehiding.UpdateBalanceHidingSettingsUseCase import com.tangem.domain.balancehiding.UpdateBalanceHidingSettingsUseCase
import com.tangem.domain.settings.DeleteDeprecatedLogsUseCase import com.tangem.domain.settings.DeleteDeprecatedLogsUseCase
import com.tangem.domain.settings.IncrementAppLaunchCounterUseCase
import com.tangem.tap.features.main.model.MainScreenState import com.tangem.tap.features.main.model.MainScreenState
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
@ -26,6 +27,7 @@ internal class MainViewModel @Inject constructor(
private val reduxNavController: ReduxNavController, private val reduxNavController: ReduxNavController,
private val fetchAppCurrenciesUseCase: FetchAppCurrenciesUseCase, private val fetchAppCurrenciesUseCase: FetchAppCurrenciesUseCase,
private val deleteDeprecatedLogsUseCase: DeleteDeprecatedLogsUseCase, private val deleteDeprecatedLogsUseCase: DeleteDeprecatedLogsUseCase,
private val incrementAppLaunchCounterUseCase: IncrementAppLaunchCounterUseCase,
private val dispatchers: CoroutineDispatcherProvider, private val dispatchers: CoroutineDispatcherProvider,
getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase, getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
) : ViewModel(), MainIntents { ) : ViewModel(), MainIntents {
@ -40,6 +42,8 @@ internal class MainViewModel @Inject constructor(
val state: StateFlow<MainScreenState> = stateHolder.stateFlow val state: StateFlow<MainScreenState> = stateHolder.stateFlow
init { init {
viewModelScope.launch(dispatchers.main) { incrementAppLaunchCounterUseCase() }
updateAppCurrencies() updateAppCurrencies()
observeFlips() observeFlips()
displayBalancesHidingStatusToast() displayBalancesHidingStatusToast()

View file

@ -26,8 +26,6 @@ dependencies {
implementation(projects.core.datasource) implementation(projects.core.datasource)
implementation(projects.core.utils) implementation(projects.core.utils)
implementation(projects.data.source.preferences)
implementation(projects.domain.card) implementation(projects.domain.card)
implementation(projects.domain.models) implementation(projects.domain.models)
} }

View file

@ -15,8 +15,6 @@ dependencies {
implementation(projects.core.datasource) implementation(projects.core.datasource)
implementation(projects.core.utils) implementation(projects.core.utils)
implementation(projects.data.source.preferences)
implementation(projects.domain.balanceHiding.models) implementation(projects.domain.balanceHiding.models)
implementation(projects.domain.settings) implementation(projects.domain.settings)

View file

@ -104,4 +104,11 @@ internal class DefaultSettingsRepository(
override suspend fun setShouldSaveAccessCodes(value: Boolean) { override suspend fun setShouldSaveAccessCodes(value: Boolean) {
appPreferencesStore.store(key = PreferencesKeys.SHOULD_SAVE_ACCESS_CODES_KEY, value = value) appPreferencesStore.store(key = PreferencesKeys.SHOULD_SAVE_ACCESS_CODES_KEY, value = value)
} }
override suspend fun incrementAppLaunchCounter() {
appPreferencesStore.editData { preferences ->
val count = preferences.getOrDefault(key = PreferencesKeys.APP_LAUNCH_COUNT_KEY, default = 0)
preferences[PreferencesKeys.APP_LAUNCH_COUNT_KEY] = count + 1
}
}
} }

View file

@ -1 +0,0 @@
/build

View file

@ -1,21 +0,0 @@
plugins {
alias(deps.plugins.kotlin.android)
alias(deps.plugins.kotlin.kapt)
alias(deps.plugins.android.library)
id("configuration")
}
android {
namespace = "com.tangem.data.source.preferences"
}
dependencies {
implementation(deps.androidx.core.ktx)
implementation(deps.moshi)
implementation(deps.moshi.kotlin)
implementation(deps.hilt.android)
kapt(deps.hilt.kapt)
// For MoshiJsonConverter
implementation(deps.tangem.card.core)
}

View file

@ -1,29 +0,0 @@
package com.tangem.data.source.preferences
import android.content.Context
import android.content.SharedPreferences
import androidx.core.content.edit
import javax.inject.Inject
// 🔥FIXME: Only logic to work with preferences must be here, must be separated to repositories
// TODO: Replace shared preferences with DataStore
@Deprecated("Create repository instead")
class PreferencesDataSource @Inject internal constructor(applicationContext: Context) {
private val preferences: SharedPreferences =
applicationContext.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE)
init {
incrementLaunchCounter()
}
private fun incrementLaunchCounter() {
var count = preferences.getInt(APP_LAUNCH_COUNT_KEY, 0)
preferences.edit { putInt(APP_LAUNCH_COUNT_KEY, ++count) }
}
companion object {
private const val PREFERENCES_NAME = "tapPrefs"
private const val APP_LAUNCH_COUNT_KEY = "launchCount"
}
}

View file

@ -1,13 +0,0 @@
package com.tangem.data.source.preferences.adapters
import com.squareup.moshi.FromJson
import com.squareup.moshi.ToJson
import java.math.BigDecimal
class BigDecimalAdapter {
@FromJson
fun fromJson(value: String) = BigDecimal(value)
@ToJson
fun toJson(value: BigDecimal) = value.toString()
}

View file

@ -1,19 +0,0 @@
package com.tangem.data.source.preferences.di
import android.content.Context
import com.tangem.data.source.preferences.PreferencesDataSource
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
internal object PreferencesStoreModule {
@Provides
@Singleton
fun providePreferencesStore(@ApplicationContext context: Context) = PreferencesDataSource(context)
}

View file

@ -1,5 +0,0 @@
package com.tangem.data.source.preferences.storage
internal interface Migration {
fun migrate()
}

View file

@ -0,0 +1,13 @@
package com.tangem.domain.settings
import arrow.core.Either
import com.tangem.domain.settings.repositories.SettingsRepository
class IncrementAppLaunchCounterUseCase(
private val settingsRepository: SettingsRepository,
) {
suspend operator fun invoke(): Either<Throwable, Unit> {
return Either.catch { settingsRepository.incrementAppLaunchCounter() }
}
}

View file

@ -31,4 +31,6 @@ interface SettingsRepository {
suspend fun shouldSaveAccessCodes(): Boolean suspend fun shouldSaveAccessCodes(): Boolean
suspend fun setShouldSaveAccessCodes(value: Boolean) suspend fun setShouldSaveAccessCodes(value: Boolean)
suspend fun incrementAppLaunchCounter()
} }

View file

@ -151,7 +151,6 @@ include(":data:balance-hiding")
include(":data:common") include(":data:common")
include(":data:card") include(":data:card")
include(":data:tokens") include(":data:tokens")
include(":data:source:preferences")
include(":data:settings") include(":data:settings")
include(":data:txhistory") include(":data:txhistory")
include(":data:wallets") include(":data:wallets")