Updated on 2026-08-14

This commit is contained in:
Tangem 2024-03-19 18:11:56 +00:00
commit b76e1bbc45
219 changed files with 4585 additions and 5271 deletions

View file

@ -1,6 +0,0 @@
package com.tangem.feature.qrscanning
enum class SourceType {
WALLET_CONNECT,
SEND,
}

View file

@ -10,7 +10,6 @@ android {
namespace = "com.tangem.feature.qrscanning.impl"
}
dependencies {
/** Core */
@ -40,8 +39,13 @@ dependencies {
implementation(deps.hilt.android)
kapt(deps.hilt.kapt)
/** Api */
implementation(projects.features.qrScanning.api)
/** Domain */
implementation(projects.domain.qrScanning)
implementation(projects.domain.qrScanning.models)
/** Compose */
implementation(deps.compose.foundation)
implementation(deps.compose.ui)

View file

@ -1,27 +0,0 @@
package com.tangem.feature.qrscanning.di
import com.tangem.feature.qrscanning.repo.DefaultQrScanningEventsRepository
import com.tangem.feature.qrscanning.repo.QrScanningEventsRepository
import com.tangem.feature.qrscanning.usecase.EmitQrScannedEventUseCase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
internal object QrScanningModule {
@Provides
@Singleton
fun provideQrScannedEventsRepository(): QrScanningEventsRepository {
return DefaultQrScanningEventsRepository()
}
@Provides
@Singleton
fun provideEmitQrScannedEventUseCase(repository: QrScanningEventsRepository): EmitQrScannedEventUseCase {
return EmitQrScannedEventUseCase(repository)
}
}

View file

@ -2,7 +2,7 @@ package com.tangem.feature.qrscanning.presentation.transformers
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.feature.qrscanning.SourceType
import com.tangem.domain.qrscanning.models.SourceType
import com.tangem.feature.qrscanning.impl.R
import com.tangem.feature.qrscanning.presentation.QrScanningState
import com.tangem.feature.qrscanning.viewmodel.QrScanningClickIntents

View file

@ -1,19 +0,0 @@
package com.tangem.feature.qrscanning.repo
import com.tangem.feature.qrscanning.SourceType
import kotlinx.coroutines.flow.*
internal class DefaultQrScanningEventsRepository : QrScanningEventsRepository {
private data class QrScanningEvent(val type: SourceType, val qrCode: String)
private val scannedEvents = MutableSharedFlow<QrScanningEvent>()
override suspend fun emitResult(type: SourceType, qrCode: String) {
scannedEvents.emit(QrScanningEvent(type, qrCode))
}
override fun subscribeToScanningResults(type: SourceType) = scannedEvents
.filter { it.type == type }
.map { it.qrCode }
}

View file

@ -1,11 +0,0 @@
package com.tangem.feature.qrscanning.repo
import com.tangem.feature.qrscanning.SourceType
import kotlinx.coroutines.flow.Flow
interface QrScanningEventsRepository {
suspend fun emitResult(type: SourceType, qrCode: String)
fun subscribeToScanningResults(type: SourceType): Flow<String>
}

View file

@ -1,20 +0,0 @@
package com.tangem.feature.qrscanning.usecase
import arrow.core.Either
import arrow.core.left
import arrow.core.right
import com.tangem.feature.qrscanning.SourceType
import com.tangem.feature.qrscanning.repo.QrScanningEventsRepository
internal class EmitQrScannedEventUseCase(
private val repository: QrScanningEventsRepository,
) {
suspend operator fun invoke(type: SourceType, qrCode: String): Either<Exception, Unit> {
return try {
repository.emitResult(type, qrCode)
Unit.right()
} catch (e: Exception) {
e.left()
}
}
}

View file

@ -1,22 +0,0 @@
package com.tangem.feature.qrscanning.usecase
import arrow.core.Either
import arrow.core.left
import arrow.core.right
import com.tangem.feature.qrscanning.SourceType
import com.tangem.feature.qrscanning.repo.QrScanningEventsRepository
import kotlinx.coroutines.flow.Flow
import java.lang.Exception
class ListenToQrScanningUseCase(
val repository: QrScanningEventsRepository,
) {
operator fun invoke(type: SourceType): Either<Exception, Flow<String>> {
return try {
repository.subscribeToScanningResults(type).right()
} catch (e: Exception) {
e.left()
}
}
}

View file

@ -1,7 +1,7 @@
package com.tangem.feature.qrscanning.viewmodel
import androidx.activity.result.ActivityResultLauncher
import com.tangem.feature.qrscanning.SourceType
import com.tangem.domain.qrscanning.models.SourceType
import com.tangem.feature.qrscanning.navigation.QrScanningInnerRouter
import kotlinx.coroutines.CoroutineScope
import kotlin.properties.Delegates

View file

@ -1,8 +1,8 @@
package com.tangem.feature.qrscanning.viewmodel
import com.tangem.domain.qrscanning.usecases.EmitQrScannedEventUseCase
import com.tangem.feature.qrscanning.presentation.QrScanningStateController
import com.tangem.feature.qrscanning.presentation.transformers.DismissBottomSheetTransformer
import com.tangem.feature.qrscanning.usecase.EmitQrScannedEventUseCase
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.hilt.android.scopes.ViewModelScoped
import kotlinx.coroutines.launch

View file

@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.tangem.feature.qrscanning.QrScanningRouter.Companion.NETWORK_KEY
import com.tangem.feature.qrscanning.QrScanningRouter.Companion.SOURCE_KEY
import com.tangem.feature.qrscanning.SourceType
import com.tangem.domain.qrscanning.models.SourceType
import com.tangem.feature.qrscanning.navigation.QrScanningInnerRouter
import com.tangem.feature.qrscanning.presentation.QrScanningState
import com.tangem.feature.qrscanning.presentation.QrScanningStateController