From 8212403bd071b7423db19859ce18de84edaed37a Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Thu, 13 Aug 2026 11:41:17 +0200 Subject: [PATCH 1/2] show display item subtitle --- .../android/data/display/items/DisplayItem.kt | 4 +- .../graphql/QueryInsuranceContracts.graphql | 1 + .../data/GetInsuranceContractsUseCase.kt | 2 +- .../insurancedetail/yourinfo/YourInfoTab.kt | 89 +++++++++++-------- 4 files changed, 59 insertions(+), 37 deletions(-) diff --git a/app/data/data-display-items/src/main/kotlin/com/hedvig/android/data/display/items/DisplayItem.kt b/app/data/data-display-items/src/main/kotlin/com/hedvig/android/data/display/items/DisplayItem.kt index 82a5625b7b..7c1eb89ba1 100644 --- a/app/data/data-display-items/src/main/kotlin/com/hedvig/android/data/display/items/DisplayItem.kt +++ b/app/data/data-display-items/src/main/kotlin/com/hedvig/android/data/display/items/DisplayItem.kt @@ -8,6 +8,7 @@ import kotlinx.datetime.toLocalDateTime data class DisplayItem( val title: String, val value: DisplayItemValue, + val subtitle: String? = null, ) { sealed interface DisplayItemValue { data class DateTime(val localDateTime: LocalDateTime) : DisplayItemValue @@ -18,7 +19,7 @@ data class DisplayItem( } companion object { - fun fromStrings(title: String, value: String): DisplayItem { + fun fromStrings(title: String, value: String, subtitle: String? = null): DisplayItem { val displayItemValue: DisplayItemValue = run { try { val localDate = LocalDate.parse(value) @@ -42,6 +43,7 @@ data class DisplayItem( return DisplayItem( title, displayItemValue, + subtitle, ) } } diff --git a/app/feature/feature-insurances/src/main/graphql/QueryInsuranceContracts.graphql b/app/feature/feature-insurances/src/main/graphql/QueryInsuranceContracts.graphql index ae08554963..334490da45 100644 --- a/app/feature/feature-insurances/src/main/graphql/QueryInsuranceContracts.graphql +++ b/app/feature/feature-insurances/src/main/graphql/QueryInsuranceContracts.graphql @@ -117,6 +117,7 @@ fragment AgreementFragment on Agreement { fragment AgreementDisplayItemFragment on AgreementDisplayItem { displayTitle + displaySubtitle displayValue } diff --git a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/data/GetInsuranceContractsUseCase.kt b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/data/GetInsuranceContractsUseCase.kt index 860063b2a1..4606889566 100644 --- a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/data/GetInsuranceContractsUseCase.kt +++ b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/data/GetInsuranceContractsUseCase.kt @@ -239,7 +239,7 @@ private fun ContractFragment.toContract( } private fun AgreementDisplayItemFragment.toDisplayItem(): DisplayItem { - return DisplayItem.fromStrings(displayTitle, displayValue) + return DisplayItem.fromStrings(displayTitle, displayValue, displaySubtitle) } private fun MonthlyCostFragment.toMonthlyCost(): MonthlyCost { diff --git a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt index 937adc7a5e..02c6a1d40a 100644 --- a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt +++ b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt @@ -309,9 +309,15 @@ internal fun YourInfoTab( modifier = Modifier.padding(horizontal = 16.dp), ) } - if (allowEditCoInsured && coInsured.isNotEmpty()) { - HorizontalDivider(Modifier.padding(horizontal = 16.dp)) + if (allowEditCoInsured || allowEditCoOwners) { + HorizontalDivider() Spacer(Modifier.height(16.dp)) + ContractOwnerSection( + coInsuredList = coInsured, + modifier = Modifier.padding(horizontal = 16.dp), + ) + } + if (allowEditCoInsured && coInsured.isNotEmpty()) { CoInsuredSection( coInsuredList = coInsured, contractHolderDisplayName = contractHolderDisplayName, @@ -321,8 +327,6 @@ internal fun YourInfoTab( ) } if (allowEditCoOwners && coOwners.isNotEmpty()) { - HorizontalDivider(Modifier.padding(horizontal = 16.dp)) - Spacer(Modifier.height(16.dp)) CoInsuredSection( coInsuredList = coOwners, contractHolderDisplayName = contractHolderDisplayName, @@ -660,11 +664,16 @@ internal fun CoverageRows(coverageRowItems: List, modifier: Modifie coverageRowItems.forEachIndexed { index, displayItem -> HorizontalItemsWithMaximumSpaceTaken( startSlot = { - Row( - verticalAlignment = Alignment.CenterVertically, + Column( + verticalArrangement = Arrangement.Center, modifier = Modifier.padding(vertical = 16.dp), ) { HedvigText(displayItem.title) + displayItem.subtitle?.let { + HedvigText(it, + style = HedvigTheme.typography.label, + color = HedvigTheme.colorScheme.textSecondary) + } } }, endSlot = { @@ -746,6 +755,44 @@ internal fun PriceRow( ) } +@Composable +internal fun ContractOwnerSection( + coInsuredList: List, + modifier: Modifier, +) { + Column(modifier = modifier) { + HorizontalItemsWithMaximumSpaceTaken( + startSlot = { + Column( + verticalArrangement = Arrangement.Center, + modifier = Modifier.padding(vertical = 4.dp), + ) { + HedvigText(stringResource(Res.string.CHANGE_ADDRESS_CO_INSURED_LABEL)) + } + }, + endSlot = { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.End, + modifier = Modifier.padding(vertical = 4.dp), + ) { + val text = if (coInsuredList.isEmpty()) { + stringResource(Res.string.CHANGE_ADDRESS_ONLY_YOU) + } else { + stringResource(Res.string.CHANGE_ADDRESS_YOU_PLUS, coInsuredList.size) + } + HedvigText( + text = text, + color = HedvigTheme.colorScheme.textSecondary, + textAlign = TextAlign.End, + ) + } + }, + spaceBetween = 8.dp, + ) + } +} + @Composable internal fun CoInsuredSection( coInsuredList: List, @@ -757,35 +804,7 @@ internal fun CoInsuredSection( val dateTimeFormatter = rememberHedvigDateTimeFormatter() val birthDateTimeFormatter = rememberHedvigBirthDateDateTimeFormatter() Column(modifier = modifier) { - HorizontalItemsWithMaximumSpaceTaken( - startSlot = { - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(vertical = 4.dp), - ) { - HedvigText(stringResource(Res.string.CHANGE_ADDRESS_CO_INSURED_LABEL)) - } - }, - endSlot = { - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.End, - modifier = Modifier.padding(vertical = 4.dp), - ) { - val text = if (coInsuredList.isEmpty()) { - stringResource(Res.string.CHANGE_ADDRESS_ONLY_YOU) - } else { - stringResource(Res.string.CHANGE_ADDRESS_YOU_PLUS, coInsuredList.size) - } - HedvigText( - text = text, - color = HedvigTheme.colorScheme.textSecondary, - textAlign = TextAlign.End, - ) - } - }, - spaceBetween = 8.dp, - ) + Spacer(Modifier.height(16.dp)) HorizontalDivider() HorizontalItemsWithMaximumSpaceTaken( From e731cb9c0df02efe8389baa89c930778b16a76f8 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Thu, 13 Aug 2026 11:52:22 +0200 Subject: [PATCH 2/2] paddings --- .../insurances/insurancedetail/yourinfo/YourInfoTab.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt index 02c6a1d40a..0f70148b11 100644 --- a/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt +++ b/app/feature/feature-insurances/src/main/kotlin/com/hedvig/android/feature/insurances/insurancedetail/yourinfo/YourInfoTab.kt @@ -310,12 +310,15 @@ internal fun YourInfoTab( ) } if (allowEditCoInsured || allowEditCoOwners) { - HorizontalDivider() + HorizontalDivider(modifier = Modifier.padding(horizontal = 16.dp)) Spacer(Modifier.height(16.dp)) ContractOwnerSection( coInsuredList = coInsured, modifier = Modifier.padding(horizontal = 16.dp), ) + if (coInsured.isEmpty() && coOwners.isEmpty()) { + Spacer(Modifier.height(16.dp)) + } } if (allowEditCoInsured && coInsured.isNotEmpty()) { CoInsuredSection(