diff --git a/localization/src/main/res/values/strings.xml b/localization/src/main/res/values/strings.xml index ff1f3bc572..07c3aadc45 100644 --- a/localization/src/main/res/values/strings.xml +++ b/localization/src/main/res/values/strings.xml @@ -1537,6 +1537,10 @@ Google subscription Manage payment + + You can manage tier on Desktop platform + You can manage tier on iOS platform + Change e-mail diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/mapping/MembershipExt.kt b/payments/src/main/java/com/anytypeio/anytype/payments/mapping/MembershipExt.kt index 5587fb6616..ff7e540315 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/mapping/MembershipExt.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/mapping/MembershipExt.kt @@ -190,17 +190,14 @@ private fun MembershipTierData.mapActiveTierButtonAndNameStates( id == MembershipConstants.EXPLORER_ID -> { TierButton.ChangeEmail to TierAnyName.Hidden } - paymentMethod == METHOD_NONE || paymentMethod == METHOD_CRYPTO -> { + paymentMethod == METHOD_NONE -> { TierButton.Hidden to TierAnyName.Hidden } - paymentMethod == METHOD_STRIPE && !stripeManageUrl.isNullOrBlank() -> { - TierButton.Manage.External.Enabled(stripeManageUrl) to TierAnyName.Hidden + paymentMethod == METHOD_STRIPE || paymentMethod == METHOD_CRYPTO -> { + TierButton.HiddenWithText.ManageOnDesktop to TierAnyName.Hidden } - paymentMethod == METHOD_INAPP_APPLE && !iosManageUrl.isNullOrBlank() -> { - TierButton.Manage.External.Enabled(iosManageUrl) to TierAnyName.Hidden - } - paymentMethod == METHOD_INAPP_GOOGLE -> { - TierButton.Manage.External.Enabled(androidManageUrl) to TierAnyName.Hidden + paymentMethod == METHOD_INAPP_APPLE -> { + TierButton.HiddenWithText.ManageOnIOS to TierAnyName.Hidden } else -> { TierButton.Hidden to TierAnyName.Hidden diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/models/MembershipModels.kt b/payments/src/main/java/com/anytypeio/anytype/payments/models/MembershipModels.kt index 0fc3a1e049..0a4005f5fd 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/models/MembershipModels.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/models/MembershipModels.kt @@ -62,6 +62,8 @@ sealed class TierButton { data object DifferentPurchaseAccountId : HiddenWithText() data object DifferentPurchaseProductId : HiddenWithText() data object MoreThenOnePurchase : HiddenWithText() + data object ManageOnDesktop : HiddenWithText() + data object ManageOnIOS : HiddenWithText() } sealed class Submit : TierButton() { data object Enabled : Submit() @@ -85,10 +87,6 @@ sealed class TierButton { data class Enabled(val productId: String?) : Android() data object Disabled : Android() } - sealed class External : Manage() { - data class Enabled(val manageUrl: String?) : External() - data object Disabled : External() - } } } diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt b/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt index 063691b694..b807f18425 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt @@ -263,6 +263,14 @@ private fun MainButton( val text = stringResource(id = R.string.membership_support_more_then_one_subscription) SupportText(text = text) } + TierButton.HiddenWithText.ManageOnDesktop -> { + val text = stringResource(id = R.string.membership_manage_tier_desktop) + SupportText(text = text) + } + TierButton.HiddenWithText.ManageOnIOS -> { + val text = stringResource(id = R.string.membership_manage_tier_ios) + SupportText(text = text) + } else -> { val (stringRes, enabled) = getButtonText(buttonState) ButtonPrimary( @@ -345,26 +353,53 @@ private fun SecondaryButton( buttonState: TierButton, actionTier: (TierAction) -> Unit ) { - if (buttonState !is TierButton.Hidden) { - val (stringRes, enabled) = getButtonText(buttonState) - ButtonSecondary( - enabled = enabled, - text = stringResource(id = stringRes), - onClick = { - when (buttonState) { - is TierButton.Pay.Enabled -> actionTier(TierAction.PayClicked(tierId)) - is TierButton.Manage.Android.Enabled -> actionTier(TierAction.ManagePayment(tierId)) - TierButton.Submit.Enabled -> actionTier(TierAction.SubmitClicked) - TierButton.ChangeEmail -> actionTier(TierAction.ChangeEmail) - else -> {} - } + when (buttonState) { + TierButton.Hidden -> {} + TierButton.HiddenWithText.DifferentPurchaseAccountId -> { + val text = stringResource(id = R.string.membership_support_already_acquired) + SupportText(text = text) + } - }, - size = ButtonSize.Large, - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 20.dp) - ) + TierButton.HiddenWithText.DifferentPurchaseProductId -> { + val text = stringResource(id = R.string.membership_support_different_subscription) + SupportText(text = text) + } + + TierButton.HiddenWithText.MoreThenOnePurchase -> { + val text = stringResource(id = R.string.membership_support_more_then_one_subscription) + SupportText(text = text) + } + + TierButton.HiddenWithText.ManageOnDesktop -> { + val text = stringResource(id = R.string.membership_manage_tier_desktop) + SupportText(text = text) + } + + TierButton.HiddenWithText.ManageOnIOS -> { + val text = stringResource(id = R.string.membership_manage_tier_ios) + SupportText(text = text) + } + else -> { + val (stringRes, enabled) = getButtonText(buttonState) + ButtonSecondary( + enabled = enabled, + text = stringResource(id = stringRes), + onClick = { + when (buttonState) { + is TierButton.Pay.Enabled -> actionTier(TierAction.PayClicked(tierId)) + is TierButton.Manage.Android.Enabled -> actionTier(TierAction.ManagePayment(tierId)) + TierButton.Submit.Enabled -> actionTier(TierAction.SubmitClicked) + TierButton.ChangeEmail -> actionTier(TierAction.ChangeEmail) + else -> {} + } + + }, + size = ButtonSize.Large, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 20.dp) + ) + } } } @@ -376,8 +411,6 @@ private fun getButtonText(buttonState: TierButton): Pair { is TierButton.Info.Enabled -> Pair(R.string.payments_button_info, true) TierButton.Manage.Android.Disabled -> Pair(R.string.payments_button_manage, false) is TierButton.Manage.Android.Enabled -> Pair(R.string.payments_button_manage, true) - TierButton.Manage.External.Disabled -> Pair(R.string.payments_button_manage, false) - is TierButton.Manage.External.Enabled -> Pair(R.string.payments_button_manage, true) TierButton.Submit.Disabled -> Pair(R.string.payments_button_submit, false) TierButton.Submit.Enabled -> Pair(R.string.payments_button_submit, true) TierButton.Pay.Disabled -> Pair(R.string.payments_button_pay, false) @@ -386,6 +419,8 @@ private fun getButtonText(buttonState: TierButton): Pair { TierButton.HiddenWithText.DifferentPurchaseAccountId -> Pair(0, false) TierButton.HiddenWithText.DifferentPurchaseProductId -> Pair(0, false) TierButton.HiddenWithText.MoreThenOnePurchase -> Pair(0, false) + TierButton.HiddenWithText.ManageOnDesktop -> Pair(0, false) + TierButton.HiddenWithText.ManageOnIOS -> Pair(0, false) } } @@ -425,7 +460,7 @@ fun TierViewScreenPreview() { period = TierPeriod.Year(1), payedBy = MembershipPaymentMethod.METHOD_INAPP_GOOGLE ), - buttonState = TierButton.Pay.Enabled, + buttonState = TierButton.HiddenWithText.ManageOnIOS, id = TierId(value = EXPLORER_ID), membershipAnyName = TierAnyName.Visible.Purchased("someanyname111"), email = TierEmail.Visible.Enter, @@ -434,7 +469,7 @@ fun TierViewScreenPreview() { iosManageUrl = "", androidManageUrl = "", androidProductId = "", - paymentMethod = MembershipPaymentMethod.METHOD_INAPP_GOOGLE + paymentMethod = MembershipPaymentMethod.METHOD_STRIPE ) ), actionTier = {}, diff --git a/payments/src/test/java/com/anytypeio/anytype/payments/TierActivePurchasedOniOSTests.kt b/payments/src/test/java/com/anytypeio/anytype/payments/TierActivePurchasedOniOSTests.kt index 5d4f36a12f..472a0d749e 100644 --- a/payments/src/test/java/com/anytypeio/anytype/payments/TierActivePurchasedOniOSTests.kt +++ b/payments/src/test/java/com/anytypeio/anytype/payments/TierActivePurchasedOniOSTests.kt @@ -90,7 +90,7 @@ class TierActivePurchasedOniOSTests : MembershipTestsSetup() { } @Test - fun `when payed plan is active, show proper valid and enabled manage button`() = runTest { + fun `when payed plan is active, show proper valid and show ios text`() = runTest { turbineScope { val (features, tiers) = commonTestSetup() @@ -134,7 +134,7 @@ class TierActivePurchasedOniOSTests : MembershipTestsSetup() { period = TierPeriod.Year(1), ), expectedAnyName = TierAnyName.Hidden, - expectedButtonState = TierButton.Manage.External.Enabled(iosManageUrl), + expectedButtonState = TierButton.HiddenWithText.ManageOnIOS, expectedId = MembershipConstants.BUILDER_ID, expectedActive = true, expectedEmailState = TierEmail.Hidden @@ -144,7 +144,7 @@ class TierActivePurchasedOniOSTests : MembershipTestsSetup() { } @Test - fun `when payed plan is active from crypto, show proper valid and hide manage button`() = + fun `when payed plan is active from crypto, show proper valid and desktop support text`() = runTest { turbineScope { val (features, tiers) = commonTestSetup() @@ -199,7 +199,7 @@ class TierActivePurchasedOniOSTests : MembershipTestsSetup() { period = TierPeriod.Year(1), ), expectedAnyName = TierAnyName.Hidden, - expectedButtonState = TierButton.Hidden, + expectedButtonState = TierButton.HiddenWithText.ManageOnDesktop, expectedId = MembershipConstants.BUILDER_ID, expectedActive = true, expectedEmailState = TierEmail.Hidden diff --git a/payments/src/test/java/com/anytypeio/anytype/payments/TierAndroidActivePurchasedOniOS.kt b/payments/src/test/java/com/anytypeio/anytype/payments/TierAndroidActivePurchasedOniOS.kt index b7e5b25db7..54370ae3f5 100644 --- a/payments/src/test/java/com/anytypeio/anytype/payments/TierAndroidActivePurchasedOniOS.kt +++ b/payments/src/test/java/com/anytypeio/anytype/payments/TierAndroidActivePurchasedOniOS.kt @@ -92,7 +92,7 @@ class TierAndroidActivePurchasedOniOS : MembershipTestsSetup() { } @Test - fun `when payed plan is active, show proper valid and enabled manage button`() = runTest { + fun `when payed plan is active, show proper valid and show support ios text`() = runTest { turbineScope { val (features, tiers) = commonTestSetup() @@ -136,7 +136,7 @@ class TierAndroidActivePurchasedOniOS : MembershipTestsSetup() { period = TierPeriod.Year(1), ), expectedAnyName = TierAnyName.Hidden, - expectedButtonState = TierButton.Manage.External.Enabled(iosManageUrl), + expectedButtonState = TierButton.HiddenWithText.ManageOnIOS, expectedId = MembershipConstants.BUILDER_ID, expectedActive = true, expectedEmailState = TierEmail.Hidden @@ -146,7 +146,7 @@ class TierAndroidActivePurchasedOniOS : MembershipTestsSetup() { } @Test - fun `when payed plan is active from crypto, show proper valid and hide manage button`() = + fun `when payed plan is active from crypto, show proper valid and show support desktop text`() = runTest { turbineScope { val (features, tiers) = commonTestSetup() @@ -201,7 +201,7 @@ class TierAndroidActivePurchasedOniOS : MembershipTestsSetup() { period = TierPeriod.Year(1), ), expectedAnyName = TierAnyName.Hidden, - expectedButtonState = TierButton.Hidden, + expectedButtonState = TierButton.HiddenWithText.ManageOnDesktop, expectedId = MembershipConstants.BUILDER_ID, expectedActive = true, expectedEmailState = TierEmail.Hidden