diff --git a/features/details/impl/build.gradle.kts b/features/details/impl/build.gradle.kts index 51324ed3de..8ead337482 100644 --- a/features/details/impl/build.gradle.kts +++ b/features/details/impl/build.gradle.kts @@ -20,6 +20,7 @@ dependencies { implementation(projects.features.createWalletSelection.api) implementation(projects.features.onboardingV2.api) implementation(projects.features.addressBook.api) + implementation(projects.features.virtualAccounts.details.api) /* Project - Core */ implementation(projects.core.decompose) diff --git a/features/details/impl/src/main/kotlin/com/tangem/features/details/model/DetailsModel.kt b/features/details/impl/src/main/kotlin/com/tangem/features/details/model/DetailsModel.kt index ce9efd9331..bd6e60655f 100644 --- a/features/details/impl/src/main/kotlin/com/tangem/features/details/model/DetailsModel.kt +++ b/features/details/impl/src/main/kotlin/com/tangem/features/details/model/DetailsModel.kt @@ -37,6 +37,7 @@ import com.tangem.features.details.entity.DetailsUM import com.tangem.features.details.entity.SelectEmailFeedbackTypeBS import com.tangem.features.details.utils.ItemsBuilder import com.tangem.features.details.utils.SocialsBuilder +import com.tangem.features.virtualaccount.VirtualAccountFeatureToggles import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.info.AppInfoProvider import com.tangem.utils.logging.TangemLogger @@ -69,6 +70,7 @@ internal class DetailsModel @Inject constructor( override val dispatchers: CoroutineDispatcherProvider, private val generateBuyTangemCardLinkUseCase: GenerateBuyTangemCardLinkUseCase, private val analyticsEventHandler: AnalyticsEventHandler, + private val virtualAccountFeatureToggles: VirtualAccountFeatureToggles, private val tangemPayEligibilityManager: TangemPayEligibilityManager, private val getVirtualAccountEligibilityUseCase: GetVirtualAccountEligibilityUseCase, ) : Model() { @@ -292,8 +294,9 @@ internal class DetailsModel @Inject constructor( private fun addVirtualAccountItemIfEligible() { modelScope.launch { + val isVirtualAccountEnabled = virtualAccountFeatureToggles.isVirtualAccountsEnabled val eligibility = getVirtualAccountEligibilityUseCase(VirtualAccountEntryPoint.DETAILS) - if (eligibility is VirtualAccountEligibility.Available) { + if (eligibility is VirtualAccountEligibility.Available && isVirtualAccountEnabled) { items.update { items -> itemsBuilder.addVirtualAccountItem( items = items, diff --git a/features/details/impl/src/test/kotlin/com/tangem/features/details/model/DetailsModelTestBase.kt b/features/details/impl/src/test/kotlin/com/tangem/features/details/model/DetailsModelTestBase.kt index d693d28483..0770d2baea 100644 --- a/features/details/impl/src/test/kotlin/com/tangem/features/details/model/DetailsModelTestBase.kt +++ b/features/details/impl/src/test/kotlin/com/tangem/features/details/model/DetailsModelTestBase.kt @@ -23,6 +23,7 @@ import com.tangem.domain.wallets.usecase.GenerateBuyTangemCardLinkUseCase import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase import com.tangem.domain.wallets.usecase.GetWalletsUseCase import com.tangem.features.addressbook.AddressBookFeatureToggles +import com.tangem.features.virtualaccount.VirtualAccountFeatureToggles import com.tangem.features.details.component.DetailsComponent import com.tangem.features.details.entity.DetailsItemUM import com.tangem.features.details.utils.ItemsBuilder @@ -64,6 +65,7 @@ internal abstract class DetailsModelTestBase { protected val analyticsEventHandler: AnalyticsEventHandler = mockk(relaxUnitFun = true) protected val tangemPayEligibilityManager: TangemPayEligibilityManager = mockk() protected val getVirtualAccountEligibilityUseCase: GetVirtualAccountEligibilityUseCase = mockk() + protected val virtualAccountFeatureToggles: VirtualAccountFeatureToggles = mockk() // Captured from itemsBuilder.buildAll(...) so the feature buttons can be driven. protected val wcSlot = slot() @@ -90,6 +92,7 @@ internal abstract class DetailsModelTestBase { every { appInfoProvider.appVersionCode } returns 456 coEvery { tangemPayEligibilityManager.getEligibleWallets(any(), any()) } returns emptyList() coEvery { getVirtualAccountEligibilityUseCase(any()) } returns VirtualAccountEligibility.NotAvailable + every { virtualAccountFeatureToggles.isVirtualAccountsEnabled } returns true every { itemsBuilder.buildAll( @@ -132,6 +135,7 @@ internal abstract class DetailsModelTestBase { analyticsEventHandler = analyticsEventHandler, tangemPayEligibilityManager = tangemPayEligibilityManager, getVirtualAccountEligibilityUseCase = getVirtualAccountEligibilityUseCase, + virtualAccountFeatureToggles = virtualAccountFeatureToggles, ) protected fun stubBuildAllReturns(list: ImmutableList) { diff --git a/features/virtual-accounts/details/impl/src/main/kotlin/com/tangem/features/virtualaccount/main/addfunds/VirtualAccountAddFundsBottomSheet.kt b/features/virtual-accounts/details/impl/src/main/kotlin/com/tangem/features/virtualaccount/main/addfunds/VirtualAccountAddFundsBottomSheet.kt index 4537376d28..73d7146db7 100644 --- a/features/virtual-accounts/details/impl/src/main/kotlin/com/tangem/features/virtualaccount/main/addfunds/VirtualAccountAddFundsBottomSheet.kt +++ b/features/virtual-accounts/details/impl/src/main/kotlin/com/tangem/features/virtualaccount/main/addfunds/VirtualAccountAddFundsBottomSheet.kt @@ -5,8 +5,10 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -110,6 +112,7 @@ private fun DetailsContent(content: VirtualAccountAddFundsUM.Content.Details, mo Column( modifier = modifier .fillMaxWidth() + .verticalScroll(rememberScrollState()) .padding(bottom = TangemTheme.dimens2.x4), ) { content.items.forEachIndexed { index, item ->