From 3f34f78f6e58cb17e0c419935daf1963bc3ecaa6 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Mon, 1 Jun 2026 18:28:10 +0200 Subject: [PATCH 1/6] fix(di): bind MoleculeViewModels as ViewModel and complete Metro wiring --- .../addons/di/DataAddonsMetroProviders.kt | 6 ++++ .../feature/chat/inbox/InboxViewModel.kt | 4 ++- .../ChooseInsuranceViewModel.kt | 4 ++- .../payment/trustly/TrustlyViewModel.kt | 4 ++- .../feature-cross-sell-sheet/build.gradle.kts | 1 + .../sell/sheet/CrossSellSheetViewModel.kt | 12 ++++---- .../sheet/di/CrossSellSheetMetroProviders.kt | 2 +- .../deleteaccount/DeleteAccountViewModel.kt | 4 ++- .../help/center/HelpCenterViewModel.kt | 4 ++- .../center/ShowNavigateToInboxViewModel.kt | 4 ++- .../center/puppyguide/PuppyGuideViewModel.kt | 4 ++- .../home/di/GetHomeDataUseCaseProvider.kt | 2 +- .../feature/home/di/HomeMetroProviders.kt | 2 +- .../home/home/data/GetHomeDataUseCase.kt | 6 ++-- .../home/home/data/GetHomeDataUseCaseDemo.kt | 2 +- .../home/data/SeenImportantMessagesStorage.kt | 9 +++++- .../feature/home/home/ui/HomePresenter.kt | 4 +-- .../feature/home/home/ui/HomeViewModel.kt | 8 ++++-- .../InsuranceEvidenceEmailInputViewModel.kt | 4 ++- .../InsuranceEvidenceOverviewViewModel.kt | 4 ++- .../presentation/InsuranceViewModel.kt | 4 ++- .../TerminatedContractsViewModel.kt | 4 ++- .../login/marketing/MarketingViewModel.kt | 4 ++- .../feature/login/navigation/LoginGraph.kt | 2 +- .../swedishlogin/SwedishLoginViewModel.kt | 28 ++++++++++++++----- .../feature/movingflow/MovingFlowGraph.kt | 6 ++-- .../AddHouseInformationViewModel.kt | 28 ++++++++++++++----- .../EnterNewAddressViewModel.kt | 28 ++++++++++++++----- .../selectcontract/SelectContractViewModel.kt | 4 ++- .../ui/start/HousingTypeViewModel.kt | 4 ++- .../movingflow/ui/summary/SummaryViewModel.kt | 28 ++++++++++++++----- .../android/feature/payments/data/Discount.kt | 2 +- .../feature/payments/data/MemberCharge.kt | 4 +-- .../payments/data/PaymentConnection.kt | 2 +- .../feature/payments/data/PaymentOverview.kt | 6 ++-- .../payments/di/PaymentsMetroProviders.kt | 2 +- .../data/GetShouldShowPayoutUseCase.kt | 6 ++-- .../GetShouldShowPayoutUseCaseProvider.kt | 2 +- .../data/GetUpcomingPaymentUseCase.kt | 6 ++-- .../data/GetUpcomingPaymentUseCaseProvider.kt | 2 +- .../ui/discounts/DiscountsViewModel.kt | 4 ++- .../ui/history/PaymentHistoryViewModel.kt | 4 ++- .../ui/manualcharge/ManualChargeViewModel.kt | 4 ++- .../MemberPaymentDetailsViewModel.kt | 4 ++- .../payments/ui/payments/PaymentsViewModel.kt | 4 ++- .../EditBankAccountViewModel.kt | 4 ++- .../PayoutAccountOverviewViewModel.kt | 4 ++- .../SetupInvoicePayoutViewModel.kt | 4 ++- .../setupswish/SetupSwishPayoutViewModel.kt | 4 ++- .../profile/aboutapp/AboutAppViewModel.kt | 4 ++- .../certificates/CertificatesViewModel.kt | 4 ++- .../contactinfo/ContactInfoViewModel.kt | 4 ++- .../profile/data/ContactInfoRepository.kt | 4 +-- .../profile/data/ContactInfoRepositoryDemo.kt | 2 +- .../profile/data/ContactInfoRepositoryImpl.kt | 2 +- .../profile/di/ProfileMetroProviders.kt | 2 +- .../profile/di/ProfileRepositoryProvider.kt | 2 +- .../profile/eurobonus/EurobonusViewModel.kt | 4 ++- .../profile/settings/SettingsViewModel.kt | 4 ++- .../feature/profile/tab/ProfileViewModel.kt | 4 ++- .../SelectInsuranceToRemoveAddonViewModel.kt | 4 ++- .../ChooseContractForCertificateViewModel.kt | 4 ++- .../ui/history/CertificateHistoryViewModel.kt | 4 ++- .../TravelCertificateOverviewViewModel.kt | 4 ++- .../ui/data/ForeverRepositoryDemo.kt | 2 +- .../ui/data/ForeverRepositoryImpl.kt | 2 +- .../ui/data/ForeverRepositoryProvider.kt | 2 +- .../foreverui/ui/di/ForeverMetroProviders.kt | 2 +- .../foreverui/ui/ui/ForeverViewModel.kt | 4 ++- 69 files changed, 252 insertions(+), 110 deletions(-) diff --git a/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/di/DataAddonsMetroProviders.kt b/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/di/DataAddonsMetroProviders.kt index ecbd44a4cb..c47945f8c1 100644 --- a/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/di/DataAddonsMetroProviders.kt +++ b/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/di/DataAddonsMetroProviders.kt @@ -2,6 +2,7 @@ package com.hedvig.android.data.addons.di import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.DemoManager +import com.hedvig.android.core.demomode.Provider import com.hedvig.android.data.addons.data.DemoGetAddonBannerInfoUseCase import com.hedvig.android.data.addons.data.GetAddonBannerInfoUseCase import com.hedvig.android.data.addons.data.GetTravelAddonBannerInfoUseCaseProvider @@ -22,4 +23,9 @@ interface DataAddonsMetroProviders { demoImpl = demoImpl, prodImpl = prodImpl, ) + + @Provides + fun provideGetAddonBannerInfoUseCaseProvider( + provider: GetTravelAddonBannerInfoUseCaseProvider, + ): Provider = provider } diff --git a/app/feature/feature-chat/src/main/kotlin/com/hedvig/android/feature/chat/inbox/InboxViewModel.kt b/app/feature/feature-chat/src/main/kotlin/com/hedvig/android/feature/chat/inbox/InboxViewModel.kt index 33ff3b8dc4..93a2c8c5fe 100644 --- a/app/feature/feature-chat/src/main/kotlin/com/hedvig/android/feature/chat/inbox/InboxViewModel.kt +++ b/app/feature/feature-chat/src/main/kotlin/com/hedvig/android/feature/chat/inbox/InboxViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.chat.data.GetAllConversationsUseCase import com.hedvig.android.feature.chat.model.InboxConversation @@ -15,12 +16,13 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.collectLatest @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class InboxViewModel( getAllConversationsUseCase: GetAllConversationsUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-choose-tier/src/main/kotlin/com/hedvig/android/feature/change/tier/ui/chooseinsurance/ChooseInsuranceViewModel.kt b/app/feature/feature-choose-tier/src/main/kotlin/com/hedvig/android/feature/change/tier/ui/chooseinsurance/ChooseInsuranceViewModel.kt index 243acdb8db..fb5f989824 100644 --- a/app/feature/feature-choose-tier/src/main/kotlin/com/hedvig/android/feature/change/tier/ui/chooseinsurance/ChooseInsuranceViewModel.kt +++ b/app/feature/feature-choose-tier/src/main/kotlin/com/hedvig/android/feature/change/tier/ui/chooseinsurance/ChooseInsuranceViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.data.changetier.data.ChangeTierCreateSource.SELF_SERVICE import com.hedvig.android.data.changetier.data.ChangeTierRepository @@ -23,11 +24,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class ChooseInsuranceViewModel( getCustomizableInsurancesUseCase: GetCustomizableInsurancesUseCase, tierRepository: ChangeTierRepository, diff --git a/app/feature/feature-connect-payment-trustly/src/main/kotlin/com/hedvig/android/feature/connect/payment/trustly/TrustlyViewModel.kt b/app/feature/feature-connect-payment-trustly/src/main/kotlin/com/hedvig/android/feature/connect/payment/trustly/TrustlyViewModel.kt index 57119d0241..82529c9b4b 100644 --- a/app/feature/feature-connect-payment-trustly/src/main/kotlin/com/hedvig/android/feature/connect/payment/trustly/TrustlyViewModel.kt +++ b/app/feature/feature-connect-payment-trustly/src/main/kotlin/com/hedvig/android/feature/connect/payment/trustly/TrustlyViewModel.kt @@ -1,16 +1,18 @@ package com.hedvig.android.feature.connect.payment.trustly +import androidx.lifecycle.ViewModel import com.hedvig.android.apollo.NetworkCacheManager import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.connect.payment.trustly.data.TrustlyCallback import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class TrustlyViewModel( trustlyCallback: TrustlyCallback, startTrustlySessionUseCase: StartTrustlySessionUseCase, diff --git a/app/feature/feature-cross-sell-sheet/build.gradle.kts b/app/feature/feature-cross-sell-sheet/build.gradle.kts index c7cd980ade..0fb668ac1e 100644 --- a/app/feature/feature-cross-sell-sheet/build.gradle.kts +++ b/app/feature/feature-cross-sell-sheet/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { implementation(libs.arrow.fx) implementation(projects.apolloCore) implementation(projects.apolloOctopusPublic) + implementation(projects.coreCommonPublic) implementation(projects.coreDemoMode) implementation(projects.crossSells) implementation(projects.dataAddons) diff --git a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt index 0abc5750da..db64d45c18 100644 --- a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt +++ b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import arrow.core.Either import arrow.core.left import arrow.core.raise.either @@ -31,6 +32,7 @@ import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collectLatest @@ -48,7 +50,7 @@ import octopus.type.UserFlow @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class CrossSellSheetViewModel( getCrossSellSheetDataUseCaseProvider: Provider, crossSellAfterFlowRepository: CrossSellAfterFlowRepository, @@ -129,19 +131,19 @@ internal fun CrossSellInfoType.toCrossSellSource(): CrossSellInput { } } -internal class GetCrossSellSheetDataUseCaseProvider( +class GetCrossSellSheetDataUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetCrossSellSheetDataUseCase, override val prodImpl: GetCrossSellSheetDataUseCase, ) : ProdOrDemoProvider -internal interface GetCrossSellSheetDataUseCase { +interface GetCrossSellSheetDataUseCase { suspend fun invoke(source: CrossSellInput): Flow> } @Inject @SingleIn(AppScope::class) -internal class GetCrossSellSheetDataUseCaseImpl( +class GetCrossSellSheetDataUseCaseImpl( private val apolloClient: ApolloClient, ) : GetCrossSellSheetDataUseCase { override suspend fun invoke(source: CrossSellInput): Flow> { @@ -200,7 +202,7 @@ internal fun CrossSellFragment.toCrossSell(): CrossSell { } @Inject -internal class DemoGetCrossSellSheetDataUseCase() : GetCrossSellSheetDataUseCase { +class DemoGetCrossSellSheetDataUseCase() : GetCrossSellSheetDataUseCase { override suspend fun invoke(source: CrossSellInput): Flow> { return flowOf(ErrorMessage("Ineligible for demo mode").left()) } diff --git a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt index c074ce0105..e1f7bbbfc8 100644 --- a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt +++ b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt @@ -12,7 +12,7 @@ import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn @ContributesTo(AppScope::class) -internal interface CrossSellSheetMetroProviders { +interface CrossSellSheetMetroProviders { @Provides @SingleIn(AppScope::class) fun provideGetCrossSellSheetDataUseCaseProvider( diff --git a/app/feature/feature-delete-account/src/main/kotlin/com/hedvig/android/feature/deleteaccount/DeleteAccountViewModel.kt b/app/feature/feature-delete-account/src/main/kotlin/com/hedvig/android/feature/deleteaccount/DeleteAccountViewModel.kt index a8a821825d..890c40e1a2 100644 --- a/app/feature/feature-delete-account/src/main/kotlin/com/hedvig/android/feature/deleteaccount/DeleteAccountViewModel.kt +++ b/app/feature/feature-delete-account/src/main/kotlin/com/hedvig/android/feature/deleteaccount/DeleteAccountViewModel.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.chat +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.deleteaccount.DeleteAccountEvent import com.hedvig.android.feature.deleteaccount.DeleteAccountPresenter @@ -9,11 +10,12 @@ import com.hedvig.android.feature.deleteaccount.data.RequestAccountDeletionUseCa import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class DeleteAccountViewModel( private val requestAccountDeletionUseCase: RequestAccountDeletionUseCase, private val deleteAccountStateUseCase: DeleteAccountStateUseCase, diff --git a/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt b/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt index 4f931d8a68..ba95c7b237 100644 --- a/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt +++ b/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.help.center +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.data.conversations.HasAnyActiveConversationUseCase import com.hedvig.android.feature.help.center.data.GetHelpCenterFAQUseCase @@ -8,11 +9,12 @@ import com.hedvig.android.feature.help.center.data.GetQuickLinksUseCase import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class HelpCenterViewModel( getQuickLinksUseCase: GetQuickLinksUseCase, hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, diff --git a/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/ShowNavigateToInboxViewModel.kt b/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/ShowNavigateToInboxViewModel.kt index 1de912742f..4216552104 100644 --- a/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/ShowNavigateToInboxViewModel.kt +++ b/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/ShowNavigateToInboxViewModel.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember +import androidx.lifecycle.ViewModel import arrow.core.merge import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.data.conversations.HasAnyActiveConversationUseCase @@ -12,12 +13,13 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.map @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class ShowNavigateToInboxViewModel( hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt b/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt index deb8aed556..a5b0e76192 100644 --- a/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt +++ b/app/feature/feature-help-center/src/commonMain/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.PuppyGuideStory @@ -15,12 +16,13 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.SharingStarted @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class PuppyGuideViewModel( getPuppyGuideUseCase: GetPuppyGuideUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt index 0ea1083a16..7411c1374f 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt @@ -4,7 +4,7 @@ import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider import com.hedvig.android.feature.home.home.data.GetHomeDataUseCase -internal class GetHomeDataUseCaseProvider( +class GetHomeDataUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetHomeDataUseCase, override val prodImpl: GetHomeDataUseCase, diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt index ea1083fd7e..1c699e02a1 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt @@ -11,7 +11,7 @@ import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn @ContributesTo(AppScope::class) -internal interface HomeMetroProviders { +interface HomeMetroProviders { @Provides @SingleIn(AppScope::class) fun provideGetHomeDataUseCaseProvider( diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt index 54db3676ed..f2aea94b01 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt @@ -50,13 +50,13 @@ import octopus.HomeQuery import octopus.UnreadMessageCountQuery import octopus.fragment.HomeCrossSellFragment -internal interface GetHomeDataUseCase { +interface GetHomeDataUseCase { fun invoke(forceNetworkFetch: Boolean): Flow> } @Inject @SingleIn(AppScope::class) -internal class GetHomeDataUseCaseImpl( +class GetHomeDataUseCaseImpl( private val apolloClient: ApolloClient, private val hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, private val getMemberRemindersUseCase: GetMemberRemindersUseCase, @@ -286,7 +286,7 @@ private fun HomeQuery.Data.claimStatusCards(): HomeData.ClaimStatusCardsData? { ) } -internal data class HomeData( +data class HomeData( val contractStatus: ContractStatus, val claimStatusCardsData: ClaimStatusCardsData?, val veryImportantMessages: List, diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt index ae886d8fcc..23d8bd1335 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt @@ -16,7 +16,7 @@ import kotlinx.coroutines.flow.flowOf @Inject @SingleIn(AppScope::class) -internal class GetHomeDataUseCaseDemo : GetHomeDataUseCase { +class GetHomeDataUseCaseDemo : GetHomeDataUseCase { override fun invoke(forceNetworkFetch: Boolean): Flow> = flowOf( HomeData( contractStatus = HomeData.ContractStatus.Active, diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt index 4c8a586c90..2f40c55854 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt @@ -1,5 +1,9 @@ package com.hedvig.android.feature.home.home.data +import com.hedvig.android.core.common.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -11,7 +15,10 @@ interface SeenImportantMessagesStorage { fun markMessageAsSeen(id: String) } -internal class SeenImportantMessagesStorageImpl : SeenImportantMessagesStorage { +@Inject +@SingleIn(AppScope::class) +@ContributesBinding(AppScope::class) +class SeenImportantMessagesStorageImpl : SeenImportantMessagesStorage { private val storedSeenMessages: MutableStateFlow> = MutableStateFlow(listOf()) override val seenMessages: StateFlow> diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomePresenter.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomePresenter.kt index 153d9fc1f7..6acf6a3ab6 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomePresenter.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomePresenter.kt @@ -11,6 +11,7 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.Snapshot import arrow.core.Either import com.hedvig.android.apollo.ApolloOperationError +import com.hedvig.android.core.common.ApplicationScope import com.hedvig.android.core.demomode.Provider import com.hedvig.android.crosssells.CrossSellSheetData import com.hedvig.android.data.addons.data.AddonBannerInfo @@ -23,7 +24,6 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.notification.badge.data.crosssell.home.CrossSellHomeNotificationService import com.hedvig.android.ui.emergency.FirstVetSection import kotlin.time.Clock -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch @@ -35,7 +35,7 @@ internal class HomePresenter( private val getHomeDataUseCaseProvider: Provider, private val seenImportantMessagesStorage: SeenImportantMessagesStorage, private val crossSellHomeNotificationServiceProvider: Provider, - private val applicationScope: CoroutineScope, + private val applicationScope: ApplicationScope, private val isProduction: Boolean, ) : MoleculePresenter { @Composable diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomeViewModel.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomeViewModel.kt index 502fcee457..3fcab38028 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomeViewModel.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/ui/HomeViewModel.kt @@ -1,6 +1,8 @@ package com.hedvig.android.feature.home.home.ui +import androidx.lifecycle.ViewModel import com.hedvig.android.core.buildconstants.HedvigBuildConstants +import com.hedvig.android.core.common.ApplicationScope import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.Provider import com.hedvig.android.feature.home.home.data.GetHomeDataUseCase @@ -9,17 +11,17 @@ import com.hedvig.android.molecule.public.MoleculeViewModel import com.hedvig.android.notification.badge.data.crosssell.home.CrossSellHomeNotificationService import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey -import kotlinx.coroutines.CoroutineScope @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class HomeViewModel( getHomeDataUseCaseProvider: Provider, seenImportantMessagesStorage: SeenImportantMessagesStorage, crossSellHomeNotificationServiceProvider: Provider, - applicationScope: CoroutineScope, + applicationScope: ApplicationScope, hedvigBuildConstants: HedvigBuildConstants, ) : MoleculeViewModel( HomeUiState.Loading, diff --git a/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/email/InsuranceEvidenceEmailInputViewModel.kt b/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/email/InsuranceEvidenceEmailInputViewModel.kt index de16cc1dd2..8c493321f5 100644 --- a/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/email/InsuranceEvidenceEmailInputViewModel.kt +++ b/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/email/InsuranceEvidenceEmailInputViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.insurance.certificate.data.GenerateInsuranceEvidenceUseCase import com.hedvig.android.feature.insurance.certificate.data.GetInsuranceEvidenceInitialEmailUseCase @@ -17,6 +18,7 @@ import com.hedvig.android.molecule.public.MoleculeViewModel import com.hedvig.core.common.android.validation.validateEmail import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import hedvig.resources.PROFILE_MY_INFO_INVALID_EMAIL import hedvig.resources.Res @@ -26,7 +28,7 @@ import org.jetbrains.compose.resources.StringResource @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class InsuranceEvidenceEmailInputViewModel( generateInsuranceEvidenceUseCase: GenerateInsuranceEvidenceUseCase, getEmailUseCase: GetInsuranceEvidenceInitialEmailUseCase, diff --git a/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/overview/InsuranceEvidenceOverviewViewModel.kt b/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/overview/InsuranceEvidenceOverviewViewModel.kt index 7a4319fe01..7b8a908f77 100644 --- a/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/overview/InsuranceEvidenceOverviewViewModel.kt +++ b/app/feature/feature-insurance-certificate/src/main/kotlin/com/hedvig/android/feature/insurance/certificate/ui/overview/InsuranceEvidenceOverviewViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.fileupload.DownloadPdfUseCase import com.hedvig.android.core.fileupload.DownloadedFile @@ -18,11 +19,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class InsuranceEvidenceOverviewViewModel( downloadPdfUseCase: DownloadPdfUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurance/presentation/InsuranceViewModel.kt b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurance/presentation/InsuranceViewModel.kt index c1daef2f4c..d5a57c052d 100644 --- a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurance/presentation/InsuranceViewModel.kt +++ b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurance/presentation/InsuranceViewModel.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.insurances.insurance.presentation +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.Provider import com.hedvig.android.data.addons.data.GetAddonBannerInfoUseCase @@ -8,11 +9,12 @@ import com.hedvig.android.feature.insurances.data.GetInsuranceContractsUseCase import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class InsuranceViewModel( getInsuranceContractsUseCaseProvider: Provider, getCrossSellsUseCaseProvider: Provider, diff --git a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/terminatedcontracts/TerminatedContractsViewModel.kt b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/terminatedcontracts/TerminatedContractsViewModel.kt index 5ef2fb689a..1c901e8e31 100644 --- a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/terminatedcontracts/TerminatedContractsViewModel.kt +++ b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/terminatedcontracts/TerminatedContractsViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import arrow.core.Either import arrow.core.raise.either import com.hedvig.android.core.common.ErrorMessage @@ -22,13 +23,14 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.onEach @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class TerminatedContractsViewModel( getInsuranceContractsUseCaseProvider: Provider, ) : MoleculeViewModel( diff --git a/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/marketing/MarketingViewModel.kt b/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/marketing/MarketingViewModel.kt index dcce7c47da..8c4b0c2d44 100644 --- a/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/marketing/MarketingViewModel.kt +++ b/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/marketing/MarketingViewModel.kt @@ -1,15 +1,17 @@ package com.hedvig.android.feature.login.marketing +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.language.LanguageService import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class MarketingViewModel( languageService: LanguageService, ) : MoleculeViewModel( diff --git a/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/navigation/LoginGraph.kt b/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/navigation/LoginGraph.kt index 45366f8119..7e147b4d43 100644 --- a/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/navigation/LoginGraph.kt +++ b/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/navigation/LoginGraph.kt @@ -49,7 +49,7 @@ fun NavGraphBuilder.loginGraph( ) } navdestination { - val swedishLoginViewModel: SwedishLoginViewModel = metroViewModel() + val swedishLoginViewModel: SwedishLoginViewModel = assistedMetroViewModel() SwedishLoginDestination( swedishLoginViewModel = swedishLoginViewModel, navigateUp = navController::navigateUp, diff --git a/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/swedishlogin/SwedishLoginViewModel.kt b/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/swedishlogin/SwedishLoginViewModel.kt index 5eb0f160f0..335f35d8e4 100644 --- a/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/swedishlogin/SwedishLoginViewModel.kt +++ b/app/feature/feature-login/src/main/kotlin/com/hedvig/android/feature/login/swedishlogin/SwedishLoginViewModel.kt @@ -1,26 +1,40 @@ package com.hedvig.android.feature.login.swedishlogin import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.createSavedStateHandle +import androidx.lifecycle.viewmodel.CreationExtras import com.hedvig.android.auth.AuthTokenService import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.molecule.public.MoleculeViewModel import com.hedvig.authlib.AuthRepository +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject import dev.zacsweers.metro.ContributesIntoMap -import dev.zacsweers.metro.Inject -import dev.zacsweers.metrox.viewmodel.ViewModelKey +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactory +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactoryKey import kotlinx.coroutines.flow.SharingStarted -@Inject -@ViewModelKey -@ContributesIntoMap(AppScope::class) +@AssistedInject internal class SwedishLoginViewModel( authTokenService: AuthTokenService, authRepository: AuthRepository, demoManager: DemoManager, - savedStateHandle: SavedStateHandle, + @Assisted savedStateHandle: SavedStateHandle, ) : MoleculeViewModel( SwedishLoginUiState(BankIdUiState.Loading, false), SwedishLoginPresenter(authTokenService, authRepository, demoManager, savedStateHandle), SharingStarted.WhileSubscribed(), - ) + ) { + @AssistedFactory + @ViewModelAssistedFactoryKey(SwedishLoginViewModel::class) + @ContributesIntoMap(AppScope::class) + fun interface Factory : ViewModelAssistedFactory { + override fun create(extras: CreationExtras): SwedishLoginViewModel = create(extras.createSavedStateHandle()) + + fun create( + @Assisted savedStateHandle: SavedStateHandle, + ): SwedishLoginViewModel + } +} diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/MovingFlowGraph.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/MovingFlowGraph.kt index a634216fd2..256e0257f6 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/MovingFlowGraph.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/MovingFlowGraph.kt @@ -126,7 +126,7 @@ fun NavGraphBuilder.movingFlowGraph( navdestination { val moveIntentId = it.toRoute().moveIntentId EnterNewAddressDestination( - viewModel = metroViewModel(), + viewModel = assistedMetroViewModel(), navigateUp = navController::navigateUp, popBackStack = navController::popBackStack, exitFlow = { @@ -143,7 +143,7 @@ fun NavGraphBuilder.movingFlowGraph( } navdestination { AddHouseInformationDestination( - viewModel = metroViewModel(), + viewModel = assistedMetroViewModel(), navigateUp = navController::navigateUp, popBackStack = navController::popBackStack, exitFlow = { @@ -195,7 +195,7 @@ fun NavGraphBuilder.movingFlowGraph( navdestination { backStackEntry -> SummaryDestination( - viewModel = metroViewModel(), + viewModel = assistedMetroViewModel(), navigateUp = navController::navigateUp, navigateBack = navController::popBackStack, exitFlow = { diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt index 38f262ff93..28be3ed3dc 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt @@ -9,6 +9,8 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.createSavedStateHandle +import androidx.lifecycle.viewmodel.CreationExtras import androidx.navigation.toRoute import arrow.core.None import arrow.core.Option @@ -42,9 +44,12 @@ import com.hedvig.android.featureflags.flags.Feature import com.hedvig.android.molecule.public.MoleculePresenter import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject import dev.zacsweers.metro.ContributesIntoMap -import dev.zacsweers.metro.Inject -import dev.zacsweers.metrox.viewmodel.ViewModelKey +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactory +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactoryKey import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import octopus.feature.movingflow.MoveIntentV2RequestMutation @@ -53,11 +58,9 @@ import octopus.type.MoveIntentRequestInput import octopus.type.MoveToAddressInput import octopus.type.MoveToHouseInput -@Inject -@ViewModelKey -@ContributesIntoMap(AppScope::class) +@AssistedInject internal class AddHouseInformationViewModel( - savedStateHandle: SavedStateHandle, + @Assisted savedStateHandle: SavedStateHandle, movingFlowRepository: MovingFlowRepository, apolloClient: ApolloClient, featureManager: FeatureManager, @@ -69,7 +72,18 @@ internal class AddHouseInformationViewModel( apolloClient, featureManager, ), - ) + ) { + @AssistedFactory + @ViewModelAssistedFactoryKey(AddHouseInformationViewModel::class) + @ContributesIntoMap(AppScope::class) + fun interface Factory : ViewModelAssistedFactory { + override fun create(extras: CreationExtras): AddHouseInformationViewModel = create(extras.createSavedStateHandle()) + + fun create( + @Assisted savedStateHandle: SavedStateHandle, + ): AddHouseInformationViewModel + } +} internal class AddHouseInformationPresenter( private val moveIntentId: String, diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/enternewaddress/EnterNewAddressViewModel.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/enternewaddress/EnterNewAddressViewModel.kt index 4a7508febc..38023cf50f 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/enternewaddress/EnterNewAddressViewModel.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/enternewaddress/EnterNewAddressViewModel.kt @@ -10,6 +10,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.core.text.isDigitsOnly import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.createSavedStateHandle +import androidx.lifecycle.viewmodel.CreationExtras import androidx.navigation.toRoute import arrow.core.None import arrow.core.Option @@ -58,9 +60,12 @@ import com.hedvig.android.featureflags.flags.Feature import com.hedvig.android.molecule.public.MoleculePresenter import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject import dev.zacsweers.metro.ContributesIntoMap -import dev.zacsweers.metro.Inject -import dev.zacsweers.metrox.viewmodel.ViewModelKey +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactory +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactoryKey import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch @@ -72,11 +77,9 @@ import octopus.type.MoveIntentRequestInput import octopus.type.MoveToAddressInput import octopus.type.MoveToApartmentInput -@Inject -@ViewModelKey -@ContributesIntoMap(AppScope::class) +@AssistedInject internal class EnterNewAddressViewModel( - savedStateHandle: SavedStateHandle, + @Assisted savedStateHandle: SavedStateHandle, movingFlowRepository: MovingFlowRepository, apolloClient: ApolloClient, featureManager: FeatureManager, @@ -88,7 +91,18 @@ internal class EnterNewAddressViewModel( apolloClient, featureManager, ), - ) + ) { + @AssistedFactory + @ViewModelAssistedFactoryKey(EnterNewAddressViewModel::class) + @ContributesIntoMap(AppScope::class) + fun interface Factory : ViewModelAssistedFactory { + override fun create(extras: CreationExtras): EnterNewAddressViewModel = create(extras.createSavedStateHandle()) + + fun create( + @Assisted savedStateHandle: SavedStateHandle, + ): EnterNewAddressViewModel + } +} private class EnterNewAddressPresenter( private val moveIntentId: String, diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/selectcontract/SelectContractViewModel.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/selectcontract/SelectContractViewModel.kt index e79967cccd..c1258da796 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/selectcontract/SelectContractViewModel.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/selectcontract/SelectContractViewModel.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.Snapshot +import androidx.lifecycle.ViewModel import arrow.core.raise.either import arrow.core.raise.ensureNotNull import com.apollographql.apollo.ApolloClient @@ -24,13 +25,14 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import octopus.feature.movingflow.MoveIntentV2CreateMutation import octopus.feature.movingflow.fragment.MoveIntentFragment @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class SelectContractViewModel( apolloClient: ApolloClient, movingFlowRepository: MovingFlowRepository, diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/start/HousingTypeViewModel.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/start/HousingTypeViewModel.kt index 9bdf41e4b5..a7a8edb151 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/start/HousingTypeViewModel.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/start/HousingTypeViewModel.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.Snapshot +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.ErrorMessage import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.movingflow.data.HousingType @@ -21,12 +22,13 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.collectLatest @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class HousingTypeViewModel( movingFlowRepository: MovingFlowRepository, ) : MoleculeViewModel( diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt index 97999185c0..494ba51043 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt @@ -8,6 +8,8 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.Snapshot import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.createSavedStateHandle +import androidx.lifecycle.viewmodel.CreationExtras import androidx.navigation.toRoute import arrow.core.NonEmptyList import arrow.core.toNonEmptyListOrNull @@ -37,17 +39,18 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import com.hedvig.ui.tiersandaddons.CostBreakdownEntry import com.hedvig.ui.tiersandaddons.DisplayDocument +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject import dev.zacsweers.metro.ContributesIntoMap -import dev.zacsweers.metro.Inject -import dev.zacsweers.metrox.viewmodel.ViewModelKey +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactory +import dev.zacsweers.metrox.viewmodel.ViewModelAssistedFactoryKey import kotlinx.datetime.LocalDate import octopus.feature.movingflow.MoveIntentV2CommitMutation -@Inject -@ViewModelKey -@ContributesIntoMap(AppScope::class) +@AssistedInject internal class SummaryViewModel( - savedStateHandle: SavedStateHandle, + @Assisted savedStateHandle: SavedStateHandle, movingFlowRepository: MovingFlowRepository, apolloClient: ApolloClient, crossSellAfterFlowRepository: CrossSellAfterFlowRepository, @@ -61,7 +64,18 @@ internal class SummaryViewModel( crossSellAfterFlowRepository = crossSellAfterFlowRepository, getMoveIntentCostUseCase = getMoveIntentCostUseCase, ), - ) + ) { + @AssistedFactory + @ViewModelAssistedFactoryKey(SummaryViewModel::class) + @ContributesIntoMap(AppScope::class) + fun interface Factory : ViewModelAssistedFactory { + override fun create(extras: CreationExtras): SummaryViewModel = create(extras.createSavedStateHandle()) + + fun create( + @Assisted savedStateHandle: SavedStateHandle, + ): SummaryViewModel + } +} internal class SummaryPresenter( private val summaryRoute: Summary, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/Discount.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/Discount.kt index 09ff6bc838..a893fb467f 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/Discount.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/Discount.kt @@ -18,7 +18,7 @@ internal data class DiscountsDetails( ) @Serializable -internal data class Discount( +data class Discount( val code: String, val description: String?, val status: DiscountStatus, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/MemberCharge.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/MemberCharge.kt index 627df2ddd2..8227f6abfb 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/MemberCharge.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/MemberCharge.kt @@ -14,7 +14,7 @@ import octopus.fragment.MemberChargeFragment import octopus.type.MemberChargeStatus @Serializable -internal data class MemberCharge( +data class MemberCharge( val grossAmount: UiMoney, val netAmount: UiMoney, val id: String?, @@ -47,7 +47,7 @@ internal data class MemberCharge( val sum: UiMoney, ) - internal enum class MemberChargeStatus { + enum class MemberChargeStatus { UPCOMING, SUCCESS, PENDING, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentConnection.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentConnection.kt index 432a625f58..0f9324240b 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentConnection.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentConnection.kt @@ -2,7 +2,7 @@ package com.hedvig.android.feature.payments.data import kotlinx.datetime.LocalDate -internal sealed interface PaymentConnection { +sealed interface PaymentConnection { data object Active : PaymentConnection data object Pending : PaymentConnection diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentOverview.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentOverview.kt index 3f33016d69..06376e27c3 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentOverview.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/data/PaymentOverview.kt @@ -3,7 +3,7 @@ package com.hedvig.android.feature.payments.data import com.hedvig.android.core.uidata.UiMoney import kotlinx.datetime.LocalDate -internal data class PaymentOverview( +data class PaymentOverview( val memberChargeShortInfo: MemberChargeShortInfo?, val ongoingCharges: List, val paymentConnection: PaymentConnection, @@ -16,11 +16,11 @@ internal data class PaymentOverview( ) } -internal data class ManualChargeToPrompt( +data class ManualChargeToPrompt( val sum: UiMoney, ) -internal data class MemberChargeShortInfo( +data class MemberChargeShortInfo( val netAmount: UiMoney, val dueDate: LocalDate, val id: String?, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt index 7772e32f2d..d79ae820cc 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt @@ -16,7 +16,7 @@ import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn @ContributesTo(AppScope::class) -internal interface PaymentsMetroProviders { +interface PaymentsMetroProviders { @Provides @SingleIn(AppScope::class) fun provideGetUpcomingPaymentUseCaseProvider( diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt index 2fd215ae59..b3ff3206fd 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt @@ -14,7 +14,7 @@ import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import octopus.ShouldShowPayoutButtonQuery -internal interface GetShouldShowPayoutUseCase { +interface GetShouldShowPayoutUseCase { suspend fun invoke(): Either } @@ -24,7 +24,7 @@ internal interface GetShouldShowPayoutUseCase { */ @Inject @SingleIn(AppScope::class) -internal class GetShouldShowPayoutUseCaseImpl( +class GetShouldShowPayoutUseCaseImpl( private val apolloClient: ApolloClient, ) : GetShouldShowPayoutUseCase { override suspend fun invoke(): Either = either { @@ -43,6 +43,6 @@ internal class GetShouldShowPayoutUseCaseImpl( @Inject @SingleIn(AppScope::class) -internal class GetShouldShowPayoutUseCaseDemo : GetShouldShowPayoutUseCase { +class GetShouldShowPayoutUseCaseDemo : GetShouldShowPayoutUseCase { override suspend fun invoke(): Either = false.right() } diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt index 1577822747..c05eb2a4e2 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt @@ -3,7 +3,7 @@ package com.hedvig.android.feature.payments.overview.data import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider -internal class GetShouldShowPayoutUseCaseProvider( +class GetShouldShowPayoutUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetShouldShowPayoutUseCase, override val prodImpl: GetShouldShowPayoutUseCase, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt index c717a20dac..98f7ce9fa9 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt @@ -30,13 +30,13 @@ import octopus.fragment.MemberChargeFragment import octopus.type.MemberChargeStatus import octopus.type.MemberPaymentMethodStatus -internal interface GetUpcomingPaymentUseCase { +interface GetUpcomingPaymentUseCase { suspend fun invoke(): Either } @Inject @SingleIn(AppScope::class) -internal data class GetUpcomingPaymentUseCaseImpl( +data class GetUpcomingPaymentUseCaseImpl( val apolloClient: ApolloClient, val clock: Clock, ) : GetUpcomingPaymentUseCase { @@ -113,7 +113,7 @@ private fun MemberChargeFragment.toMemberChargeShortInfo() = MemberChargeShortIn @Inject @SingleIn(AppScope::class) -internal class GetUpcomingPaymentUseCaseDemo( +class GetUpcomingPaymentUseCaseDemo( private val clock: Clock, ) : GetUpcomingPaymentUseCase { override suspend fun invoke(): Either { diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt index 03e0e89486..c38ff13b86 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt @@ -3,7 +3,7 @@ package com.hedvig.android.feature.payments.overview.data import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider -internal class GetUpcomingPaymentUseCaseProvider( +class GetUpcomingPaymentUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetUpcomingPaymentUseCase, override val prodImpl: GetUpcomingPaymentUseCase, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/discounts/DiscountsViewModel.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/discounts/DiscountsViewModel.kt index e1104e263c..b684f3956f 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/discounts/DiscountsViewModel.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/discounts/DiscountsViewModel.kt @@ -1,15 +1,17 @@ package com.hedvig.android.feature.payments.ui.discounts +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payments.data.GetDiscountsOverviewUseCase import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class DiscountsViewModel( getDiscountsOverviewUseCase: GetDiscountsOverviewUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/history/PaymentHistoryViewModel.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/history/PaymentHistoryViewModel.kt index 2a7f0a6ba6..d98174cb4f 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/history/PaymentHistoryViewModel.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/history/PaymentHistoryViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payments.data.GetPaymentsHistoryUseCase import com.hedvig.android.feature.payments.data.PaymentHistoryItem @@ -15,11 +16,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class PaymentHistoryViewModel( getPaymentsHistoryUseCase: GetPaymentsHistoryUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/manualcharge/ManualChargeViewModel.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/manualcharge/ManualChargeViewModel.kt index 09ace11343..9d409c9647 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/manualcharge/ManualChargeViewModel.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/manualcharge/ManualChargeViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.ErrorMessage import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payments.data.GetManualChargeInfoUseCase @@ -17,11 +18,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class ManualChargeViewModel( getManualChargeInfoUseCase: GetManualChargeInfoUseCase, triggerManualCharge: TriggerManualChargeUseCase, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/memberpaymentdetails/MemberPaymentDetailsViewModel.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/memberpaymentdetails/MemberPaymentDetailsViewModel.kt index 7ec6f76b1a..9f3feb03df 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/memberpaymentdetails/MemberPaymentDetailsViewModel.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/memberpaymentdetails/MemberPaymentDetailsViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payments.data.GetMemberPaymentsDetailsUseCase import com.hedvig.android.feature.payments.data.MemberPaymentsDetails @@ -15,11 +16,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class MemberPaymentDetailsViewModel( getMemberPaymentsDetailsUseCase: GetMemberPaymentsDetailsUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/payments/PaymentsViewModel.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/payments/PaymentsViewModel.kt index d2e861af9f..7b77698002 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/payments/PaymentsViewModel.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/ui/payments/PaymentsViewModel.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.payments.ui.payments +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.Provider import com.hedvig.android.feature.payments.overview.data.GetShouldShowPayoutUseCase @@ -7,11 +8,12 @@ import com.hedvig.android.feature.payments.overview.data.GetUpcomingPaymentUseCa import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class PaymentsViewModel( getUpcomingPaymentUseCase: Provider, getShouldShowPayoutUseCase: Provider, diff --git a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/editbankaccount/EditBankAccountViewModel.kt b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/editbankaccount/EditBankAccountViewModel.kt index b123c8ddb6..072055d3b5 100644 --- a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/editbankaccount/EditBankAccountViewModel.kt +++ b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/editbankaccount/EditBankAccountViewModel.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payoutaccount.data.SetupNordeaPayoutUseCase import com.hedvig.android.feature.payoutaccount.data.bankNameForClearingNumber @@ -22,11 +23,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class EditBankAccountViewModel( setupNordeaPayoutUseCase: SetupNordeaPayoutUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/overview/PayoutAccountOverviewViewModel.kt b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/overview/PayoutAccountOverviewViewModel.kt index ffe2143681..37097c7aab 100644 --- a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/overview/PayoutAccountOverviewViewModel.kt +++ b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/overview/PayoutAccountOverviewViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payoutaccount.data.GetPayoutAccountUseCase import com.hedvig.android.feature.payoutaccount.data.PayoutAccount @@ -15,12 +16,13 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import octopus.type.MemberPaymentProvider @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class PayoutAccountOverviewViewModel( getPayoutAccountUseCase: GetPayoutAccountUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupinvoice/SetupInvoicePayoutViewModel.kt b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupinvoice/SetupInvoicePayoutViewModel.kt index 319c9a2f72..93d5dd624b 100644 --- a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupinvoice/SetupInvoicePayoutViewModel.kt +++ b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupinvoice/SetupInvoicePayoutViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payoutaccount.data.SetupInvoicePayoutUseCase import com.hedvig.android.molecule.public.MoleculePresenter @@ -14,11 +15,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class SetupInvoicePayoutViewModel( setupInvoicePayoutUseCase: SetupInvoicePayoutUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupswish/SetupSwishPayoutViewModel.kt b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupswish/SetupSwishPayoutViewModel.kt index ae26bb9b23..1c53259afb 100644 --- a/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupswish/SetupSwishPayoutViewModel.kt +++ b/app/feature/feature-payout-account/src/main/kotlin/com/hedvig/android/feature/payoutaccount/ui/setupswish/SetupSwishPayoutViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.ErrorMessage import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.payoutaccount.data.SetupSwishPayoutUseCase @@ -15,11 +16,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class SetupSwishPayoutViewModel( setupSwishPayoutUseCase: SetupSwishPayoutUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/aboutapp/AboutAppViewModel.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/aboutapp/AboutAppViewModel.kt index 4f0b8bbedf..4598b4c9b5 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/aboutapp/AboutAppViewModel.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/aboutapp/AboutAppViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.apollographql.apollo.ApolloClient import com.hedvig.android.apollo.ErrorMessage import com.hedvig.android.apollo.safeFlow @@ -17,6 +18,7 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine @@ -25,7 +27,7 @@ import octopus.MemberIdQuery @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class AboutAppViewModel( apolloClient: ApolloClient, deviceIdDataStore: DeviceIdDataStore, diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/certificates/CertificatesViewModel.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/certificates/CertificatesViewModel.kt index c0423605a6..1007511e73 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/certificates/CertificatesViewModel.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/certificates/CertificatesViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.profile.data.CheckInsuranceEvidenceAvailabilityUseCase import com.hedvig.android.feature.profile.data.CheckTravelCertificateDestinationAvailabilityUseCase @@ -16,6 +17,7 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine @@ -23,7 +25,7 @@ import kotlinx.coroutines.flow.flow @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class CertificatesViewModel( checkTravelCertificateDestinationAvailabilityUseCase: CheckTravelCertificateDestinationAvailabilityUseCase, checkInsuranceEvidenceAvailabilityUseCase: CheckInsuranceEvidenceAvailabilityUseCase, diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/contactinfo/ContactInfoViewModel.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/contactinfo/ContactInfoViewModel.kt index e76bc9014b..747286528d 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/contactinfo/ContactInfoViewModel.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/contactinfo/ContactInfoViewModel.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.Snapshot import androidx.compose.ui.text.TextRange +import androidx.lifecycle.ViewModel import arrow.core.Either import arrow.core.getOrElse import com.hedvig.android.core.common.ErrorMessage @@ -35,6 +36,7 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds @@ -106,7 +108,7 @@ internal sealed interface ContactInfoUiState { @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class ContactInfoViewModel( repository: Provider, ) : MoleculeViewModel( diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepository.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepository.kt index b2e9d4b2d3..dd2556c6c4 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepository.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepository.kt @@ -8,13 +8,13 @@ import com.hedvig.android.feature.profile.data.ContactInformation.Email import com.hedvig.android.feature.profile.data.ContactInformation.PhoneNumber import com.hedvig.core.common.android.validation.isValidEmail -internal interface ContactInfoRepository { +interface ContactInfoRepository { suspend fun contactInfo(): Either suspend fun updateInfo(phoneNumber: PhoneNumber, email: Email): Either } -internal data class ContactInformation( +data class ContactInformation( val phoneNumber: PhoneNumber?, val email: Email?, ) { diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt index 204d7072b5..e0a26fc8fc 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt @@ -11,7 +11,7 @@ import dev.zacsweers.metro.SingleIn @Inject @SingleIn(AppScope::class) -internal class ContactInfoRepositoryDemo : ContactInfoRepository { +class ContactInfoRepositoryDemo : ContactInfoRepository { private var contactInformation = ContactInformation( PhoneNumber("072102103"), Email("google@gmail.com"), diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt index ae3df1588c..b41a563029 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt @@ -21,7 +21,7 @@ import octopus.MemberUpdateContactInfoMutation @Inject @SingleIn(AppScope::class) -internal class ContactInfoRepositoryImpl( +class ContactInfoRepositoryImpl( private val apolloClient: ApolloClient, private val networkCacheManager: NetworkCacheManager, ) : ContactInfoRepository { diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt index 743ffec754..f4a8a29d3d 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt @@ -11,7 +11,7 @@ import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn @ContributesTo(AppScope::class) -internal interface ProfileMetroProviders { +interface ProfileMetroProviders { @Provides @SingleIn(AppScope::class) fun provideProfileRepositoryProvider( diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt index f429bf2097..ceb6b2330d 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt @@ -4,7 +4,7 @@ import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider import com.hedvig.android.feature.profile.data.ContactInfoRepository -internal class ProfileRepositoryProvider( +class ProfileRepositoryProvider( override val demoManager: DemoManager, override val demoImpl: ContactInfoRepository, override val prodImpl: ContactInfoRepository, diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/eurobonus/EurobonusViewModel.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/eurobonus/EurobonusViewModel.kt index 7c541a49c5..4f05ebdec4 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/eurobonus/EurobonusViewModel.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/eurobonus/EurobonusViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.profile.data.GetEurobonusDataUseCase import com.hedvig.android.feature.profile.data.UpdateEurobonusNumberUseCase @@ -15,11 +16,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class EurobonusViewModel( getEurobonusDataUseCase: GetEurobonusDataUseCase, updateEurobonusNumberUseCase: UpdateEurobonusNumberUseCase, diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/settings/SettingsViewModel.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/settings/SettingsViewModel.kt index 485ce43b24..9c7a4f2fc7 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/settings/SettingsViewModel.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/settings/SettingsViewModel.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.profile.settings +import androidx.lifecycle.ViewModel import com.hedvig.android.apollo.NetworkCacheManager import com.hedvig.android.apollo.auth.listeners.UploadLanguagePreferenceToBackendUseCase import com.hedvig.android.core.common.di.AppScope @@ -10,11 +11,12 @@ import com.hedvig.android.memberreminders.EnableNotificationsReminderSnoozeManag import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class SettingsViewModel( languageService: LanguageService, settingsDataStore: SettingsDataStore, diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/tab/ProfileViewModel.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/tab/ProfileViewModel.kt index 382c21f93d..f13c5f371a 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/tab/ProfileViewModel.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/tab/ProfileViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.auth.LogoutUseCase import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.profile.data.CheckCertificatesAvailabilityUseCase @@ -23,6 +24,7 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine @@ -30,7 +32,7 @@ import kotlinx.coroutines.flow.flow @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class ProfileViewModel( getEuroBonusStatusUseCase: GetEurobonusStatusUseCase, checkCertificatesAvailabilityUseCase: CheckCertificatesAvailabilityUseCase, diff --git a/app/feature/feature-remove-addons/src/commonMain/kotlin/com/hedvig/feature/remove/addons/ui/SelectInsuranceToRemoveAddonViewModel.kt b/app/feature/feature-remove-addons/src/commonMain/kotlin/com/hedvig/feature/remove/addons/ui/SelectInsuranceToRemoveAddonViewModel.kt index 4f76bbf22a..dbd425a43e 100644 --- a/app/feature/feature-remove-addons/src/commonMain/kotlin/com/hedvig/feature/remove/addons/ui/SelectInsuranceToRemoveAddonViewModel.kt +++ b/app/feature/feature-remove-addons/src/commonMain/kotlin/com/hedvig/feature/remove/addons/ui/SelectInsuranceToRemoveAddonViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.data.contract.ContractId import com.hedvig.android.molecule.public.MoleculePresenter @@ -16,11 +17,12 @@ import com.hedvig.feature.remove.addons.data.GetInsurancesWithRemovableAddonsUse import com.hedvig.feature.remove.addons.data.InsuranceForAddon import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class SelectInsuranceToRemoveAddonViewModel( getInsurancesWithRemovableAddonsUseCase: GetInsurancesWithRemovableAddonsUseCase, ) : MoleculeViewModel< diff --git a/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/choose/ChooseContractForCertificateViewModel.kt b/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/choose/ChooseContractForCertificateViewModel.kt index d0bfa8d301..85433da8b2 100644 --- a/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/choose/ChooseContractForCertificateViewModel.kt +++ b/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/choose/ChooseContractForCertificateViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.travelcertificate.data.ContractEligibleWithAddress import com.hedvig.android.feature.travelcertificate.data.GetEligibleContractsWithAddressUseCase @@ -17,11 +18,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class ChooseContractForCertificateViewModel( getEligibleContractsWithAddressUseCase: GetEligibleContractsWithAddressUseCase, ) : MoleculeViewModel( diff --git a/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/history/CertificateHistoryViewModel.kt b/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/history/CertificateHistoryViewModel.kt index 464ef1488b..e3b03abcae 100644 --- a/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/history/CertificateHistoryViewModel.kt +++ b/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/history/CertificateHistoryViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.fileupload.DownloadPdfUseCase import com.hedvig.android.core.fileupload.DownloadedFile @@ -24,6 +25,7 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine @@ -31,7 +33,7 @@ import kotlinx.coroutines.flow.flow @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class CertificateHistoryViewModel( getTravelCertificatesHistoryUseCase: GetTravelCertificatesHistoryUseCase, downloadPdfUseCase: DownloadPdfUseCase, diff --git a/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/overview/TravelCertificateOverviewViewModel.kt b/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/overview/TravelCertificateOverviewViewModel.kt index 9f78f26c6d..a803161c1a 100644 --- a/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/overview/TravelCertificateOverviewViewModel.kt +++ b/app/feature/feature-travel-certificate/src/main/kotlin/com/hedvig/android/feature/travelcertificate/ui/overview/TravelCertificateOverviewViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.fileupload.DownloadPdfUseCase import com.hedvig.android.core.fileupload.DownloadedFile @@ -18,11 +19,12 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) internal class TravelCertificateOverviewViewModel( downloadTravelCertificateUseCase: DownloadPdfUseCase, ) : diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt index 2ea6acf648..c4b1b234d6 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt @@ -13,7 +13,7 @@ import octopus.type.MemberReferralStatus @Inject @SingleIn(AppScope::class) -internal class ForeverRepositoryDemo : ForeverRepository { +class ForeverRepositoryDemo : ForeverRepository { private var code: String = "code" override suspend fun getReferralsData(): Either = either { diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt index 6c4663bd99..aab489bff9 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt @@ -17,7 +17,7 @@ import octopus.MemberReferralInformationCodeUpdateMutation @Inject @SingleIn(AppScope::class) -internal class ForeverRepositoryImpl( +class ForeverRepositoryImpl( private val apolloClient: ApolloClient, ) : ForeverRepository { private val referralsQuery = FullReferralsQuery() diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt index 946ec1fa7f..60d5cc89f3 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt @@ -3,7 +3,7 @@ package com.hedvig.android.shared.foreverui.ui.data import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider -internal class ForeverRepositoryProvider( +class ForeverRepositoryProvider( override val demoManager: DemoManager, override val demoImpl: ForeverRepository, override val prodImpl: ForeverRepository, diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt index 9e7b9f7b8c..ac882bee2b 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt @@ -12,7 +12,7 @@ import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn @ContributesTo(AppScope::class) -internal interface ForeverMetroProviders { +interface ForeverMetroProviders { @Provides @SingleIn(AppScope::class) fun provideForeverRepositoryProvider( diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/ui/ForeverViewModel.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/ui/ForeverViewModel.kt index e96eb4d1c4..274e77fec1 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/ui/ForeverViewModel.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/ui/ForeverViewModel.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel import arrow.core.raise.either import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.Provider @@ -22,11 +23,12 @@ import com.hedvig.android.shared.foreverui.ui.ui.ForeverEvent.ShowedReferralCode import com.hedvig.android.shared.foreverui.ui.ui.ForeverEvent.SubmitNewReferralCode import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey @Inject @ViewModelKey -@ContributesIntoMap(AppScope::class) +@ContributesIntoMap(AppScope::class, binding()) class ForeverViewModel( foreverRepositoryProvider: Provider, ) : MoleculeViewModel( From 4e5db8ac66f8e3b1af4d349cd92084a6d50a9076 Mon Sep 17 00:00:00 2001 From: stylianosgakis Date: Tue, 2 Jun 2026 13:05:20 +0300 Subject: [PATCH 2/6] refactor(di): make payments demo-switched impls internal Construct the prod and demo implementations inline inside the Metro @Provides factories instead of contributing them as bindings. Only the factory needs the impls, so they (and their ProdOrDemoProviders) can drop their DI annotations and become internal, keeping GraphQL/impl details out of cross-module visibility. --- .../payments/di/PaymentsMetroProviders.kt | 17 +++++++++-------- .../overview/data/GetShouldShowPayoutUseCase.kt | 11 ++--------- .../data/GetShouldShowPayoutUseCaseProvider.kt | 2 +- .../overview/data/GetUpcomingPaymentUseCase.kt | 11 ++--------- .../data/GetUpcomingPaymentUseCaseProvider.kt | 2 +- 5 files changed, 15 insertions(+), 28 deletions(-) diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt index d79ae820cc..f187010257 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/di/PaymentsMetroProviders.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.payments.di +import com.apollographql.apollo.ApolloClient import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.Provider @@ -14,6 +15,7 @@ import com.hedvig.android.feature.payments.overview.data.GetUpcomingPaymentUseCa import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn +import kotlin.time.Clock @ContributesTo(AppScope::class) interface PaymentsMetroProviders { @@ -21,23 +23,22 @@ interface PaymentsMetroProviders { @SingleIn(AppScope::class) fun provideGetUpcomingPaymentUseCaseProvider( demoManager: DemoManager, - prodImpl: GetUpcomingPaymentUseCaseImpl, - demoImpl: GetUpcomingPaymentUseCaseDemo, + apolloClient: ApolloClient, + clock: Clock, ): Provider = GetUpcomingPaymentUseCaseProvider( demoManager = demoManager, - demoImpl = demoImpl, - prodImpl = prodImpl, + prodImpl = GetUpcomingPaymentUseCaseImpl(apolloClient, clock), + demoImpl = GetUpcomingPaymentUseCaseDemo(clock), ) @Provides @SingleIn(AppScope::class) fun provideGetShouldShowPayoutUseCaseProvider( demoManager: DemoManager, - prodImpl: GetShouldShowPayoutUseCaseImpl, - demoImpl: GetShouldShowPayoutUseCaseDemo, + apolloClient: ApolloClient, ): Provider = GetShouldShowPayoutUseCaseProvider( demoManager = demoManager, - demoImpl = demoImpl, - prodImpl = prodImpl, + prodImpl = GetShouldShowPayoutUseCaseImpl(apolloClient), + demoImpl = GetShouldShowPayoutUseCaseDemo(), ) } diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt index b3ff3206fd..39c7a30ea8 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCase.kt @@ -9,9 +9,6 @@ import com.apollographql.apollo.cache.normalized.fetchPolicy import com.hedvig.android.apollo.ErrorMessage import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.common.ErrorMessage -import com.hedvig.android.core.common.di.AppScope -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import octopus.ShouldShowPayoutButtonQuery interface GetShouldShowPayoutUseCase { @@ -22,9 +19,7 @@ interface GetShouldShowPayoutUseCase { * We do not want to show the payout button at all when there is no payout method connected nor is there a possibility * to add one in the member's current state */ -@Inject -@SingleIn(AppScope::class) -class GetShouldShowPayoutUseCaseImpl( +internal class GetShouldShowPayoutUseCaseImpl( private val apolloClient: ApolloClient, ) : GetShouldShowPayoutUseCase { override suspend fun invoke(): Either = either { @@ -41,8 +36,6 @@ class GetShouldShowPayoutUseCaseImpl( } } -@Inject -@SingleIn(AppScope::class) -class GetShouldShowPayoutUseCaseDemo : GetShouldShowPayoutUseCase { +internal class GetShouldShowPayoutUseCaseDemo : GetShouldShowPayoutUseCase { override suspend fun invoke(): Either = false.right() } diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt index c05eb2a4e2..1577822747 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetShouldShowPayoutUseCaseProvider.kt @@ -3,7 +3,7 @@ package com.hedvig.android.feature.payments.overview.data import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider -class GetShouldShowPayoutUseCaseProvider( +internal class GetShouldShowPayoutUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetShouldShowPayoutUseCase, override val prodImpl: GetShouldShowPayoutUseCase, diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt index 98f7ce9fa9..79850f6548 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCase.kt @@ -9,7 +9,6 @@ import com.apollographql.apollo.cache.normalized.fetchPolicy import com.hedvig.android.apollo.ErrorMessage import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.common.ErrorMessage -import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.uidata.UiCurrencyCode import com.hedvig.android.core.uidata.UiMoney import com.hedvig.android.feature.payments.data.ManualChargeToPrompt @@ -19,8 +18,6 @@ import com.hedvig.android.feature.payments.data.PaymentConnection import com.hedvig.android.feature.payments.data.PaymentOverview import com.hedvig.android.feature.payments.data.PaymentOverview.OngoingCharge import com.hedvig.android.feature.payments.data.toFailedCharge -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import kotlin.time.Clock import kotlin.time.Duration.Companion.days import kotlinx.datetime.TimeZone @@ -34,9 +31,7 @@ interface GetUpcomingPaymentUseCase { suspend fun invoke(): Either } -@Inject -@SingleIn(AppScope::class) -data class GetUpcomingPaymentUseCaseImpl( +internal data class GetUpcomingPaymentUseCaseImpl( val apolloClient: ApolloClient, val clock: Clock, ) : GetUpcomingPaymentUseCase { @@ -111,9 +106,7 @@ private fun MemberChargeFragment.toMemberChargeShortInfo() = MemberChargeShortIn }, ) -@Inject -@SingleIn(AppScope::class) -class GetUpcomingPaymentUseCaseDemo( +internal class GetUpcomingPaymentUseCaseDemo( private val clock: Clock, ) : GetUpcomingPaymentUseCase { override suspend fun invoke(): Either { diff --git a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt index c38ff13b86..03e0e89486 100644 --- a/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt +++ b/app/feature/feature-payments/src/main/kotlin/com/hedvig/android/feature/payments/overview/data/GetUpcomingPaymentUseCaseProvider.kt @@ -3,7 +3,7 @@ package com.hedvig.android.feature.payments.overview.data import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider -class GetUpcomingPaymentUseCaseProvider( +internal class GetUpcomingPaymentUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetUpcomingPaymentUseCase, override val prodImpl: GetUpcomingPaymentUseCase, From 34c38c09a1069410e4bfb14ae322e3c1d5776a2e Mon Sep 17 00:00:00 2001 From: stylianosgakis Date: Tue, 2 Jun 2026 13:05:28 +0300 Subject: [PATCH 3/6] refactor(di): make home demo-switched impls internal Construct GetHomeDataUseCase prod/demo impls inline in the Metro @Provides factory and make them (plus the provider and SeenImportantMessagesStorageImpl) internal, so the impls are no longer exposed across the module boundary. --- .../home/di/GetHomeDataUseCaseProvider.kt | 2 +- .../feature/home/di/HomeMetroProviders.kt | 28 ++++++++++++++++--- .../home/home/data/GetHomeDataUseCase.kt | 7 +---- .../home/home/data/GetHomeDataUseCaseDemo.kt | 7 +---- .../home/data/SeenImportantMessagesStorage.kt | 2 +- 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt index 7411c1374f..0ea1083a16 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/GetHomeDataUseCaseProvider.kt @@ -4,7 +4,7 @@ import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider import com.hedvig.android.feature.home.home.data.GetHomeDataUseCase -class GetHomeDataUseCaseProvider( +internal class GetHomeDataUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetHomeDataUseCase, override val prodImpl: GetHomeDataUseCase, diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt index 1c699e02a1..bee3a381fd 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/di/HomeMetroProviders.kt @@ -1,14 +1,21 @@ package com.hedvig.android.feature.home.di +import com.apollographql.apollo.ApolloClient import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.Provider +import com.hedvig.android.data.addons.data.GetTravelAddonBannerInfoUseCaseProvider +import com.hedvig.android.data.conversations.HasAnyActiveConversationUseCase import com.hedvig.android.feature.home.home.data.GetHomeDataUseCase import com.hedvig.android.feature.home.home.data.GetHomeDataUseCaseDemo import com.hedvig.android.feature.home.home.data.GetHomeDataUseCaseImpl +import com.hedvig.android.featureflags.FeatureManager +import com.hedvig.android.memberreminders.GetMemberRemindersUseCase import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn +import kotlin.time.Clock +import kotlinx.datetime.TimeZone @ContributesTo(AppScope::class) interface HomeMetroProviders { @@ -16,11 +23,24 @@ interface HomeMetroProviders { @SingleIn(AppScope::class) fun provideGetHomeDataUseCaseProvider( demoManager: DemoManager, - prodImpl: GetHomeDataUseCaseImpl, - demoImpl: GetHomeDataUseCaseDemo, + apolloClient: ApolloClient, + hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, + getMemberRemindersUseCase: GetMemberRemindersUseCase, + featureManager: FeatureManager, + clock: Clock, + timeZone: TimeZone, + getTravelAddonBannerInfoUseCaseProvider: GetTravelAddonBannerInfoUseCaseProvider, ): Provider = GetHomeDataUseCaseProvider( demoManager = demoManager, - demoImpl = demoImpl, - prodImpl = prodImpl, + prodImpl = GetHomeDataUseCaseImpl( + apolloClient = apolloClient, + hasAnyActiveConversationUseCase = hasAnyActiveConversationUseCase, + getMemberRemindersUseCase = getMemberRemindersUseCase, + featureManager = featureManager, + clock = clock, + timeZone = timeZone, + getTravelAddonBannerInfoUseCaseProvider = getTravelAddonBannerInfoUseCaseProvider, + ), + demoImpl = GetHomeDataUseCaseDemo(), ) } diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt index f2aea94b01..632848056d 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt @@ -11,7 +11,6 @@ import com.apollographql.apollo.cache.normalized.FetchPolicy import com.apollographql.apollo.cache.normalized.fetchPolicy import com.hedvig.android.apollo.ApolloOperationError import com.hedvig.android.apollo.safeFlow -import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.crosssells.BundleProgress import com.hedvig.android.crosssells.CrossSellSheetData import com.hedvig.android.crosssells.RecommendedCrossSell @@ -31,8 +30,6 @@ import com.hedvig.android.memberreminders.GetMemberRemindersUseCase import com.hedvig.android.memberreminders.MemberReminders import com.hedvig.android.ui.claimstatus.model.ClaimStatusCardUiState import com.hedvig.android.ui.emergency.FirstVetSection -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import kotlin.time.Clock import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.currentCoroutineContext @@ -54,9 +51,7 @@ interface GetHomeDataUseCase { fun invoke(forceNetworkFetch: Boolean): Flow> } -@Inject -@SingleIn(AppScope::class) -class GetHomeDataUseCaseImpl( +internal class GetHomeDataUseCaseImpl( private val apolloClient: ApolloClient, private val hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, private val getMemberRemindersUseCase: GetMemberRemindersUseCase, diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt index 23d8bd1335..022d5678f0 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCaseDemo.kt @@ -3,20 +3,15 @@ package com.hedvig.android.feature.home.home.data import arrow.core.Either import arrow.core.right import com.hedvig.android.apollo.ApolloOperationError -import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.crosssells.CrossSellSheetData import com.hedvig.android.crosssells.RecommendedCrossSell import com.hedvig.android.data.contract.CrossSell import com.hedvig.android.data.contract.ImageAsset import com.hedvig.android.memberreminders.MemberReminders -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -@Inject -@SingleIn(AppScope::class) -class GetHomeDataUseCaseDemo : GetHomeDataUseCase { +internal class GetHomeDataUseCaseDemo : GetHomeDataUseCase { override fun invoke(forceNetworkFetch: Boolean): Flow> = flowOf( HomeData( contractStatus = HomeData.ContractStatus.Active, diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt index 2f40c55854..349e8cba7c 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/SeenImportantMessagesStorage.kt @@ -18,7 +18,7 @@ interface SeenImportantMessagesStorage { @Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class SeenImportantMessagesStorageImpl : SeenImportantMessagesStorage { +internal class SeenImportantMessagesStorageImpl : SeenImportantMessagesStorage { private val storedSeenMessages: MutableStateFlow> = MutableStateFlow(listOf()) override val seenMessages: StateFlow> From beeed5136230af422570f2f0855131bd1377b603 Mon Sep 17 00:00:00 2001 From: stylianosgakis Date: Tue, 2 Jun 2026 13:05:35 +0300 Subject: [PATCH 4/6] refactor(di): make profile ContactInfo repo impls internal Construct the prod and demo ContactInfoRepository impls inline in the Metro @Provides factory and make them and ProfileRepositoryProvider internal. --- .../feature/profile/data/ContactInfoRepositoryDemo.kt | 7 +------ .../feature/profile/data/ContactInfoRepositoryImpl.kt | 7 +------ .../feature/profile/di/ProfileMetroProviders.kt | 10 ++++++---- .../feature/profile/di/ProfileRepositoryProvider.kt | 2 +- 4 files changed, 9 insertions(+), 17 deletions(-) diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt index e0a26fc8fc..4c58f87bd5 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryDemo.kt @@ -3,15 +3,10 @@ package com.hedvig.android.feature.profile.data import arrow.core.Either import arrow.core.right import com.hedvig.android.core.common.ErrorMessage -import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.profile.data.ContactInformation.Email import com.hedvig.android.feature.profile.data.ContactInformation.PhoneNumber -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn -@Inject -@SingleIn(AppScope::class) -class ContactInfoRepositoryDemo : ContactInfoRepository { +internal class ContactInfoRepositoryDemo : ContactInfoRepository { private var contactInformation = ContactInformation( PhoneNumber("072102103"), Email("google@gmail.com"), diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt index b41a563029..6df14d8928 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/data/ContactInfoRepositoryImpl.kt @@ -9,19 +9,14 @@ import com.hedvig.android.apollo.ErrorMessage import com.hedvig.android.apollo.NetworkCacheManager import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.common.ErrorMessage -import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.feature.profile.data.ContactInformation.Email import com.hedvig.android.feature.profile.data.ContactInformation.PhoneNumber import com.hedvig.android.logger.LogPriority.ERROR import com.hedvig.android.logger.logcat -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import octopus.ContactInformationQuery import octopus.MemberUpdateContactInfoMutation -@Inject -@SingleIn(AppScope::class) -class ContactInfoRepositoryImpl( +internal class ContactInfoRepositoryImpl( private val apolloClient: ApolloClient, private val networkCacheManager: NetworkCacheManager, ) : ContactInfoRepository { diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt index f4a8a29d3d..720a255c66 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileMetroProviders.kt @@ -1,5 +1,7 @@ package com.hedvig.android.feature.profile.di +import com.apollographql.apollo.ApolloClient +import com.hedvig.android.apollo.NetworkCacheManager import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.Provider @@ -16,11 +18,11 @@ interface ProfileMetroProviders { @SingleIn(AppScope::class) fun provideProfileRepositoryProvider( demoManager: DemoManager, - prodImpl: ContactInfoRepositoryImpl, - demoImpl: ContactInfoRepositoryDemo, + apolloClient: ApolloClient, + networkCacheManager: NetworkCacheManager, ): Provider = ProfileRepositoryProvider( demoManager = demoManager, - demoImpl = demoImpl, - prodImpl = prodImpl, + prodImpl = ContactInfoRepositoryImpl(apolloClient, networkCacheManager), + demoImpl = ContactInfoRepositoryDemo(), ) } diff --git a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt index ceb6b2330d..f429bf2097 100644 --- a/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt +++ b/app/feature/feature-profile/src/main/kotlin/com/hedvig/android/feature/profile/di/ProfileRepositoryProvider.kt @@ -4,7 +4,7 @@ import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider import com.hedvig.android.feature.profile.data.ContactInfoRepository -class ProfileRepositoryProvider( +internal class ProfileRepositoryProvider( override val demoManager: DemoManager, override val demoImpl: ContactInfoRepository, override val prodImpl: ContactInfoRepository, From 1f517d25157331cb2dd8283b0b6adf7420b58bae Mon Sep 17 00:00:00 2001 From: stylianosgakis Date: Tue, 2 Jun 2026 13:05:43 +0300 Subject: [PATCH 5/6] refactor(di): make forever repository impls internal Construct the prod and demo ForeverRepository impls inline in the Metro @Provides factory and make them and ForeverRepositoryProvider internal. --- .../shared/foreverui/ui/data/ForeverRepositoryDemo.kt | 7 +------ .../shared/foreverui/ui/data/ForeverRepositoryImpl.kt | 7 +------ .../shared/foreverui/ui/data/ForeverRepositoryProvider.kt | 2 +- .../shared/foreverui/ui/di/ForeverMetroProviders.kt | 8 ++++---- 4 files changed, 7 insertions(+), 17 deletions(-) diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt index c4b1b234d6..f9a17dde0a 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryDemo.kt @@ -4,16 +4,11 @@ import arrow.core.Either import arrow.core.raise.either import arrow.core.right import com.hedvig.android.core.common.ErrorMessage -import com.hedvig.android.core.common.di.AppScope -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import octopus.FullReferralsQuery import octopus.type.CurrencyCode import octopus.type.MemberReferralStatus -@Inject -@SingleIn(AppScope::class) -class ForeverRepositoryDemo : ForeverRepository { +internal class ForeverRepositoryDemo : ForeverRepository { private var code: String = "code" override suspend fun getReferralsData(): Either = either { diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt index aab489bff9..caf34c602c 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryImpl.kt @@ -8,16 +8,11 @@ import com.apollographql.apollo.cache.normalized.fetchPolicy import com.hedvig.android.apollo.ErrorMessage import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.common.ErrorMessage -import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.shared.foreverui.ui.data.ForeverRepository.ReferralError -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import octopus.FullReferralsQuery import octopus.MemberReferralInformationCodeUpdateMutation -@Inject -@SingleIn(AppScope::class) -class ForeverRepositoryImpl( +internal class ForeverRepositoryImpl( private val apolloClient: ApolloClient, ) : ForeverRepository { private val referralsQuery = FullReferralsQuery() diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt index 60d5cc89f3..946ec1fa7f 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/data/ForeverRepositoryProvider.kt @@ -3,7 +3,7 @@ package com.hedvig.android.shared.foreverui.ui.data import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.ProdOrDemoProvider -class ForeverRepositoryProvider( +internal class ForeverRepositoryProvider( override val demoManager: DemoManager, override val demoImpl: ForeverRepository, override val prodImpl: ForeverRepository, diff --git a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt index ac882bee2b..5242822948 100644 --- a/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt +++ b/app/shared/forever-ui/src/main/kotlin/com/hedvig/android/shared/foreverui/ui/di/ForeverMetroProviders.kt @@ -1,5 +1,6 @@ package com.hedvig.android.shared.foreverui.ui.di +import com.apollographql.apollo.ApolloClient import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.Provider @@ -17,11 +18,10 @@ interface ForeverMetroProviders { @SingleIn(AppScope::class) fun provideForeverRepositoryProvider( demoManager: DemoManager, - prodImpl: ForeverRepositoryImpl, - demoImpl: ForeverRepositoryDemo, + apolloClient: ApolloClient, ): Provider = ForeverRepositoryProvider( demoManager = demoManager, - demoImpl = demoImpl, - prodImpl = prodImpl, + prodImpl = ForeverRepositoryImpl(apolloClient), + demoImpl = ForeverRepositoryDemo(), ) } From 7eb66e1d1da7a4d88828e22aead15c27a99aa924 Mon Sep 17 00:00:00 2001 From: stylianosgakis Date: Tue, 2 Jun 2026 13:05:50 +0300 Subject: [PATCH 6/6] refactor(di): make cross-sell-sheet data use case impls internal Construct the prod and demo GetCrossSellSheetDataUseCase impls inline in the Metro @Provides factory and make them internal. --- .../cross/sell/sheet/CrossSellSheetViewModel.kt | 10 +++------- .../sell/sheet/di/CrossSellSheetMetroProviders.kt | 8 ++++---- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt index db64d45c18..ae3f6a8df7 100644 --- a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt +++ b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/CrossSellSheetViewModel.kt @@ -31,7 +31,6 @@ import com.hedvig.android.molecule.public.MoleculePresenterScope import com.hedvig.android.molecule.public.MoleculeViewModel import dev.zacsweers.metro.ContributesIntoMap import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.SingleIn import dev.zacsweers.metro.binding import dev.zacsweers.metrox.viewmodel.ViewModelKey import kotlinx.coroutines.flow.Flow @@ -131,7 +130,7 @@ internal fun CrossSellInfoType.toCrossSellSource(): CrossSellInput { } } -class GetCrossSellSheetDataUseCaseProvider( +internal class GetCrossSellSheetDataUseCaseProvider( override val demoManager: DemoManager, override val demoImpl: GetCrossSellSheetDataUseCase, override val prodImpl: GetCrossSellSheetDataUseCase, @@ -141,9 +140,7 @@ interface GetCrossSellSheetDataUseCase { suspend fun invoke(source: CrossSellInput): Flow> } -@Inject -@SingleIn(AppScope::class) -class GetCrossSellSheetDataUseCaseImpl( +internal class GetCrossSellSheetDataUseCaseImpl( private val apolloClient: ApolloClient, ) : GetCrossSellSheetDataUseCase { override suspend fun invoke(source: CrossSellInput): Flow> { @@ -201,8 +198,7 @@ internal fun CrossSellFragment.toCrossSell(): CrossSell { } } -@Inject -class DemoGetCrossSellSheetDataUseCase() : GetCrossSellSheetDataUseCase { +internal class DemoGetCrossSellSheetDataUseCase : GetCrossSellSheetDataUseCase { override suspend fun invoke(source: CrossSellInput): Flow> { return flowOf(ErrorMessage("Ineligible for demo mode").left()) } diff --git a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt index e1f7bbbfc8..b35bb892bb 100644 --- a/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt +++ b/app/feature/feature-cross-sell-sheet/src/main/kotlin/com/hedvig/android/feature/cross/sell/sheet/di/CrossSellSheetMetroProviders.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.cross.sell.sheet.di +import com.apollographql.apollo.ApolloClient import com.hedvig.android.core.common.di.AppScope import com.hedvig.android.core.demomode.DemoManager import com.hedvig.android.core.demomode.Provider @@ -17,11 +18,10 @@ interface CrossSellSheetMetroProviders { @SingleIn(AppScope::class) fun provideGetCrossSellSheetDataUseCaseProvider( demoManager: DemoManager, - prodImpl: GetCrossSellSheetDataUseCaseImpl, - demoImpl: DemoGetCrossSellSheetDataUseCase, + apolloClient: ApolloClient, ): Provider = GetCrossSellSheetDataUseCaseProvider( demoManager = demoManager, - demoImpl = demoImpl, - prodImpl = prodImpl, + prodImpl = GetCrossSellSheetDataUseCaseImpl(apolloClient), + demoImpl = DemoGetCrossSellSheetDataUseCase(), ) }