Loading feature/migration/qrcode/build.gradle.kts +2 −0 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ dependencies { implementation(libs.androidx.camera.lifecycle) implementation(libs.androidx.camera.view) implementation(libs.moshi) implementation(libs.okio) implementation(libs.timber) implementation(libs.zxing) testImplementation(projects.core.ui.compose.testing) testImplementation(projects.core.ui.compose.theme2.k9mail) Loading feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/NoOpQrCodeScannerViewModel.kt +4 −1 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode.ui import app.k9mail.core.ui.compose.common.mvi.BaseViewModel import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Effect import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Event import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.State class NoOpQrCodeScannerViewModel( internal class NoOpQrCodeScannerViewModel( initialState: State = State(), ) : BaseViewModel<State, Event, Effect>(initialState), QrCodeScannerContract.ViewModel { override val cameraUseCasesProvider = UseCase.CameraUseCasesProvider { emptyList() } override fun event(event: Event) = Unit } feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewPreview.kt 0 → 100644 +36 −0 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode.ui import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.core.ui.compose.designsystem.atom.Surface @Preview @Composable fun QrCodeScannerViewPreview_initial() { PreviewWithTheme { Surface { QrCodeScannerView( cameraUseCasesProvider = { emptyList() }, scannedCount = 0, totalCount = 0, onDoneClick = {}, ) } } } @Preview @Composable fun QrCodeScannerViewPreview_one_qr_code_scanned() { PreviewWithTheme { Surface { QrCodeScannerView( cameraUseCasesProvider = { emptyList() }, scannedCount = 1, totalCount = 2, onDoneClick = {}, ) } } } feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/QrCodeModule.kt +9 −1 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase import app.k9mail.feature.migration.qrcode.domain.usecase.QrCodePayloadReader import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerViewModel import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module val qrCodeModule = module { viewModel { QrCodeScannerViewModel() } viewModel { QrCodeScannerViewModel( qrCodePayloadReader = get(), ) } factory<UseCase.QrCodePayloadReader> { QrCodePayloadReader() } } feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/domain/QrCodeDomainContract.kt 0 → 100644 +18 −0 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode.domain import app.k9mail.feature.migration.qrcode.domain.entity.AccountData import androidx.camera.core.UseCase as CameraUseCase internal interface QrCodeDomainContract { interface UseCase { fun interface CameraUseCasesProvider { fun getUseCases(): List<CameraUseCase> } fun interface QrCodePayloadReader { fun read(payload: String): AccountData? } } } Loading
feature/migration/qrcode/build.gradle.kts +2 −0 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ dependencies { implementation(libs.androidx.camera.lifecycle) implementation(libs.androidx.camera.view) implementation(libs.moshi) implementation(libs.okio) implementation(libs.timber) implementation(libs.zxing) testImplementation(projects.core.ui.compose.testing) testImplementation(projects.core.ui.compose.theme2.k9mail) Loading
feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/NoOpQrCodeScannerViewModel.kt +4 −1 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode.ui import app.k9mail.core.ui.compose.common.mvi.BaseViewModel import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Effect import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.Event import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerContract.State class NoOpQrCodeScannerViewModel( internal class NoOpQrCodeScannerViewModel( initialState: State = State(), ) : BaseViewModel<State, Event, Effect>(initialState), QrCodeScannerContract.ViewModel { override val cameraUseCasesProvider = UseCase.CameraUseCasesProvider { emptyList() } override fun event(event: Event) = Unit }
feature/migration/qrcode/src/debug/kotlin/app/k9mail/feature/migration/qrcode/ui/QrCodeScannerViewPreview.kt 0 → 100644 +36 −0 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode.ui import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.core.ui.compose.designsystem.atom.Surface @Preview @Composable fun QrCodeScannerViewPreview_initial() { PreviewWithTheme { Surface { QrCodeScannerView( cameraUseCasesProvider = { emptyList() }, scannedCount = 0, totalCount = 0, onDoneClick = {}, ) } } } @Preview @Composable fun QrCodeScannerViewPreview_one_qr_code_scanned() { PreviewWithTheme { Surface { QrCodeScannerView( cameraUseCasesProvider = { emptyList() }, scannedCount = 1, totalCount = 2, onDoneClick = {}, ) } } }
feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/QrCodeModule.kt +9 −1 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode import app.k9mail.feature.migration.qrcode.domain.QrCodeDomainContract.UseCase import app.k9mail.feature.migration.qrcode.domain.usecase.QrCodePayloadReader import app.k9mail.feature.migration.qrcode.ui.QrCodeScannerViewModel import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.dsl.module val qrCodeModule = module { viewModel { QrCodeScannerViewModel() } viewModel { QrCodeScannerViewModel( qrCodePayloadReader = get(), ) } factory<UseCase.QrCodePayloadReader> { QrCodePayloadReader() } }
feature/migration/qrcode/src/main/kotlin/app/k9mail/feature/migration/qrcode/domain/QrCodeDomainContract.kt 0 → 100644 +18 −0 Original line number Diff line number Diff line package app.k9mail.feature.migration.qrcode.domain import app.k9mail.feature.migration.qrcode.domain.entity.AccountData import androidx.camera.core.UseCase as CameraUseCase internal interface QrCodeDomainContract { interface UseCase { fun interface CameraUseCasesProvider { fun getUseCases(): List<CameraUseCase> } fun interface QrCodePayloadReader { fun read(payload: String): AccountData? } } }