Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit d4a528fd authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé
Browse files

Add ContributionList

parent 42ee9f1d
Loading
Loading
Loading
Loading
+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 = {},
        )
    }
}
+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",
        ),
    )
}
+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),
            )
        }
    }
}
+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>