From 9f706617be508e4a1cca779787457b55335e2a72 Mon Sep 17 00:00:00 2001 From: Konstantin Ivanov <54908981+konstantiniiv@users.noreply.github.com> Date: Thu, 22 May 2025 11:56:32 +0200 Subject: [PATCH] DROID-3656 Payments | Legacy explorer tier (#2431) --- .../anytype/core_models/ext/MembershipExt.kt | 2 ++ .../core_models/membership/MembershipConstants.kt | 3 ++- .../anytype/payments/mapping/MembershipExt.kt | 9 +++++++++ .../anytype/payments/screens/TierPreviewView.kt | 12 ++++++++++++ .../payments/viewmodel/MembershipViewModel.kt | 3 ++- .../multiplayer/SpaceJoinRequestViewModel.kt | 4 +++- 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/core-models/src/main/java/com/anytypeio/anytype/core_models/ext/MembershipExt.kt b/core-models/src/main/java/com/anytypeio/anytype/core_models/ext/MembershipExt.kt index 2662d7289e..19d8594dde 100644 --- a/core-models/src/main/java/com/anytypeio/anytype/core_models/ext/MembershipExt.kt +++ b/core-models/src/main/java/com/anytypeio/anytype/core_models/ext/MembershipExt.kt @@ -20,6 +20,7 @@ fun TierId.isPossibleToUpgrade( fun TierId.isPossibleToUpgradeNumberOfSpaceMembers(): Boolean { return when (this.value) { MembershipConstants.NONE_ID -> true + MembershipConstants.OLD_EXPLORER_ID -> true MembershipConstants.STARTER_ID -> true MembershipConstants.PIONEER_ID -> true MembershipConstants.NEW_EXPLORER_ID -> true @@ -33,6 +34,7 @@ fun TierId.isPossibleToUpgradeNumberOfSpaceMembers(): Boolean { fun TierId.isPossibleToUpgradeStorageSpace(): Boolean { return when (this.value) { MembershipConstants.NONE_ID -> true + MembershipConstants.OLD_EXPLORER_ID -> true MembershipConstants.STARTER_ID -> true MembershipConstants.PIONEER_ID -> true MembershipConstants.NEW_EXPLORER_ID -> true diff --git a/core-models/src/main/java/com/anytypeio/anytype/core_models/membership/MembershipConstants.kt b/core-models/src/main/java/com/anytypeio/anytype/core_models/membership/MembershipConstants.kt index 3d65089632..88d00fb128 100644 --- a/core-models/src/main/java/com/anytypeio/anytype/core_models/membership/MembershipConstants.kt +++ b/core-models/src/main/java/com/anytypeio/anytype/core_models/membership/MembershipConstants.kt @@ -3,6 +3,7 @@ package com.anytypeio.anytype.core_models.membership object MembershipConstants { const val NONE_ID = 0 + const val OLD_EXPLORER_ID = 1 const val STARTER_ID = 21 const val PIONEER_ID = 22 const val NEW_EXPLORER_ID = 20 @@ -15,7 +16,7 @@ object MembershipConstants { const val TERMS_OF_SERVICE = "https://anytype.io/terms_of_use" const val MEMBERSHIP_CONTACT_EMAIL = "membership-upgrade@anytype.io" - val ACTIVE_TIERS_WITH_BANNERS = listOf(NONE_ID, STARTER_ID, PIONEER_ID) + val ACTIVE_TIERS_WITH_BANNERS = listOf(NONE_ID, OLD_EXPLORER_ID, STARTER_ID, PIONEER_ID) const val ERROR_PRODUCT_NOT_FOUND = "Product not found" const val ERROR_PRODUCT_PRICE = "Price of the product is not available" 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 b053fb0a3e..98000025e4 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 @@ -184,6 +184,12 @@ private fun MembershipTierData.mapActiveTierButtonAndNameStates( val wasPurchasedOnAndroid = isActiveTierPurchasedOnAndroid(paymentMethod) if (!wasPurchasedOnAndroid) { return when { + id == MembershipConstants.OLD_EXPLORER_ID && userEmail.isBlank() -> { + TierButton.Submit.Enabled to TierAnyName.Hidden + } + id == MembershipConstants.OLD_EXPLORER_ID -> { + TierButton.ChangeEmail to TierAnyName.Hidden + } id == MembershipConstants.STARTER_ID && userEmail.isBlank() -> { TierButton.Submit.Enabled to TierAnyName.Hidden } @@ -448,6 +454,9 @@ private fun convertToTierViewPeriod(tier: MembershipTierData): TierPeriod { private fun MembershipTierData.getTierEmail(isActive: Boolean, membershipEmail: String): TierEmail { if (isActive) { + if (id == MembershipConstants.OLD_EXPLORER_ID && membershipEmail.isBlank()) { + return TierEmail.Visible.Enter + } if (id == MembershipConstants.STARTER_ID && membershipEmail.isBlank()) { return TierEmail.Visible.Enter } diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierPreviewView.kt b/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierPreviewView.kt index 3e20c2609d..f8a4e3ddd6 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierPreviewView.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierPreviewView.kt @@ -41,6 +41,7 @@ import com.anytypeio.anytype.core_ui.views.fontInterSemibold import com.anytypeio.anytype.core_models.membership.MembershipConstants.BUILDER_ID import com.anytypeio.anytype.core_models.membership.MembershipConstants.CO_CREATOR_ID import com.anytypeio.anytype.core_models.membership.MembershipConstants.NEW_EXPLORER_ID +import com.anytypeio.anytype.core_models.membership.MembershipConstants.OLD_EXPLORER_ID import com.anytypeio.anytype.core_models.membership.MembershipConstants.STARTER_ID import com.anytypeio.anytype.core_models.membership.MembershipConstants.PIONEER_ID import com.anytypeio.anytype.payments.models.TierPreview @@ -159,6 +160,12 @@ fun mapTierToResources(tier: Tier): TierResources { colors = toValue(tier.color), features = tier.features, ) + OLD_EXPLORER_ID -> TierResources( + mediumIcon = R.drawable.logo_explorer_96, + smallIcon = R.drawable.logo_explorer_64, + colors = toValue(tier.color), + features = tier.features, + ) STARTER_ID -> TierResources( mediumIcon = R.drawable.logo_explorer_96, smallIcon = R.drawable.logo_explorer_64, @@ -200,6 +207,11 @@ fun mapTierPreviewToResources(tier: TierPreview): TierResources { smallIcon = R.drawable.logo_co_creator_64, colors = toValue(tier.color) ) + OLD_EXPLORER_ID -> TierResources( + mediumIcon = R.drawable.logo_explorer_96, + smallIcon = R.drawable.logo_explorer_64, + colors = toValue(tier.color) + ) STARTER_ID -> TierResources( mediumIcon = R.drawable.logo_explorer_96, smallIcon = R.drawable.logo_explorer_64, diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt b/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt index 1490805ea7..9329123924 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt @@ -14,6 +14,7 @@ import com.anytypeio.anytype.core_models.membership.EmailVerificationStatus import com.anytypeio.anytype.core_models.membership.MembershipConstants.STARTER_ID import com.anytypeio.anytype.core_models.membership.MembershipConstants.MEMBERSHIP_NAME_MIN_LENGTH import com.anytypeio.anytype.core_models.membership.MembershipConstants.NONE_ID +import com.anytypeio.anytype.core_models.membership.MembershipConstants.OLD_EXPLORER_ID import com.anytypeio.anytype.core_models.membership.MembershipErrors import com.anytypeio.anytype.core_models.membership.MembershipPaymentMethod import com.anytypeio.anytype.core_models.membership.MembershipStatus @@ -458,7 +459,7 @@ class MembershipViewModel( (tierState.value as? MembershipTierState.Visible)?.tier ?: return@fold when (status) { EmailVerificationStatus.STATUS_VERIFIED -> { - if (tierView.id.value == STARTER_ID) { + if (tierView.id.value == STARTER_ID || tierView.id.value == OLD_EXPLORER_ID) { anyEmailState.clearText() val updatedState = tierView.copy( email = TierEmail.Hidden, diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/SpaceJoinRequestViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/SpaceJoinRequestViewModel.kt index 91e1ec6306..2e8331b7fd 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/SpaceJoinRequestViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/SpaceJoinRequestViewModel.kt @@ -13,6 +13,8 @@ import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.ext.isPossibleToUpgradeNumberOfSpaceMembers import com.anytypeio.anytype.core_models.membership.MembershipConstants.BUILDER_ID +import com.anytypeio.anytype.core_models.membership.MembershipConstants.OLD_EXPLORER_ID +import com.anytypeio.anytype.core_models.membership.MembershipConstants.PIONEER_ID import com.anytypeio.anytype.core_models.membership.MembershipConstants.STARTER_ID import com.anytypeio.anytype.core_models.membership.TierId import com.anytypeio.anytype.core_models.multiplayer.MultiplayerError @@ -137,7 +139,7 @@ class SpaceJoinRequestViewModel( Timber.d("proceedWithState, tierId: $tierId, spaceView: $spaceView, spaceMembers: $spaceMembers, newMember: $newMember, isCurrentUserOwner: $isCurrentUserOwner") val state = when (tierId.value) { - STARTER_ID -> createExplorerState( + STARTER_ID, OLD_EXPLORER_ID, PIONEER_ID -> createExplorerState( spaceView = spaceView, spaceMembers = spaceMembers, newMember = newMember,