mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-2427 Membership | Analytics (#1283)
This commit is contained in:
parent
2d8414912b
commit
cbf7edf8fa
3 changed files with 86 additions and 2 deletions
|
@ -230,6 +230,20 @@ object EventsDictionary {
|
|||
const val galleryParamNew = "New"
|
||||
const val galleryParamExisting = "Existing"
|
||||
|
||||
//Membership
|
||||
const val screenMembership = "ScreenMembership"
|
||||
const val clickMembership = "ClickMembership"
|
||||
const val changePlan = "ChangePlan"
|
||||
|
||||
enum class MembershipTierButton(val value: String) {
|
||||
INFO("LearnMore"),
|
||||
MANAGE("ManagePayment"),
|
||||
PAY("Pay"),
|
||||
SUBMIT("Submit"),
|
||||
CHANGE_EMAIL("ChangeEmail"),
|
||||
CONTACT_US("ContactUs")
|
||||
}
|
||||
|
||||
enum class ScreenOnboardingStep(val value: String) {
|
||||
VOID("Void"),
|
||||
PHRASE("Phrase")
|
||||
|
|
|
@ -9,6 +9,7 @@ import androidx.lifecycle.viewModelScope
|
|||
import com.android.billingclient.api.BillingFlowParams
|
||||
import com.android.billingclient.api.ProductDetails
|
||||
import com.anytypeio.anytype.analytics.base.Analytics
|
||||
import com.anytypeio.anytype.analytics.base.EventsDictionary
|
||||
import com.anytypeio.anytype.core_models.membership.EmailVerificationStatus
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipErrors
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipPaymentMethod
|
||||
|
@ -30,6 +31,9 @@ import com.anytypeio.anytype.payments.models.Tier
|
|||
import com.anytypeio.anytype.payments.playbilling.BillingClientLifecycle
|
||||
import com.anytypeio.anytype.payments.playbilling.BillingClientState
|
||||
import com.anytypeio.anytype.payments.playbilling.BillingPurchaseState
|
||||
import com.anytypeio.anytype.presentation.extension.sendAnalyticsMembershipClickEvent
|
||||
import com.anytypeio.anytype.presentation.extension.sendAnalyticsMembershipPurchaseEvent
|
||||
import com.anytypeio.anytype.presentation.extension.sendAnalyticsMembershipScreenEvent
|
||||
import com.anytypeio.anytype.presentation.membership.models.MembershipStatus
|
||||
import com.anytypeio.anytype.presentation.membership.models.TierId
|
||||
import com.anytypeio.anytype.presentation.membership.provider.MembershipProvider
|
||||
|
@ -142,6 +146,12 @@ class MembershipViewModel(
|
|||
val tierView = (tierState.value as? MembershipTierState.Visible)?.tier ?: return
|
||||
proceedWithHideTier()
|
||||
welcomeState.value = WelcomeState.Initial(tierView)
|
||||
viewModelScope.launch {
|
||||
sendAnalyticsMembershipPurchaseEvent(
|
||||
analytics = analytics,
|
||||
tier = tierView.title
|
||||
)
|
||||
}
|
||||
proceedWithNavigation(MembershipNavigation.Welcome)
|
||||
}
|
||||
}
|
||||
|
@ -166,6 +176,12 @@ class MembershipViewModel(
|
|||
private fun proceedWithShowingTier(tierId: TierId) {
|
||||
val visibleTier = getTierById(tierId) ?: return
|
||||
tierState.value = MembershipTierState.Visible(visibleTier)
|
||||
viewModelScope.launch {
|
||||
sendAnalyticsMembershipScreenEvent(
|
||||
analytics = analytics,
|
||||
tier = visibleTier.title
|
||||
)
|
||||
}
|
||||
proceedWithNavigation(MembershipNavigation.Tier)
|
||||
}
|
||||
|
||||
|
@ -178,13 +194,21 @@ class MembershipViewModel(
|
|||
fun onTierAction(action: TierAction) {
|
||||
Timber.d("onTierAction: action:$action")
|
||||
when (action) {
|
||||
is TierAction.PayClicked -> onPayButtonClicked(action.tierId)
|
||||
is TierAction.ManagePayment -> onManageTierClicked(action.tierId)
|
||||
is TierAction.PayClicked -> {
|
||||
sendAnalyticsClickEvent(EventsDictionary.MembershipTierButton.PAY)
|
||||
onPayButtonClicked(action.tierId)
|
||||
}
|
||||
is TierAction.ManagePayment -> {
|
||||
sendAnalyticsClickEvent(EventsDictionary.MembershipTierButton.MANAGE)
|
||||
onManageTierClicked(action.tierId)
|
||||
}
|
||||
is TierAction.OpenUrl -> {
|
||||
sendAnalyticsClickEvent(EventsDictionary.MembershipTierButton.INFO)
|
||||
proceedWithNavigation(MembershipNavigation.OpenUrl(action.url))
|
||||
}
|
||||
TierAction.OpenEmail -> proceedWithSupportEmail()
|
||||
is TierAction.SubmitClicked -> {
|
||||
sendAnalyticsClickEvent(EventsDictionary.MembershipTierButton.SUBMIT)
|
||||
proceedWithSettingEmail(
|
||||
email = anyEmailState.text.toString(),
|
||||
)
|
||||
|
@ -198,6 +222,7 @@ class MembershipViewModel(
|
|||
proceedWithValidatingEmailCode(action.code)
|
||||
}
|
||||
TierAction.ChangeEmail -> {
|
||||
sendAnalyticsClickEvent(EventsDictionary.MembershipTierButton.CHANGE_EMAIL)
|
||||
val tierView = (tierState.value as? MembershipTierState.Visible)?.tier ?: return
|
||||
val updatedTierState = tierView.copy(
|
||||
email = TierEmail.Visible.Enter,
|
||||
|
@ -207,6 +232,7 @@ class MembershipViewModel(
|
|||
}
|
||||
|
||||
is TierAction.ContactUsError -> {
|
||||
sendAnalyticsClickEvent(EventsDictionary.MembershipTierButton.CONTACT_US)
|
||||
proceedWithSupportErrorEmail(action.error)
|
||||
}
|
||||
}
|
||||
|
@ -507,6 +533,15 @@ class MembershipViewModel(
|
|||
errorState.value = MembershipErrorState.Hidden
|
||||
}
|
||||
|
||||
private fun sendAnalyticsClickEvent(buttonType: EventsDictionary.MembershipTierButton) {
|
||||
viewModelScope.launch {
|
||||
sendAnalyticsMembershipClickEvent(
|
||||
analytics = analytics,
|
||||
buttonType = buttonType
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
//region Google Play Billing
|
||||
/**
|
||||
* Use the Google Play Billing Library to make a purchase.
|
||||
|
|
|
@ -2016,4 +2016,39 @@ fun CoroutineScope.sendAnalyticsUploadConfigFileEvent(
|
|||
)
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
//region Membership
|
||||
fun CoroutineScope.sendAnalyticsMembershipScreenEvent(
|
||||
analytics: Analytics,
|
||||
tier: String
|
||||
) {
|
||||
sendEvent(
|
||||
analytics = analytics,
|
||||
eventName = EventsDictionary.screenMembership,
|
||||
props = Props(mapOf(EventsPropertiesKey.name to tier))
|
||||
)
|
||||
}
|
||||
|
||||
fun CoroutineScope.sendAnalyticsMembershipClickEvent(
|
||||
analytics: Analytics,
|
||||
buttonType: EventsDictionary.MembershipTierButton
|
||||
) {
|
||||
sendEvent(
|
||||
analytics = analytics,
|
||||
eventName = EventsDictionary.clickMembership,
|
||||
props = Props(mapOf(EventsPropertiesKey.type to buttonType.value))
|
||||
)
|
||||
}
|
||||
|
||||
fun CoroutineScope.sendAnalyticsMembershipPurchaseEvent(
|
||||
analytics: Analytics,
|
||||
tier: String
|
||||
) {
|
||||
sendEvent(
|
||||
analytics = analytics,
|
||||
eventName = EventsDictionary.changePlan,
|
||||
props = Props(mapOf(EventsPropertiesKey.name to tier))
|
||||
)
|
||||
}
|
||||
//endregion
|
Loading…
Add table
Add a link
Reference in a new issue