From 46f89e7ff80bb5028bb2cfd5c3960553e5236cbb Mon Sep 17 00:00:00 2001 From: Alexandre G Pereira Date: Tue, 20 Aug 2024 14:03:15 -0300 Subject: [PATCH] Add ko-fi and pix key to donate screen --- feature/settings/compose/build.gradle.kts | 7 + .../drawable/ic-ko-fi-logo.png | Bin 0 -> 35135 bytes .../hunter/settings/SettingsAnalytics.kt | 12 ++ .../hunter/settings/SettingsBottomSheets.kt | 5 +- .../hunter/settings/SettingsStateHolder.kt | 11 ++ .../hunter/settings/SettingsStrings.kt | 30 +-- .../hunter/settings/SettingsViewState.kt | 4 +- .../hunter/settings/ui/DonateScreen.kt | 172 ++++++++++++++---- .../hunter/ui/compose/BottomSheet.kt | 1 + 9 files changed, 195 insertions(+), 47 deletions(-) create mode 100644 feature/settings/compose/src/commonMain/composeResources/drawable/ic-ko-fi-logo.png diff --git a/feature/settings/compose/build.gradle.kts b/feature/settings/compose/build.gradle.kts index 9857bd0c..1e1f41c4 100644 --- a/feature/settings/compose/build.gradle.kts +++ b/feature/settings/compose/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("com.android.library") kotlin("multiplatform") + alias(libs.plugins.compose) alias(libs.plugins.compose.compiler) } @@ -33,3 +34,9 @@ androidLibrary { composeCompiler { enableStrongSkippingMode = true } + +compose.resources { + publicResClass = false + packageOfResClass = "br.alexandregpereira.hunter.settings.ui.resources" + generateResClass = always +} diff --git a/feature/settings/compose/src/commonMain/composeResources/drawable/ic-ko-fi-logo.png b/feature/settings/compose/src/commonMain/composeResources/drawable/ic-ko-fi-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c943497ddba6dbf767beab7663165b6b1ef286f1 GIT binary patch literal 35135 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 AVgLXD literal 0 HcmV?d00001 diff --git a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsAnalytics.kt b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsAnalytics.kt index 2ef7971a..705ac75a 100644 --- a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsAnalytics.kt +++ b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsAnalytics.kt @@ -101,4 +101,16 @@ internal class SettingsAnalytics( eventName = "Donate - pix code copy click", ) } + + fun trackBuyMeCoffeeClick() { + analytics.track( + eventName = "Donate - buy me coffee click", + ) + } + + fun trackPixKeyCopyClick() { + analytics.track( + eventName = "Donate - pix key copy click", + ) + } } \ No newline at end of file diff --git a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsBottomSheets.kt b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsBottomSheets.kt index 1477b393..85537fc1 100644 --- a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsBottomSheets.kt +++ b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsBottomSheets.kt @@ -50,7 +50,10 @@ fun SettingsBottomSheets() { DonateScreen( isOpen = state.donateIsOpen, state = state.donateState, + strings = state.strings.donateStrings, onClose = stateHolder::onDonateCloseClick, - onPixCodeCopy = stateHolder::onPixCodeCopyClick + onPixCodeCopy = stateHolder::onPixCodeCopyClick, + onPixKeyCopy = stateHolder::onPixKeyCopyClick, + onBuyMeCoffeeClick = stateHolder::onBuyMeCoffeeClick, ) } diff --git a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStateHolder.kt b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStateHolder.kt index 770f7395..5820d590 100644 --- a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStateHolder.kt +++ b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStateHolder.kt @@ -205,6 +205,17 @@ internal class SettingsStateHolder( analytics.trackPixCodeCopyClick() } + fun onPixKeyCopyClick() { + analytics.trackPixKeyCopyClick() + } + + fun onBuyMeCoffeeClick() { + analytics.trackBuyMeCoffeeClick() + SettingsViewAction.GoToExternalUrl( + url = "https://ko-fi.com/monstercompendium" + ).also { sendAction(it) } + } + private fun load() { getMonsterImageJsonUrl() .zip(getAlternativeSourceJsonUrl()) { imageBaseUrl, alternativeSourceBaseUrl -> diff --git a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStrings.kt b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStrings.kt index 577a148b..99be5dff 100644 --- a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStrings.kt +++ b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsStrings.kt @@ -28,10 +28,12 @@ interface DonateStrings { val buyMeACoffee: String val donateDescription: String val fromBrazil: String + val fromBrazilDescription: String val pixCopyAndPaste: String - val copyPixCode: String - val fromOtherCountries: String - val fromOtherCountriesDescription: String + val pixKey: String + val supportMe: String + val donateAppName: String + val copy: String } internal data class SettingsEnStrings( @@ -56,11 +58,13 @@ internal data class SettingsEnStrings( override val donateStrings: DonateStrings = object : DonateStrings { override val buyMeACoffee: String = "Buy me a Coffee" override val donateDescription: String = "If you are enjoying this app and want to help me maintain it, please consider buying me a coffee." - override val fromBrazil: String = "From Brazil" - override val pixCopyAndPaste: String = "Pix Copia e Cola" - override val copyPixCode: String = "Copy Pix Code" - override val fromOtherCountries: String = "From Other Countries" - override val fromOtherCountriesDescription: String = "Soon" + override val fromBrazil: String = "Hey Brazil" + override val fromBrazilDescription: String = "If you are from Brazil, you can also support me by using Pix." + override val pixCopyAndPaste: String = "Pix Copy and Paste" + override val pixKey: String = "Pix Key" + override val supportMe: String = "Support me" + override val donateAppName: String = "on Ko-fi" + override val copy: String = "Copy" } ) : SettingsStrings @@ -86,11 +90,13 @@ internal data class SettingsPtStrings( override val donateStrings: DonateStrings = object : DonateStrings { override val buyMeACoffee: String = "Compre-me um Café" override val donateDescription: String = "Se você está gostando deste aplicativo e quer me ajudar a mantê-lo, considere me comprar um café." - override val fromBrazil: String = "Do Brasil" + override val fromBrazil: String = "E aí Brasil" + override val fromBrazilDescription: String = "Se você é do Brasil, também pode me apoiar usando Pix." override val pixCopyAndPaste: String = "Pix Copia e Cola" - override val copyPixCode: String = "Copiar código Pix" - override val fromOtherCountries: String = "De Outros Países" - override val fromOtherCountriesDescription: String = "Em breve" + override val pixKey: String = "Chave Pix" + override val supportMe: String = "Me apoie" + override val donateAppName: String = "no Ko-fi" + override val copy: String = "Copiar" } ) : SettingsStrings diff --git a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsViewState.kt b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsViewState.kt index 15ecda73..b2dddb9c 100644 --- a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsViewState.kt +++ b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/SettingsViewState.kt @@ -29,13 +29,13 @@ internal data class SettingsViewState( val appearanceState: AppearanceSettingsState = AppearanceSettingsState(), val strings: SettingsStrings = SettingsEnStrings(), val donateIsOpen: Boolean = false, - val donateState: DonateState = DonateState(strings = strings.donateStrings), + val donateState: DonateState = DonateState(), ) internal data class DonateState( val coverImageUrl: String = "https://raw.githubusercontent.com/alexandregpereira/Monster-Compendium/main/content/media/buy-me-coffee-cover.png", val pixCode: String = "00020126580014BR.GOV.BCB.PIX01365bc29fc7-557c-4935-bdad-1d1f53dd29e65204000053039865802BR5923Alexandre Gomes Pereira6009SAO PAULO62140510FdKlqycExz6304BCEF", - val strings: DonateStrings, + val pixKey: String = "5bc29fc7-557c-4935-bdad-1d1f53dd29e6", ) internal data class SettingsState( diff --git a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/ui/DonateScreen.kt b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/ui/DonateScreen.kt index 66d01d8b..5cdcfad9 100644 --- a/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/ui/DonateScreen.kt +++ b/feature/settings/compose/src/commonMain/kotlin/br/alexandregpereira/hunter/settings/ui/DonateScreen.kt @@ -1,96 +1,204 @@ package br.alexandregpereira.hunter.settings.ui +import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import br.alexandregpereira.hunter.settings.DonateState -import br.alexandregpereira.hunter.ui.compose.AppButton +import br.alexandregpereira.hunter.settings.DonateStrings +import br.alexandregpereira.hunter.settings.ui.resources.Res +import br.alexandregpereira.hunter.settings.ui.resources.ic_ko_fi_logo import br.alexandregpereira.hunter.ui.compose.AppImageContentScale import br.alexandregpereira.hunter.ui.compose.AppTextField import br.alexandregpereira.hunter.ui.compose.BottomSheet import br.alexandregpereira.hunter.ui.compose.CoilImage import br.alexandregpereira.hunter.ui.compose.SectionTitle +import br.alexandregpereira.hunter.ui.compose.animatePressed +import org.jetbrains.compose.resources.painterResource @Composable internal fun DonateScreen( isOpen: Boolean, state: DonateState, + strings: DonateStrings, onClose: () -> Unit, - onPixCodeCopy: () -> Unit + onPixCodeCopy: () -> Unit, + onPixKeyCopy: () -> Unit, + onBuyMeCoffeeClick: () -> Unit, ) = BottomSheet( opened = isOpen, topSpaceHeight = 0.dp, onClose = onClose, ) { - val strings = state.strings Column { CoilImage( imageUrl = state.coverImageUrl, modifier = Modifier .fillMaxWidth() - .aspectRatio(16f / 9f) - .background(color = MaterialTheme.colors.background), + .aspectRatio(16f / 9f), contentDescription = "", contentScale = AppImageContentScale.Fit ) - Column(Modifier.padding(horizontal = 16.dp).padding(top = 8.dp, bottom = 16.dp)) { - SectionTitle(strings.buyMeACoffee, isHeader = true) + Column(Modifier.padding(horizontal = 12.dp).padding(top = 8.dp, bottom = 16.dp)) { + SectionTitle(strings.buyMeACoffee, isHeader = false) Text( text = strings.donateDescription, fontWeight = FontWeight.Normal, - fontSize = 18.sp, + fontSize = 16.sp, modifier = Modifier.padding(top = 8.dp) ) - SectionTitle( - title = strings.fromBrazil, - isHeader = false, + BuyMeCoffeeButton( + text = strings.donateAppName, + label = strings.supportMe, + onClick = onBuyMeCoffeeClick, + modifier = Modifier.padding(top = 16.dp) + ) + + Text( + text = strings.fromBrazil, + fontWeight = FontWeight.Bold, + fontSize = 18.sp, modifier = Modifier.padding(top = 24.dp) ) - AppTextField( - text = state.pixCode, - trailingIcon = null, - label = strings.pixCopyAndPaste, - enabled = false, - modifier = Modifier.fillMaxWidth().padding(top = 16.dp) + Text( + text = strings.fromBrazilDescription, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + modifier = Modifier.padding(top = 8.dp) ) val clipBoardManager = LocalClipboardManager.current - AppButton( - text = strings.copyPixCode, + CopyTextField( + text = state.pixKey, + label = strings.pixKey, + buttonText = strings.copy, + onClick = { + onPixKeyCopy() + clipBoardManager.setText(AnnotatedString(state.pixKey)) + }, + modifier = Modifier.fillMaxWidth().padding(top = 16.dp) + ) + + CopyTextField( + text = state.pixCode, + label = strings.pixCopyAndPaste, + buttonText = strings.copy, onClick = { onPixCodeCopy() clipBoardManager.setText(AnnotatedString(state.pixCode)) }, - modifier = Modifier.padding(top = 16.dp) + modifier = Modifier.fillMaxWidth().padding(top = 16.dp) ) + } + } +} - SectionTitle( - title = strings.fromOtherCountries, - isHeader = false, - modifier = Modifier.padding(top = 24.dp) - ) +@Composable +private fun CopyTextField( + label: String, + text: String, + buttonText: String, + modifier: Modifier = Modifier, + onClick: () -> Unit = {}, +) = Row( + modifier = modifier, + verticalAlignment = Alignment.Bottom +) { + AppTextField( + text = text, + trailingIcon = null, + label = label, + enabled = false, + modifier = Modifier.weight(1f) + ) + Spacer(modifier = Modifier.width(8.dp)) - Text( - text = strings.fromOtherCountriesDescription, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - modifier = Modifier.padding(top = 8.dp) - ) - } + val buttonModifier = Modifier + .height(56.dp) + .animatePressed( + onClick = onClick, + ) + .clip(RoundedCornerShape(20)) + .background(MaterialTheme.colors.primary) + Box( + modifier = buttonModifier, + contentAlignment = Alignment.Center, + ) { + Text( + text = buttonText, + fontWeight = FontWeight.Normal, + color = MaterialTheme.colors.onPrimary, + fontSize = 16.sp, + modifier = Modifier.padding(horizontal = 16.dp) + ) + } +} + +@Composable +private fun BuyMeCoffeeButton( + text: String, + label: String, + onClick: () -> Unit, + modifier: Modifier = Modifier +) = Row( + modifier = modifier + .height(54.dp) + .animatePressed( + onClick = onClick, + ) + .clip(RoundedCornerShape(12.dp)) + .background(MaterialTheme.colors.primary), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center +) { + val contentHorizontalPadding = 16.dp + val contentVerticalPadding = 8.dp + Spacer(modifier = Modifier.width(contentHorizontalPadding)) + Image( + painter = painterResource(Res.drawable.ic_ko_fi_logo), + contentDescription = null, + modifier = Modifier.padding(vertical = contentVerticalPadding) + ) + Spacer(modifier = Modifier.width(8.dp)) + Column( + modifier = Modifier.padding(vertical = contentVerticalPadding) + ) { + Text( + text = label, + fontWeight = FontWeight.Light, + fontSize = 12.sp, + color = MaterialTheme.colors.onPrimary, + ) + Text( + text = text, + fontWeight = FontWeight.Bold, + fontSize = 22.sp, + color = MaterialTheme.colors.onPrimary, + ) } + Spacer(modifier = Modifier.width(contentHorizontalPadding)) } diff --git a/ui/core/src/commonMain/kotlin/br/alexandregpereira/hunter/ui/compose/BottomSheet.kt b/ui/core/src/commonMain/kotlin/br/alexandregpereira/hunter/ui/compose/BottomSheet.kt index 67c6b405..d8abaeb3 100644 --- a/ui/core/src/commonMain/kotlin/br/alexandregpereira/hunter/ui/compose/BottomSheet.kt +++ b/ui/core/src/commonMain/kotlin/br/alexandregpereira/hunter/ui/compose/BottomSheet.kt @@ -100,6 +100,7 @@ fun BottomSheet( ).fillMaxWidth( fraction = widthFraction.takeIf { screenSize.isLandscape } ?: 1f ).noIndicationClick(), + level = 0, ) { Column( modifier = modifier.padding(