Updated on 2026-08-14

This commit is contained in:
Tangem 2025-08-19 10:12:01 +02:00
parent c68cf7165b
commit 39a190f056
22 changed files with 378 additions and 2 deletions

View file

@ -0,0 +1,44 @@
package com.tangem.datasource.di
import android.content.Context
import androidx.datastore.core.DataStoreFactory
import androidx.datastore.dataStoreFile
import com.squareup.moshi.Moshi
import com.tangem.datasource.local.token.DefaultTokenReceiveWarningActionStore
import com.tangem.datasource.local.token.TokenReceiveWarningActionStore
import com.tangem.datasource.utils.MoshiDataStoreSerializer
import com.tangem.datasource.utils.setTypes
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object TokenReceiveWarningModule {
@Provides
@Singleton
fun provideTokenReceiveWarningStore(
@NetworkMoshi moshi: Moshi,
@ApplicationContext context: Context,
dispatchers: CoroutineDispatcherProvider,
): TokenReceiveWarningActionStore {
return DefaultTokenReceiveWarningActionStore(
persistenceStore = DataStoreFactory.create(
serializer = MoshiDataStoreSerializer(
moshi = moshi,
types = setTypes<String>(),
defaultValue = emptySet(),
),
produceFile = { context.dataStoreFile(fileName = "token_receive_warnings_viewed") },
scope = CoroutineScope(context = dispatchers.io + SupervisorJob()),
),
)
}
}

View file

@ -0,0 +1,17 @@
package com.tangem.datasource.local.token
import androidx.datastore.core.DataStore
import kotlinx.coroutines.flow.firstOrNull
internal class DefaultTokenReceiveWarningActionStore(
private val persistenceStore: DataStore<Set<String>>,
) : TokenReceiveWarningActionStore {
override suspend fun getSync(): Set<String> {
return persistenceStore.data.firstOrNull() ?: emptySet()
}
override suspend fun store(symbol: String) {
persistenceStore.updateData { data -> data.plus(symbol) }
}
}

View file

@ -0,0 +1,8 @@
package com.tangem.datasource.local.token
interface TokenReceiveWarningActionStore {
suspend fun getSync(): Set<String>
suspend fun store(symbol: String)
}