Loading feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionListPreview.kt 0 → 100644 +35 −0 Original line number Diff line number Diff line package app.k9mail.feature.funding.googleplay.ui.contribution import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme @Composable @Preview(showBackground = true) internal fun ContributionListPreview() { PreviewWithTheme { ContributionList( contributions = FakeData.recurringContributions, isRecurringContributionSelected = true, selectedItem = FakeData.recurringContributions.first(), onOneTimeContributionTypeClick = {}, onRecurringContributionTypeClick = {}, onItemClick = {}, ) } } @Composable @Preview(showBackground = true) internal fun ContributionListRecurringPreview() { PreviewWithTheme { ContributionList( contributions = FakeData.oneTimeContributions, selectedItem = FakeData.oneTimeContributions.last(), isRecurringContributionSelected = false, onOneTimeContributionTypeClick = {}, onRecurringContributionTypeClick = {}, onItemClick = {}, ) } } feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeData.kt 0 → 100644 +74 −0 Original line number Diff line number Diff line package app.k9mail.feature.funding.googleplay.ui.contribution import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution import kotlinx.collections.immutable.persistentListOf internal object FakeData { val recurringContributions = persistentListOf( RecurringContribution( id = "monthly_subscription_250", title = "Monthly subscription: $250", price = "$250", ), RecurringContribution( id = "monthly_subscription_140", title = "Monthly subscription: $140", price = "$140", ), RecurringContribution( id = "monthly_subscription_80", title = "Monthly subscription: $80", price = "$80", ), RecurringContribution( id = "monthly_subscription_50", title = "Monthly subscription: $50", price = "$50", ), RecurringContribution( id = "monthly_subscription_25", title = "Monthly subscription: $25", price = "$25", ), RecurringContribution( id = "monthly_subscription_15", title = "Monthly subscription: $15", price = "$15", ), ) val oneTimeContributions = persistentListOf( OneTimeContribution( id = "one_time_payment_250", title = "One time payment: $250", price = "$250", ), OneTimeContribution( id = "one_time_payment_140", title = "One time payment: $140", price = "$140", ), OneTimeContribution( id = "one_time_payment_80", title = "One time payment: $80", price = "$80", ), OneTimeContribution( id = "one_time_payment_50", title = "One time payment: $50", price = "$50", ), OneTimeContribution( id = "one_time_payment_25", title = "One time payment: $25", price = "$25", ), OneTimeContribution( id = "one_time_payment_15", title = "One time payment: $15", price = "$15", ), ) } feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionList.kt 0 → 100644 +85 −0 Original line number Diff line number Diff line package app.k9mail.feature.funding.googleplay.ui.contribution import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelLarge import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.feature.funding.googleplay.R import app.k9mail.feature.funding.googleplay.domain.entity.Contribution import kotlinx.collections.immutable.ImmutableList @OptIn(ExperimentalLayoutApi::class) @Composable internal fun ContributionList( contributions: ImmutableList<Contribution>, selectedItem: Contribution?, isRecurringContributionSelected: Boolean, onOneTimeContributionTypeClick: () -> Unit, onRecurringContributionTypeClick: () -> Unit, onItemClick: (Contribution) -> Unit, modifier: Modifier = Modifier, ) { Surface( color = MainTheme.colors.surfaceContainerLowest, shape = MainTheme.shapes.small, modifier = modifier.fillMaxWidth(), ) { Column( modifier = Modifier .padding(MainTheme.spacings.double), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { TextLabelLarge( text = stringResource(R.string.funding_googleplay_contribution_list_title), ) Row( modifier = Modifier .fillMaxWidth() .padding(top = MainTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { ContributionListItem( text = stringResource(R.string.funding_googleplay_contribution_list_type_one_time), onClick = onOneTimeContributionTypeClick, isSelected = !isRecurringContributionSelected, modifier = Modifier.weight(1f), ) ContributionListItem( text = stringResource(R.string.funding_googleplay_contribution_list_type_recurring), onClick = onRecurringContributionTypeClick, isSelected = isRecurringContributionSelected, modifier = Modifier.weight(1f), ) } FlowRow( horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { contributions.forEach { ContributionListItem( text = it.price, onClick = { onItemClick(it) }, isSelected = it == selectedItem, modifier = Modifier.weight(1f), ) } } TextBodyMedium( text = stringResource(R.string.funding_googleplay_contribution_list_disclaimer), modifier = Modifier.padding(top = MainTheme.spacings.default), ) } } } feature/funding/googleplay/src/main/res/values/strings.xml 0 → 100644 +7 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <resources> <string name="funding_googleplay_contribution_list_title">Secure donation</string> <string name="funding_googleplay_contribution_list_type_one_time">Give once</string> <string name="funding_googleplay_contribution_list_type_recurring">Monthly</string> <string name="funding_googleplay_contribution_list_disclaimer">Contributions are not tax-deductible as charitable donations.</string> </resources> Loading
feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionListPreview.kt 0 → 100644 +35 −0 Original line number Diff line number Diff line package app.k9mail.feature.funding.googleplay.ui.contribution import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme @Composable @Preview(showBackground = true) internal fun ContributionListPreview() { PreviewWithTheme { ContributionList( contributions = FakeData.recurringContributions, isRecurringContributionSelected = true, selectedItem = FakeData.recurringContributions.first(), onOneTimeContributionTypeClick = {}, onRecurringContributionTypeClick = {}, onItemClick = {}, ) } } @Composable @Preview(showBackground = true) internal fun ContributionListRecurringPreview() { PreviewWithTheme { ContributionList( contributions = FakeData.oneTimeContributions, selectedItem = FakeData.oneTimeContributions.last(), isRecurringContributionSelected = false, onOneTimeContributionTypeClick = {}, onRecurringContributionTypeClick = {}, onItemClick = {}, ) } }
feature/funding/googleplay/src/debug/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/FakeData.kt 0 → 100644 +74 −0 Original line number Diff line number Diff line package app.k9mail.feature.funding.googleplay.ui.contribution import app.k9mail.feature.funding.googleplay.domain.entity.OneTimeContribution import app.k9mail.feature.funding.googleplay.domain.entity.RecurringContribution import kotlinx.collections.immutable.persistentListOf internal object FakeData { val recurringContributions = persistentListOf( RecurringContribution( id = "monthly_subscription_250", title = "Monthly subscription: $250", price = "$250", ), RecurringContribution( id = "monthly_subscription_140", title = "Monthly subscription: $140", price = "$140", ), RecurringContribution( id = "monthly_subscription_80", title = "Monthly subscription: $80", price = "$80", ), RecurringContribution( id = "monthly_subscription_50", title = "Monthly subscription: $50", price = "$50", ), RecurringContribution( id = "monthly_subscription_25", title = "Monthly subscription: $25", price = "$25", ), RecurringContribution( id = "monthly_subscription_15", title = "Monthly subscription: $15", price = "$15", ), ) val oneTimeContributions = persistentListOf( OneTimeContribution( id = "one_time_payment_250", title = "One time payment: $250", price = "$250", ), OneTimeContribution( id = "one_time_payment_140", title = "One time payment: $140", price = "$140", ), OneTimeContribution( id = "one_time_payment_80", title = "One time payment: $80", price = "$80", ), OneTimeContribution( id = "one_time_payment_50", title = "One time payment: $50", price = "$50", ), OneTimeContribution( id = "one_time_payment_25", title = "One time payment: $25", price = "$25", ), OneTimeContribution( id = "one_time_payment_15", title = "One time payment: $15", price = "$15", ), ) }
feature/funding/googleplay/src/main/kotlin/app/k9mail/feature/funding/googleplay/ui/contribution/ContributionList.kt 0 → 100644 +85 −0 Original line number Diff line number Diff line package app.k9mail.feature.funding.googleplay.ui.contribution import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelLarge import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.feature.funding.googleplay.R import app.k9mail.feature.funding.googleplay.domain.entity.Contribution import kotlinx.collections.immutable.ImmutableList @OptIn(ExperimentalLayoutApi::class) @Composable internal fun ContributionList( contributions: ImmutableList<Contribution>, selectedItem: Contribution?, isRecurringContributionSelected: Boolean, onOneTimeContributionTypeClick: () -> Unit, onRecurringContributionTypeClick: () -> Unit, onItemClick: (Contribution) -> Unit, modifier: Modifier = Modifier, ) { Surface( color = MainTheme.colors.surfaceContainerLowest, shape = MainTheme.shapes.small, modifier = modifier.fillMaxWidth(), ) { Column( modifier = Modifier .padding(MainTheme.spacings.double), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { TextLabelLarge( text = stringResource(R.string.funding_googleplay_contribution_list_title), ) Row( modifier = Modifier .fillMaxWidth() .padding(top = MainTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { ContributionListItem( text = stringResource(R.string.funding_googleplay_contribution_list_type_one_time), onClick = onOneTimeContributionTypeClick, isSelected = !isRecurringContributionSelected, modifier = Modifier.weight(1f), ) ContributionListItem( text = stringResource(R.string.funding_googleplay_contribution_list_type_recurring), onClick = onRecurringContributionTypeClick, isSelected = isRecurringContributionSelected, modifier = Modifier.weight(1f), ) } FlowRow( horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), ) { contributions.forEach { ContributionListItem( text = it.price, onClick = { onItemClick(it) }, isSelected = it == selectedItem, modifier = Modifier.weight(1f), ) } } TextBodyMedium( text = stringResource(R.string.funding_googleplay_contribution_list_disclaimer), modifier = Modifier.padding(top = MainTheme.spacings.default), ) } } }
feature/funding/googleplay/src/main/res/values/strings.xml 0 → 100644 +7 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <resources> <string name="funding_googleplay_contribution_list_title">Secure donation</string> <string name="funding_googleplay_contribution_list_type_one_time">Give once</string> <string name="funding_googleplay_contribution_list_type_recurring">Monthly</string> <string name="funding_googleplay_contribution_list_disclaimer">Contributions are not tax-deductible as charitable donations.</string> </resources>