Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ lokalise.properties

# Local jks store
Jks
.worktrees
1 change: 1 addition & 0 deletions app/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ dependencies {
implementation(projects.designSystemInternals)
implementation(projects.featureAddonPurchase)
implementation(projects.featurePurchaseApartment)
implementation(projects.purchaseCommon)
implementation(projects.featureChat)
implementation(projects.featureChooseTier)
implementation(projects.featureClaimChat)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ import com.hedvig.android.datadog.core.di.datadogModule
import com.hedvig.android.datadog.demo.tracking.di.datadogDemoTrackingModule
import com.hedvig.android.design.system.hedvig.pdfrenderer.PdfDecoder
import com.hedvig.android.feature.addon.purchase.di.addonPurchaseModule
import com.hedvig.android.feature.purchase.apartment.di.apartmentPurchaseModule
import com.hedvig.android.feature.change.tier.di.chooseTierModule
import com.hedvig.android.feature.chat.di.chatModule
import com.hedvig.android.feature.claim.details.di.claimDetailsModule
Expand All @@ -80,6 +79,8 @@ import com.hedvig.android.feature.login.di.loginModule
import com.hedvig.android.feature.movingflow.di.movingFlowModule
import com.hedvig.android.feature.payments.di.paymentsModule
import com.hedvig.android.feature.profile.di.profileModule
import com.hedvig.android.feature.purchase.apartment.di.apartmentPurchaseModule
import com.hedvig.android.feature.purchase.common.di.purchaseCommonModule
import com.hedvig.android.feature.terminateinsurance.di.terminateInsuranceModule
import com.hedvig.android.feature.travelcertificate.di.travelCertificateModule
import com.hedvig.android.featureflags.di.featureManagerModule
Expand Down Expand Up @@ -346,6 +347,7 @@ val applicationModule = module {
notificationModule,
paymentsModule,
profileModule,
purchaseCommonModule,
settingsDatastoreModule,
sharedModule(AndroidBuildConfig()),
sharedPreferencesModule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,21 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.lifecycle.compose.dropUnlessResumed
import androidx.media3.datasource.cache.SimpleCache
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptionsBuilder
import androidx.navigation.compose.NavHost
import androidx.navigation.toRoute
import coil3.ImageLoader
import com.benasher44.uuid.Uuid
import com.hedvig.android.app.ui.HedvigAppState
import com.hedvig.android.core.buildconstants.HedvigBuildConstants
import com.hedvig.android.data.addons.data.AddonBannerSource
import com.hedvig.android.data.coinsured.CoInsuredFlowType
import com.hedvig.android.data.contract.ContractId
import com.hedvig.android.data.cross.sell.after.flow.CrossSellAfterFlowRepository
import com.hedvig.android.design.system.hedvig.GlobalSnackBarState
import com.hedvig.android.design.system.hedvig.motion.MotionDefaults
import com.hedvig.android.feature.addon.purchase.navigation.AddonPurchaseGraphDestination
Expand Down Expand Up @@ -68,6 +71,10 @@ import com.hedvig.android.feature.movingflow.movingFlowGraph
import com.hedvig.android.feature.payments.navigation.paymentsGraph
import com.hedvig.android.feature.profile.navigation.ProfileDestination
import com.hedvig.android.feature.profile.tab.profileGraph
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseGraphDestination
import com.hedvig.android.feature.purchase.apartment.navigation.apartmentPurchaseNavGraph
import com.hedvig.android.feature.purchase.common.navigation.PurchaseCommonDestination
import com.hedvig.android.feature.purchase.common.ui.success.PurchaseSuccessDestination
import com.hedvig.android.feature.terminateinsurance.navigation.TerminateInsuranceGraphDestination
import com.hedvig.android.feature.terminateinsurance.navigation.terminateInsuranceGraph
import com.hedvig.android.feature.travelcertificate.navigation.TravelCertificateGraphDestination
Expand All @@ -76,17 +83,15 @@ import com.hedvig.android.language.LanguageService
import com.hedvig.android.logger.logcat
import com.hedvig.android.navigation.activity.ExternalNavigator
import com.hedvig.android.navigation.common.Destination
import com.hedvig.android.navigation.compose.navdestination
import com.hedvig.android.navigation.compose.typedPopBackStack
import com.hedvig.android.navigation.compose.typedPopUpTo
import com.hedvig.android.navigation.core.HedvigDeepLinkContainer
import org.koin.mp.KoinPlatform
import com.hedvig.feature.claim.chat.ClaimChatDestination
import com.hedvig.feature.claim.chat.claimChatGraph
import com.hedvig.android.data.cross.sell.after.flow.CrossSellAfterFlowRepository
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseGraphDestination
import com.hedvig.android.feature.purchase.apartment.navigation.apartmentPurchaseNavGraph
import com.hedvig.feature.remove.addons.AddonRemoveGraphDestination
import com.hedvig.feature.remove.addons.removeAddonsNavGraph
import org.koin.mp.KoinPlatform

@Composable
internal fun HedvigNavHost(
Expand Down Expand Up @@ -488,6 +493,15 @@ internal fun HedvigNavHost(
finishApp = finishApp,
crossSellAfterFlowRepository = crossSellAfterFlowRepository,
)
navdestination<PurchaseCommonDestination.Success> { backStackEntry ->
val route = backStackEntry.toRoute<PurchaseCommonDestination.Success>()
PurchaseSuccessDestination(
startDate = route.startDate,
close = dropUnlessResumed {
if (!navController.popBackStack()) finishApp()
},
)
}
removeAddonsNavGraph(
navController = hedvigAppState.navController,
onNavigateToNewConversation = {
Expand Down
2 changes: 1 addition & 1 deletion app/feature/feature-purchase-apartment/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ dependencies {
implementation(libs.koin.composeViewModel)
implementation(libs.koin.core)
implementation(libs.kotlinx.serialization.core)
implementation(libs.zXing)
implementation(projects.apolloCore)
implementation(projects.apolloOctopusPublic)
implementation(projects.composeUi)
Expand All @@ -33,6 +32,7 @@ dependencies {
implementation(projects.coreUiData)
implementation(projects.dataCrossSellAfterFlow)
implementation(projects.designSystemHedvig)
implementation(projects.purchaseCommon)
implementation(projects.languageCore)
implementation(projects.moleculePublic)
implementation(projects.navigationCommon)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,3 @@ internal data class ApartmentTierOffer(
val deductibleDisplayName: String?,
val hasDiscount: Boolean,
)

internal data class SigningStart(
val signingId: String,
val autoStartToken: String,
)

internal data class SigningPollResult(
val status: SigningStatus,
val liveQrCodeData: String?,
)

internal enum class SigningStatus {
PENDING,
SIGNED,
FAILED,
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
package com.hedvig.android.feature.purchase.apartment.di

import com.hedvig.android.feature.purchase.apartment.data.AddToCartAndStartSignUseCase
import com.hedvig.android.feature.purchase.apartment.data.AddToCartAndStartSignUseCaseImpl
import com.hedvig.android.feature.purchase.apartment.data.CreateSessionAndPriceIntentUseCase
import com.hedvig.android.feature.purchase.apartment.data.CreateSessionAndPriceIntentUseCaseImpl
import com.hedvig.android.feature.purchase.apartment.data.PollSigningStatusUseCase
import com.hedvig.android.feature.purchase.apartment.data.PollSigningStatusUseCaseImpl
import com.hedvig.android.feature.purchase.apartment.data.SubmitFormAndGetOffersUseCase
import com.hedvig.android.feature.purchase.apartment.data.SubmitFormAndGetOffersUseCaseImpl
import com.hedvig.android.feature.purchase.apartment.ui.form.ApartmentFormViewModel
import com.hedvig.android.feature.purchase.apartment.ui.offer.SelectTierViewModel
import com.hedvig.android.feature.purchase.apartment.ui.sign.SigningViewModel
import com.hedvig.android.feature.purchase.apartment.ui.summary.PurchaseSummaryViewModel
import org.koin.core.module.dsl.viewModel
import org.koin.dsl.module

val apartmentPurchaseModule = module {
single<CreateSessionAndPriceIntentUseCase> { CreateSessionAndPriceIntentUseCaseImpl(apolloClient = get()) }
single<SubmitFormAndGetOffersUseCase> { SubmitFormAndGetOffersUseCaseImpl(apolloClient = get()) }
single<AddToCartAndStartSignUseCase> { AddToCartAndStartSignUseCaseImpl(apolloClient = get()) }
single<PollSigningStatusUseCase> { PollSigningStatusUseCaseImpl(apolloClient = get()) }

viewModel<ApartmentFormViewModel> { params ->
ApartmentFormViewModel(
Expand All @@ -28,19 +19,4 @@ val apartmentPurchaseModule = module {
submitFormAndGetOffersUseCase = get(),
)
}
viewModel<SelectTierViewModel> { params ->
SelectTierViewModel(params = params.get())
}
viewModel<PurchaseSummaryViewModel> { params ->
PurchaseSummaryViewModel(
summaryParameters = params.get(),
addToCartAndStartSignUseCase = get(),
)
}
viewModel<SigningViewModel> { params ->
SigningViewModel(
signingParameters = params.get(),
pollSigningStatusUseCase = get(),
)
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.hedvig.android.feature.purchase.apartment.navigation

import com.hedvig.android.navigation.common.Destination
import com.hedvig.android.navigation.common.DestinationNavTypeAware
import kotlin.reflect.KType
import kotlin.reflect.typeOf
import kotlinx.serialization.Serializable

@Serializable
Expand All @@ -14,75 +11,4 @@ data class ApartmentPurchaseGraphDestination(
internal sealed interface ApartmentPurchaseDestination {
@Serializable
data object Form : ApartmentPurchaseDestination, Destination

@Serializable
data class SelectTier(
val params: SelectTierParameters,
) : ApartmentPurchaseDestination, Destination {
companion object : DestinationNavTypeAware {
override val typeList: List<KType> = listOf(typeOf<SelectTierParameters>())
}
}

@Serializable
data class Summary(
val params: SummaryParameters,
) : ApartmentPurchaseDestination, Destination {
companion object : DestinationNavTypeAware {
override val typeList: List<KType> = listOf(typeOf<SummaryParameters>())
}
}

@Serializable
data class Signing(
val params: SigningParameters,
) : ApartmentPurchaseDestination, Destination {
companion object : DestinationNavTypeAware {
override val typeList: List<KType> = listOf(typeOf<SigningParameters>())
}
}

@Serializable
data class Success(
val startDate: String?,
) : ApartmentPurchaseDestination, Destination

@Serializable
data object Failure : ApartmentPurchaseDestination, Destination
}

@Serializable
internal data class TierOfferData(
val offerId: String,
val tierDisplayName: String,
val tierDescription: String,
val grossAmount: Double,
val grossCurrencyCode: String,
val netAmount: Double,
val netCurrencyCode: String,
val usps: List<String>,
val exposureDisplayName: String,
val deductibleDisplayName: String?,
val hasDiscount: Boolean,
)

@Serializable
internal data class SelectTierParameters(
val shopSessionId: String,
val offers: List<TierOfferData>,
val productDisplayName: String,
)

@Serializable
internal data class SummaryParameters(
val shopSessionId: String,
val selectedOffer: TierOfferData,
val productDisplayName: String,
)

@Serializable
internal data class SigningParameters(
val signingId: String,
val autoStartToken: String,
val startDate: String?,
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,25 @@ import androidx.navigation.NavGraphBuilder
import androidx.navigation.toRoute
import com.hedvig.android.data.cross.sell.after.flow.CrossSellAfterFlowRepository
import com.hedvig.android.data.cross.sell.after.flow.CrossSellInfoType
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseDestination.Failure
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseDestination.Form
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseDestination.SelectTier
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseDestination.Signing
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseDestination.Success
import com.hedvig.android.feature.purchase.apartment.navigation.ApartmentPurchaseDestination.Summary
import com.hedvig.android.feature.purchase.apartment.ui.failure.PurchaseFailureDestination
import com.hedvig.android.feature.purchase.apartment.ui.form.ApartmentFormDestination
import com.hedvig.android.feature.purchase.apartment.ui.form.ApartmentFormViewModel
import com.hedvig.android.feature.purchase.apartment.ui.offer.SelectTierDestination
import com.hedvig.android.feature.purchase.apartment.ui.offer.SelectTierViewModel
import com.hedvig.android.feature.purchase.apartment.ui.sign.SigningDestination
import com.hedvig.android.feature.purchase.apartment.ui.sign.SigningViewModel
import com.hedvig.android.feature.purchase.apartment.ui.success.PurchaseSuccessDestination
import com.hedvig.android.feature.purchase.apartment.ui.summary.PurchaseSummaryDestination
import com.hedvig.android.feature.purchase.apartment.ui.summary.PurchaseSummaryViewModel
import com.hedvig.android.feature.purchase.common.navigation.PurchaseCommonDestination
import com.hedvig.android.feature.purchase.common.navigation.PurchaseCommonDestination.Failure
import com.hedvig.android.feature.purchase.common.navigation.PurchaseCommonDestination.SelectTier
import com.hedvig.android.feature.purchase.common.navigation.PurchaseCommonDestination.Signing
import com.hedvig.android.feature.purchase.common.navigation.PurchaseCommonDestination.Success
import com.hedvig.android.feature.purchase.common.navigation.PurchaseCommonDestination.Summary
import com.hedvig.android.feature.purchase.common.navigation.SelectTierParameters
import com.hedvig.android.feature.purchase.common.navigation.SummaryParameters
import com.hedvig.android.feature.purchase.common.navigation.TierOfferData
import com.hedvig.android.feature.purchase.common.ui.failure.PurchaseFailureDestination
import com.hedvig.android.feature.purchase.common.ui.offer.SelectTierDestination
import com.hedvig.android.feature.purchase.common.ui.offer.SelectTierViewModel
import com.hedvig.android.feature.purchase.common.ui.sign.SigningDestination
import com.hedvig.android.feature.purchase.common.ui.sign.SigningViewModel
import com.hedvig.android.feature.purchase.common.ui.summary.PurchaseSummaryDestination
import com.hedvig.android.feature.purchase.common.ui.summary.PurchaseSummaryViewModel
import com.hedvig.android.navigation.compose.navdestination
import com.hedvig.android.navigation.compose.navgraph
import com.hedvig.android.navigation.compose.typed.getRouteFromBackStack
Expand Down Expand Up @@ -97,7 +100,6 @@ fun NavGraphBuilder.apartmentPurchaseNavGraph(
viewModel = viewModel,
navigateUp = dropUnlessResumed { navController.popBackStack() },
navigateToSigning = { params -> navController.navigate(Signing(params)) },
navigateToFailure = dropUnlessResumed { navController.navigate(Failure) },
)
}

Expand All @@ -116,27 +118,7 @@ fun NavGraphBuilder.apartmentPurchaseNavGraph(
typedPopUpTo<ApartmentPurchaseGraphDestination>({ inclusive = true })
}
},
navigateToFailure = dropUnlessResumed { navController.navigate(Failure) },
)
}

navdestination<Failure> {
PurchaseFailureDestination(
onRetry = dropUnlessResumed { navController.popBackStack() },
close = dropUnlessResumed {
if (!navController.typedPopBackStack<ApartmentPurchaseGraphDestination>(inclusive = true)) finishApp()
},
)
}
}

navdestination<Success> { backStackEntry ->
val route = backStackEntry.toRoute<Success>()
PurchaseSuccessDestination(
startDate = route.startDate,
close = dropUnlessResumed {
if (!navController.popBackStack()) finishApp()
},
)
}
}
Loading
Loading