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)
)
)
}