11package com.flipcash.services.analytics
22
3+ import com.flipcash.services.internal.model.thirdparty.OnRampProvider
34import com.getcode.ed25519.Ed25519.KeyPair
45import com.getcode.libs.analytics.AnalyticsService
56import com.getcode.libs.analytics.AppAction
@@ -46,6 +47,17 @@ interface FlipcashAnalyticsService : AnalyticsService {
4647 fun poolCreated (id : ID )
4748 fun placedBidInPool (id : ID )
4849 fun declaredOutcomeInPool (id : ID )
50+
51+ fun connectWallet (
52+ provider : OnRampProvider .UsesDeeplinks
53+ )
54+ fun amountSelectedForWalletTransfer (
55+ provider : OnRampProvider .UsesDeeplinks ,
56+ amount : Fiat
57+ )
58+ fun transactionSubmittedToWallet (provider : OnRampProvider .UsesDeeplinks )
59+ fun walletTransactionFailed (provider : OnRampProvider .UsesDeeplinks )
60+ fun walletTransactionCancelled (provider : OnRampProvider .UsesDeeplinks )
4961}
5062
5163class FlipcashAnalyticsManager @Inject constructor(
@@ -122,6 +134,38 @@ class FlipcashAnalyticsManager @Inject constructor(
122134 track(event.name, * properties.toList().toTypedArray())
123135 }
124136
137+ override fun connectWallet (provider : OnRampProvider .UsesDeeplinks ) {
138+ val event = AnalyticsEvent .WalletConnect (provider)
139+ val properties = event.properties()
140+ track(event.name, * properties.toList().toTypedArray())
141+ }
142+
143+ override fun amountSelectedForWalletTransfer (provider : OnRampProvider .UsesDeeplinks , amount : Fiat ) {
144+ val event = AnalyticsEvent .WalletRequestAmount (provider)
145+ val properties = event.properties(
146+ nativeAmount = amount
147+ )
148+ track(event.name, * properties.toList().toTypedArray())
149+ }
150+
151+ override fun transactionSubmittedToWallet (provider : OnRampProvider .UsesDeeplinks ) {
152+ val event = AnalyticsEvent .WalletSubmitTransaction (provider)
153+ val properties = event.properties()
154+ track(event.name, * properties.toList().toTypedArray())
155+ }
156+
157+ override fun walletTransactionFailed (provider : OnRampProvider .UsesDeeplinks ) {
158+ val event = AnalyticsEvent .WalletTransactionFailed (provider)
159+ val properties = event.properties()
160+ track(event.name, * properties.toList().toTypedArray())
161+ }
162+
163+ override fun walletTransactionCancelled (provider : OnRampProvider .UsesDeeplinks ) {
164+ val event = AnalyticsEvent .WalletTransactionCancelled (provider)
165+ val properties = event.properties()
166+ track(event.name, * properties.toList().toTypedArray())
167+ }
168+
125169 private fun track (name : String , vararg properties : Pair <String , String >) {
126170 if (BuildConfig .DEBUG ) {
127171 trace(
@@ -219,6 +263,30 @@ sealed interface AnalyticsEvent {
219263 data class DeclaredOutcome (override val id : ID ) : PoolEvent {
220264 override val name: String = " Pool: Declared Outcome"
221265 }
266+
267+ sealed interface WalletEvent : AnalyticsEvent {
268+ val provider: OnRampProvider .UsesDeeplinks
269+ }
270+
271+ data class WalletConnect (override val provider : OnRampProvider .UsesDeeplinks ) : WalletEvent {
272+ override val name: String = " Wallet: Connect"
273+ }
274+
275+ data class WalletRequestAmount (override val provider : OnRampProvider .UsesDeeplinks ) : WalletEvent {
276+ override val name: String = " Wallet: Request Amount"
277+ }
278+
279+ data class WalletSubmitTransaction (override val provider : OnRampProvider .UsesDeeplinks ) : WalletEvent {
280+ override val name: String = " Wallet: Transactions Submitted"
281+ }
282+
283+ data class WalletTransactionFailed (override val provider : OnRampProvider .UsesDeeplinks ) : WalletEvent {
284+ override val name: String = " Wallet: Transactions Failed"
285+ }
286+
287+ data class WalletTransactionCancelled (override val provider : OnRampProvider .UsesDeeplinks ) : WalletEvent {
288+ override val name: String = " Wallet: Cancel"
289+ }
222290}
223291
224292private fun AnalyticsEvent.properties (
@@ -236,6 +304,16 @@ private fun AnalyticsEvent.properties(
236304 }
237305 }
238306
307+ val providerName = if (this @properties is AnalyticsEvent .WalletEvent ) {
308+ when (provider) {
309+ OnRampProvider .Backpack -> " Backpack"
310+ OnRampProvider .Solflare -> " Solflare"
311+ OnRampProvider .Phantom -> " Phantom"
312+ }
313+ } else {
314+ " "
315+ }
316+
239317 when (val event = this @properties) {
240318 is AnalyticsEvent .SentCashLink -> {
241319 if (event.clipboard == true ) {
@@ -259,6 +337,24 @@ private fun AnalyticsEvent.properties(
259337 is AnalyticsEvent .PoolEvent -> {
260338 put(" ID" , event.id.base58)
261339 }
340+
341+ is AnalyticsEvent .WalletConnect -> {
342+ put(" Provider" , providerName)
343+ }
344+ is AnalyticsEvent .WalletRequestAmount -> {
345+ put(" Provider" , providerName)
346+ put(" Fiat" , nativeAmount?.doubleValue.toString())
347+ put(" Currency" , nativeAmount?.currencyCode?.name.orEmpty())
348+ }
349+ is AnalyticsEvent .WalletSubmitTransaction -> {
350+ put(" Provider" , providerName)
351+ }
352+ is AnalyticsEvent .WalletTransactionCancelled -> {
353+ put(" Provider" , providerName)
354+ }
355+ is AnalyticsEvent .WalletTransactionFailed -> {
356+ put(" Provider" , providerName)
357+ }
262358 }
263359
264360 if (localizedAmount != null ) {
0 commit comments