From 8c6dce6f8ff142494e4fbd5a9468e9f033bd66d4 Mon Sep 17 00:00:00 2001 From: Konstantin Ivanov <54908981+konstantiniiv@users.noreply.github.com> Date: Fri, 8 Mar 2024 10:39:18 +0100 Subject: [PATCH] DROID-2274 Payments | Design | Layout for screens with membership details (#992) --- core-ui/src/main/res/drawable/ic_check_16.xml | 11 + .../{logo_builder.xml => logo_builder_64.xml} | 0 .../src/main/res/drawable/logo_builder_96.xml | 59 +++++ ..._co_creator.xml => logo_co_creator_64.xml} | 0 .../main/res/drawable/logo_co_creator_96.xml | 131 ++++++++++ .../{logo_custom.xml => logo_custom_64.xml} | 0 ...logo_explorer.xml => logo_explorer_64.xml} | 0 .../main/res/drawable/logo_explorer_96.xml | 52 ++++ localization/src/main/res/values/strings.xml | 36 +++ .../java/com/anytypeio/anytype/models/Tier.kt | 30 +++ .../com/anytypeio/anytype/screens/InfoCard.kt | 3 - .../anytype/screens/MainPaymensScreen.kt | 28 ++- .../anytype/screens/MembershipLevel.kt | 226 ++++++++++++++++++ .../anytype/screens/{Tier.kt => TierView.kt} | 108 ++++----- .../anytype/viewmodel/PaymentsState.kt | 28 +-- .../anytype/viewmodel/PaymentsViewModel.kt | 9 +- 16 files changed, 624 insertions(+), 97 deletions(-) create mode 100644 core-ui/src/main/res/drawable/ic_check_16.xml rename core-ui/src/main/res/drawable/{logo_builder.xml => logo_builder_64.xml} (100%) create mode 100644 core-ui/src/main/res/drawable/logo_builder_96.xml rename core-ui/src/main/res/drawable/{logo_co_creator.xml => logo_co_creator_64.xml} (100%) create mode 100644 core-ui/src/main/res/drawable/logo_co_creator_96.xml rename core-ui/src/main/res/drawable/{logo_custom.xml => logo_custom_64.xml} (100%) rename core-ui/src/main/res/drawable/{logo_explorer.xml => logo_explorer_64.xml} (100%) create mode 100644 core-ui/src/main/res/drawable/logo_explorer_96.xml create mode 100644 payments/src/main/java/com/anytypeio/anytype/models/Tier.kt create mode 100644 payments/src/main/java/com/anytypeio/anytype/screens/MembershipLevel.kt rename payments/src/main/java/com/anytypeio/anytype/screens/{Tier.kt => TierView.kt} (64%) diff --git a/core-ui/src/main/res/drawable/ic_check_16.xml b/core-ui/src/main/res/drawable/ic_check_16.xml new file mode 100644 index 0000000000..134623596f --- /dev/null +++ b/core-ui/src/main/res/drawable/ic_check_16.xml @@ -0,0 +1,11 @@ + + + diff --git a/core-ui/src/main/res/drawable/logo_builder.xml b/core-ui/src/main/res/drawable/logo_builder_64.xml similarity index 100% rename from core-ui/src/main/res/drawable/logo_builder.xml rename to core-ui/src/main/res/drawable/logo_builder_64.xml diff --git a/core-ui/src/main/res/drawable/logo_builder_96.xml b/core-ui/src/main/res/drawable/logo_builder_96.xml new file mode 100644 index 0000000000..1d4a9e788e --- /dev/null +++ b/core-ui/src/main/res/drawable/logo_builder_96.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-ui/src/main/res/drawable/logo_co_creator.xml b/core-ui/src/main/res/drawable/logo_co_creator_64.xml similarity index 100% rename from core-ui/src/main/res/drawable/logo_co_creator.xml rename to core-ui/src/main/res/drawable/logo_co_creator_64.xml diff --git a/core-ui/src/main/res/drawable/logo_co_creator_96.xml b/core-ui/src/main/res/drawable/logo_co_creator_96.xml new file mode 100644 index 0000000000..b346a14829 --- /dev/null +++ b/core-ui/src/main/res/drawable/logo_co_creator_96.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-ui/src/main/res/drawable/logo_custom.xml b/core-ui/src/main/res/drawable/logo_custom_64.xml similarity index 100% rename from core-ui/src/main/res/drawable/logo_custom.xml rename to core-ui/src/main/res/drawable/logo_custom_64.xml diff --git a/core-ui/src/main/res/drawable/logo_explorer.xml b/core-ui/src/main/res/drawable/logo_explorer_64.xml similarity index 100% rename from core-ui/src/main/res/drawable/logo_explorer.xml rename to core-ui/src/main/res/drawable/logo_explorer_64.xml diff --git a/core-ui/src/main/res/drawable/logo_explorer_96.xml b/core-ui/src/main/res/drawable/logo_explorer_96.xml new file mode 100644 index 0000000000..9458d138b1 --- /dev/null +++ b/core-ui/src/main/res/drawable/logo_explorer_96.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/localization/src/main/res/values/strings.xml b/localization/src/main/res/values/strings.xml index 58858add5f..9aa71caa7d 100644 --- a/localization/src/main/res/values/strings.xml +++ b/localization/src/main/res/values/strings.xml @@ -1368,4 +1368,40 @@ Would you like to use Anytype for business, education, etc.? Please let us know here. + + Pick your unique name + This name acts like a personal domain, making it easier for others to find you + Myself + .any + This name is already taken! + This name is up for grabs! + + Dive into the network and enjoy the thrill of one-on-one collaboration + + 1 GB of network space + 10 one-to-one spaces + Up to 10 shared spaces in read-only mode + + + Unlock the magic of multi-party collaboration and enjoy top-notch support + + Unique name (from 7 characters) + 128 GB of network space + 10 Guest collaborator seats + Priority support + + + Support our adventure and unlock exclusive access and perks + + Unique name (from 5 characters) + 256 GB of network space + 25 Guest collaborator seats + Chat with the team + Unique collectible + + + Pay by Card + Submit + What’s included + \ No newline at end of file diff --git a/payments/src/main/java/com/anytypeio/anytype/models/Tier.kt b/payments/src/main/java/com/anytypeio/anytype/models/Tier.kt new file mode 100644 index 0000000000..33af634a60 --- /dev/null +++ b/payments/src/main/java/com/anytypeio/anytype/models/Tier.kt @@ -0,0 +1,30 @@ +package com.anytypeio.anytype.models + +sealed class Tier { + abstract val id: String + abstract val isCurrent: Boolean + + data class Explorer( + override val id: String, + override val isCurrent: Boolean, + val price: String = "" + ) : Tier() + + data class Builder( + override val id: String, + override val isCurrent: Boolean, + val price: String = "" + ) : Tier() + + data class CoCreator( + override val id: String, + override val isCurrent: Boolean, + val price: String = "" + ) : Tier() + + data class Custom( + override val id: String, + override val isCurrent: Boolean, + val price: String = "" + ) : Tier() +} \ No newline at end of file diff --git a/payments/src/main/java/com/anytypeio/anytype/screens/InfoCard.kt b/payments/src/main/java/com/anytypeio/anytype/screens/InfoCard.kt index 3749b65dda..4a028edc25 100644 --- a/payments/src/main/java/com/anytypeio/anytype/screens/InfoCard.kt +++ b/payments/src/main/java/com/anytypeio/anytype/screens/InfoCard.kt @@ -16,7 +16,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -33,8 +32,6 @@ fun InfoCard( title: String, subtitle: String, ) { - val configuration = LocalConfiguration.current - Column( modifier = Modifier .height(284.dp) diff --git a/payments/src/main/java/com/anytypeio/anytype/screens/MainPaymensScreen.kt b/payments/src/main/java/com/anytypeio/anytype/screens/MainPaymensScreen.kt index 555aa1396f..76de8ddfd9 100644 --- a/payments/src/main/java/com/anytypeio/anytype/screens/MainPaymensScreen.kt +++ b/payments/src/main/java/com/anytypeio/anytype/screens/MainPaymensScreen.kt @@ -53,8 +53,8 @@ import com.anytypeio.anytype.core_ui.views.BodyRegular import com.anytypeio.anytype.core_ui.views.Caption1Regular import com.anytypeio.anytype.core_ui.views.Relations2 import com.anytypeio.anytype.core_ui.views.fontRiccioneRegular +import com.anytypeio.anytype.models.Tier import com.anytypeio.anytype.viewmodel.PaymentsState -import com.anytypeio.anytype.viewmodel.TierState @Composable fun MainPaymentsScreen(state: PaymentsState) { @@ -78,7 +78,7 @@ fun MainPaymentsScreen(state: PaymentsState) { Header(state = state) Spacer(modifier = Modifier.height(32.dp)) InfoCards() - Tiers(state = state) + TiersList(state = state) Spacer(modifier = Modifier.height(32.dp)) LinkButton(text = stringResource(id = R.string.payments_member_link), action = {}) Divider() @@ -90,6 +90,7 @@ fun MainPaymentsScreen(state: PaymentsState) { } } } + MembershipLevels(tier = Tier.Explorer(id = "888", isCurrent = true)) } @Composable @@ -140,7 +141,7 @@ private fun Header(state: PaymentsState.Success) { @OptIn(ExperimentalFoundationApi::class) @Composable -fun Tiers(state: PaymentsState.Success) { +fun TiersList(state: PaymentsState.Success) { val itemsScroll = rememberLazyListState(initialFirstVisibleItemIndex = 1) LazyRow( state = itemsScroll, @@ -151,8 +152,17 @@ fun Tiers(state: PaymentsState.Success) { contentPadding = PaddingValues(start = 20.dp, end = 20.dp), flingBehavior = rememberSnapFlingBehavior(lazyListState = itemsScroll) ) { - itemsIndexed(state.tiers) { index, tier -> - TierByType(tier = tier) + itemsIndexed(state.tiers) { _, tier -> + val resources = mapTierToResources(tier) + TierView( + title = resources.title, + subTitle = resources.subtitle, + colorGradient = resources.colorGradient, + radialGradient = resources.radialGradient, + icon = resources.smallIcon, + buttonText = stringResource(id = R.string.payments_button_learn), + onClick = { /*TODO*/ } + ) } } } @@ -257,10 +267,10 @@ fun BottomText() { @Composable fun MainPaymentsScreenPreview() { val tiers = listOf( - TierState.Explorer("999", isCurrent = true), - TierState.Builder("999", isCurrent = false), - TierState.CoCreator("999", isCurrent = false), - TierState.Custom("999", isCurrent = false) + Tier.Explorer("999", isCurrent = true), + Tier.Builder("999", isCurrent = false), + Tier.CoCreator("999", isCurrent = false), + Tier.Custom("999", isCurrent = false) ) MainPaymentsScreen(PaymentsState.Success(tiers)) } diff --git a/payments/src/main/java/com/anytypeio/anytype/screens/MembershipLevel.kt b/payments/src/main/java/com/anytypeio/anytype/screens/MembershipLevel.kt new file mode 100644 index 0000000000..9fa6707a48 --- /dev/null +++ b/payments/src/main/java/com/anytypeio/anytype/screens/MembershipLevel.kt @@ -0,0 +1,226 @@ +package com.anytypeio.anytype.screens + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.FractionalThreshold +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.material.rememberSwipeableState +import androidx.compose.material.swipeable +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import com.anytypeio.anytype.core_ui.foundation.noRippleThrottledClickable +import com.anytypeio.anytype.core_ui.views.BodyBold +import com.anytypeio.anytype.core_ui.views.BodyCallout +import com.anytypeio.anytype.core_ui.views.BodyRegular +import com.anytypeio.anytype.core_ui.views.Caption1Regular +import com.anytypeio.anytype.core_ui.views.HeadlineTitle +import com.anytypeio.anytype.core_ui.widgets.DragStates +import com.anytypeio.anytype.models.Tier +import com.anytypeio.anytype.peyments.R +import kotlin.math.roundToInt + +@OptIn(ExperimentalMaterialApi::class) +@Composable +fun MembershipLevels(tier: Tier) { + val focusRequester = remember { FocusRequester() } + val focusManager = LocalFocusManager.current + + Box( + modifier = Modifier + .fillMaxSize() + .background(color = colorResource(id = R.color.shape_tertiary)), + contentAlignment = Alignment.BottomStart, + ) { + + val swipeableState = rememberSwipeableState(DragStates.VISIBLE) + val keyboardController = LocalSoftwareKeyboardController.current + + if (swipeableState.isAnimationRunning && swipeableState.targetValue == DragStates.DISMISSED) { + DisposableEffect(Unit) { + onDispose { + keyboardController?.hide() + focusManager.clearFocus() + } + } + } + + val sizePx = + with(LocalDensity.current) { LocalConfiguration.current.screenHeightDp.dp.toPx() } + + val tierResources = mapTierToResources(tier) + + AnimatedVisibility( + visible = true, + enter = slideInVertically { it }, + exit = slideOutVertically { it }, + modifier = Modifier + .swipeable(state = swipeableState, + orientation = Orientation.Vertical, + anchors = mapOf( + 0f to DragStates.VISIBLE, sizePx to DragStates.DISMISSED + ), + thresholds = { _, _ -> FractionalThreshold(0.3f) }) + .offset { IntOffset(0, swipeableState.offset.value.roundToInt()) } + ) { + val brush = Brush.verticalGradient( + listOf( + tierResources.colorGradient, + Color.Transparent + ) + ) + + Column { + Box( + modifier = Modifier + .fillMaxWidth() + .height(132.dp) + .background(brush = brush, shape = RoundedCornerShape(16.dp)), + contentAlignment = androidx.compose.ui.Alignment.BottomStart + ) { + Icon( + modifier = Modifier + .padding(start = 16.dp), + painter = painterResource(id = tierResources.mediumIcon!!), + contentDescription = "logo", + tint = tierResources.radialGradient + ) + } + Spacer(modifier = Modifier.height(14.dp)) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 20.dp), + text = tierResources.title, + color = colorResource(id = R.color.text_primary), + style = HeadlineTitle, + textAlign = TextAlign.Start + ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(start = 20.dp, end = 20.dp, top = 6.dp), + text = tierResources.subtitle, + color = colorResource(id = R.color.text_primary), + style = BodyCallout, + textAlign = TextAlign.Start + ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(start = 20.dp, end = 20.dp, top = 22.dp), + text = stringResource(id = R.string.payments_details_whats_included), + color = colorResource(id = R.color.text_secondary), + style = BodyCallout, + textAlign = TextAlign.Start + ) + Spacer(modifier = Modifier.height(6.dp)) + tierResources.benefits.forEach { benefit -> + Benefit(benefit = benefit) + Spacer(modifier = Modifier.height(6.dp)) + } + Spacer(modifier = Modifier.height(30.dp)) + NamePicker() + } + } + } +} + +@Composable +fun NamePicker() { + Column( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight() + .background( + shape = RoundedCornerShape(8.dp), + color = colorResource(id = R.color.background_primary) + ) + ) { + Text( + modifier = Modifier + .fillMaxWidth() + .padding(start = 20.dp, end = 20.dp, top = 26.dp), + text = stringResource(id = R.string.payments_details_name_title), + color = colorResource(id = R.color.text_primary), + style = BodyBold, + textAlign = TextAlign.Start + ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(start = 20.dp, end = 20.dp, top = 6.dp), + text = stringResource(id = R.string.payments_details_name_subtitle), + color = colorResource(id = R.color.text_primary), + style = BodyCallout, + textAlign = TextAlign.Start + ) + } +} + +@Composable +fun Benefit(benefit: String) { + Box( + modifier = Modifier + .wrapContentHeight() + .fillMaxWidth() + .padding(horizontal = 20.dp) + ) { + Image( + modifier = Modifier + .wrapContentSize() + .align(Alignment.CenterStart), + painter = painterResource(id = R.drawable.ic_check_16), + contentDescription = "text check icon" + ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(start = 22.dp) + .align(Alignment.CenterStart), + text = benefit, + style = BodyCallout, + color = colorResource(id = R.color.text_primary) + ) + } +} + + +@Preview() +@Composable +fun MyLevel() { + MembershipLevels(tier = Tier.Explorer("121", true)) +} \ No newline at end of file diff --git a/payments/src/main/java/com/anytypeio/anytype/screens/Tier.kt b/payments/src/main/java/com/anytypeio/anytype/screens/TierView.kt similarity index 64% rename from payments/src/main/java/com/anytypeio/anytype/screens/Tier.kt rename to payments/src/main/java/com/anytypeio/anytype/screens/TierView.kt index 76d783621b..860e6ba6fc 100644 --- a/payments/src/main/java/com/anytypeio/anytype/screens/Tier.kt +++ b/payments/src/main/java/com/anytypeio/anytype/screens/TierView.kt @@ -18,6 +18,7 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight @@ -32,13 +33,12 @@ import com.anytypeio.anytype.core_ui.views.ButtonPrimary import com.anytypeio.anytype.core_ui.views.ButtonSize import com.anytypeio.anytype.core_ui.views.Caption1Regular import com.anytypeio.anytype.core_ui.views.fontInterSemibold -import com.anytypeio.anytype.viewmodel.TierState +import com.anytypeio.anytype.models.Tier @Composable -private fun Tier( +fun TierView( title: String, subTitle: String, - price: String, colorGradient: Color, radialGradient: Color, icon: Int, @@ -120,72 +120,58 @@ fun PriceOrOption() { } @Composable -fun TierByType(tier: TierState) { - when (tier) { - is TierState.Builder -> { - Tier( - title = stringResource(id = R.string.payments_tier_builder), - subTitle = stringResource(id = R.string.payments_tier_builder_description), - price = tier.price, - colorGradient = Color(0xFFE4E7FF), - radialGradient = Color(0xFFA5AEFF), - icon = R.drawable.logo_builder, - buttonText = stringResource(id = R.string.payments_button_learn), - onClick = { /*TODO*/ } - ) - } +fun mapTierToResources(tier: Tier): TierResources { + return when (tier) { + is Tier.Builder -> TierResources( + title = stringResource(id = R.string.payments_tier_builder), + subtitle = stringResource(id = R.string.payments_tier_builder_description), + mediumIcon = R.drawable.logo_builder_96, + smallIcon = R.drawable.logo_builder_64, + colorGradient = Color(0xFFE4E7FF), + radialGradient = Color(0xFFA5AEFF), + benefits = stringArrayResource(id = R.array.payments_benefits_builder).toList() + ) - is TierState.CoCreator -> { - Tier( - title = stringResource(id = R.string.payments_tier_cocreator), - subTitle = stringResource(id = R.string.payments_tier_cocreator_description), - price = tier.price, - colorGradient = Color(0xFFFBEAEA), - radialGradient = Color(0xFFF05F5F), - icon = R.drawable.logo_co_creator, - buttonText = stringResource(id = R.string.payments_button_learn), - onClick = { /*TODO*/ } - ) - } + is Tier.CoCreator -> TierResources( + title = stringResource(id = R.string.payments_tier_cocreator), + subtitle = stringResource(id = R.string.payments_tier_cocreator_description), + mediumIcon = R.drawable.logo_co_creator_96, + smallIcon = R.drawable.logo_co_creator_64, + colorGradient = Color(0xFFFBEAEA), + radialGradient = Color(0xFFF05F5F), + benefits = stringArrayResource(id = R.array.payments_benefits_cocreator).toList() + ) - is TierState.Custom -> { - Tier( - title = stringResource(id = R.string.payments_tier_custom), - subTitle = stringResource(id = R.string.payments_tier_custom_description), - price = tier.price, - colorGradient = Color(0xFFFBEAFF), - radialGradient = Color(0xFFFE86DE3), - icon = R.drawable.logo_custom, - buttonText = stringResource(id = R.string.payments_button_learn), - onClick = { /*TODO*/ } - ) - } + is Tier.Custom -> TierResources( + title = stringResource(id = R.string.payments_tier_custom), + subtitle = stringResource(id = R.string.payments_tier_custom_description), + smallIcon = R.drawable.logo_custom_64, + colorGradient = Color(0xFFFBEAFF), + radialGradient = Color(0xFFFE86DE3), + benefits = emptyList() + ) - is TierState.Explorer -> { - Tier( - title = stringResource(id = R.string.payments_tier_explorer), - subTitle = stringResource(id = R.string.payments_tier_explorer_description), - price = tier.price, - colorGradient = Color(0xFFCFFAFF), - radialGradient = Color(0xFF24BFD4), - icon = R.drawable.logo_explorer, - buttonText = stringResource(id = R.string.payments_button_learn), - onClick = { /*TODO*/ } - ) - } + is Tier.Explorer -> TierResources( + title = stringResource(id = R.string.payments_tier_explorer), + subtitle = stringResource(id = R.string.payments_tier_explorer_description), + mediumIcon = R.drawable.logo_explorer_96, + smallIcon = R.drawable.logo_explorer_64, + colorGradient = Color(0xFFCFFAFF), + radialGradient = Color(0xFF24BFD4), + benefits = stringArrayResource(id = R.array.payments_benefits_explorer).toList() + ) } } @Preview @Composable fun TierPreview() { - Tier( + TierView( title = "Explorer", subTitle = "Dive into the network and enjoy the thrill of one-on-one collaboration", - price = "9.99", buttonText = "Subscribe", onClick = {}, - icon = R.drawable.logo_co_creator, + icon = R.drawable.logo_co_creator_64, colorGradient = Color(0xFFCFF6CF), radialGradient = Color(0xFF24BFD4) ) @@ -197,4 +183,14 @@ val titleTextStyle = TextStyle( fontSize = 17.sp, lineHeight = 24.sp, letterSpacing = (-0.024).em +) + +data class TierResources( + val title: String, + val subtitle: String, + val mediumIcon: Int? = null, + val smallIcon: Int, + val colorGradient: Color, + val radialGradient: Color, + val benefits: List ) \ No newline at end of file diff --git a/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsState.kt b/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsState.kt index 51c044af56..ec274d5415 100644 --- a/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsState.kt +++ b/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsState.kt @@ -1,30 +1,8 @@ package com.anytypeio.anytype.viewmodel +import com.anytypeio.anytype.models.Tier + sealed class PaymentsState { object Loading : PaymentsState() - data class Success(val tiers: List) : PaymentsState() -} - -sealed class TierState { - abstract val isCurrent: Boolean - - data class Explorer( - val price: String, - override val isCurrent: Boolean - ) : TierState() - - data class Builder( - val price: String, - override val isCurrent: Boolean - ) : TierState() - - data class CoCreator( - val price: String, - override val isCurrent: Boolean - ) : TierState() - - data class Custom( - val price: String, - override val isCurrent: Boolean - ) : TierState() + data class Success(val tiers: List) : PaymentsState() } \ No newline at end of file diff --git a/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsViewModel.kt b/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsViewModel.kt index 0e6f7b190c..f2cbb76581 100644 --- a/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsViewModel.kt +++ b/payments/src/main/java/com/anytypeio/anytype/viewmodel/PaymentsViewModel.kt @@ -2,6 +2,7 @@ package com.anytypeio.anytype.viewmodel import androidx.lifecycle.ViewModel import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.models.Tier import kotlinx.coroutines.flow.MutableStateFlow import timber.log.Timber @@ -15,10 +16,10 @@ class PaymentsViewModel( Timber.d("PaymentsViewModel created") viewState.value = PaymentsState.Success( listOf( - TierState.Explorer("Free", true), - TierState.Builder("$9.99/mo", false), - TierState.CoCreator("$19.99/mo", false), - TierState.Custom("$29.99/mo", false) + Tier.Explorer("Free", true), + Tier.Builder("$9.99/mo", false), + Tier.CoCreator("$19.99/mo", false), + Tier.Custom("$29.99/mo", false) ) ) }