1
1
package com.flipcash.services.analytics
2
2
3
+ import com.getcode.ed25519.Ed25519.KeyPair
3
4
import com.getcode.libs.analytics.AnalyticsService
4
5
import com.getcode.libs.analytics.AppAction
5
6
import com.getcode.libs.analytics.AppActionSource
7
+ import com.getcode.opencode.model.financial.CurrencyCode
6
8
import com.getcode.opencode.model.financial.Fiat
7
9
import com.getcode.opencode.model.financial.LocalFiat
8
10
import com.getcode.services.flipcash.BuildConfig
9
11
import com.getcode.utils.TraceType
12
+ import com.getcode.utils.getPublicKeyBase58
10
13
import com.getcode.utils.trace
11
14
import com.google.firebase.ktx.Firebase
12
15
import com.google.firebase.perf.ktx.performance
13
16
import com.google.firebase.perf.metrics.Trace
14
17
import com.mixpanel.android.mpmetrics.MixpanelAPI
15
18
import org.json.JSONObject
16
- import timber.log.Timber
17
19
import javax.inject.Inject
18
20
19
21
interface FlipcashAnalyticsService : AnalyticsService {
20
22
fun transfer (
21
- event : AnalyticsEvent ,
23
+ event : AnalyticsEvent . Transfer ,
22
24
amount : LocalFiat ? = null,
23
25
successful : Boolean = true,
24
26
error : Throwable ? = null
25
27
)
26
28
fun transfer (
27
- event : AnalyticsEvent ,
29
+ event : AnalyticsEvent . Transfer ,
28
30
fiat : Fiat ? = null,
29
31
successful : Boolean = true,
30
32
error : Throwable ? = null
31
33
)
34
+
35
+ fun paidForAccount (
36
+ price : Double ,
37
+ currency : CurrencyCode ,
38
+ owner : KeyPair ,
39
+ )
32
40
}
33
41
34
42
class FlipcashAnalyticsManager @Inject constructor(
@@ -63,16 +71,22 @@ class FlipcashAnalyticsManager @Inject constructor(
63
71
64
72
override fun action (action : AppAction , source : AppActionSource ? ) = Unit
65
73
66
- override fun transfer (event : AnalyticsEvent , amount : LocalFiat ? , successful : Boolean , error : Throwable ? ) {
74
+ override fun transfer (event : AnalyticsEvent . Transfer , amount : LocalFiat ? , successful : Boolean , error : Throwable ? ) {
67
75
val properties = event.properties(localizedAmount = amount, successful = successful, error = error)
68
76
track(event.name, * properties.toList().toTypedArray())
69
77
}
70
78
71
- override fun transfer (event : AnalyticsEvent , fiat : Fiat ? , successful : Boolean , error : Throwable ? ) {
79
+ override fun transfer (event : AnalyticsEvent . Transfer , fiat : Fiat ? , successful : Boolean , error : Throwable ? ) {
72
80
val properties = event.properties(nativeAmount = fiat, successful = successful, error = error)
73
81
track(event.name, * properties.toList().toTypedArray())
74
82
}
75
83
84
+ override fun paidForAccount (price : Double , currency : CurrencyCode , owner : KeyPair ) {
85
+ val event = AnalyticsEvent .PaidForAccount (price, currency, owner)
86
+ val properties = event.properties()
87
+ track(event.name, * properties.toList().toTypedArray())
88
+ }
89
+
76
90
private fun track (name : String , vararg properties : Pair <String , String >) {
77
91
if (BuildConfig .DEBUG ) {
78
92
trace(
@@ -90,25 +104,51 @@ class FlipcashAnalyticsManager @Inject constructor(
90
104
}
91
105
}
92
106
93
- sealed class AnalyticsEvent (val name : String ) {
94
- data object GrabBill : AnalyticsEvent (" Grab Bill" )
95
- data object GiveBill : AnalyticsEvent (" Give Bill" )
96
- data object Withdrawal : AnalyticsEvent (" Withdrawal" )
97
- data class SentCashLink (val clipboard : Boolean? = null , val app : String? = null ) : AnalyticsEvent(" Sent Cash Link" )
98
- data object ClaimedCashLink : AnalyticsEvent (" Receive Cash Link" )
107
+ sealed interface AnalyticsEvent {
108
+
109
+ val name: String
110
+ data class PaidForAccount (
111
+ val price : Double ,
112
+ val currency : CurrencyCode ,
113
+ val owner : KeyPair
114
+ ) : AnalyticsEvent {
115
+ override val name: String = " Create Account Payment"
116
+ }
117
+
118
+ sealed interface Transfer : AnalyticsEvent
119
+ data object GrabBill : Transfer {
120
+ override val name: String = " Grab Bill"
121
+ }
122
+ data object GiveBill : Transfer {
123
+ override val name: String = " Give Bill"
124
+ }
125
+ data object Withdrawal : Transfer {
126
+ override val name: String = " Withdrawal"
127
+ }
128
+ data class SentCashLink (
129
+ val clipboard : Boolean? = null ,
130
+ val app : String? = null
131
+ ) : Transfer {
132
+ override val name: String = " Send Cash Link"
133
+ }
134
+ data object ClaimedCashLink : Transfer {
135
+ override val name: String = " Receive Cash Link"
136
+ }
99
137
}
100
138
101
139
private fun AnalyticsEvent.properties (
102
140
localizedAmount : LocalFiat ? = null,
103
141
nativeAmount : Fiat ? = null,
104
- successful : Boolean ,
105
- error : Throwable ?
142
+ successful : Boolean? = null ,
143
+ error : Throwable ? = null,
106
144
): Map <String , String > {
107
145
return buildMap {
108
- if (successful) {
109
- put(" State" , " Success" )
110
- } else {
111
- put(" State" , " Failure" )
146
+ if (successful != null ) {
147
+ if (successful) {
148
+ put(" State" , " Success" )
149
+ } else {
150
+ put(" State" , " Failure" )
151
+ }
112
152
}
113
153
114
154
when (val event = this @properties) {
@@ -124,6 +164,12 @@ private fun AnalyticsEvent.properties(
124
164
AnalyticsEvent .ClaimedCashLink ,
125
165
AnalyticsEvent .GiveBill ,
126
166
AnalyticsEvent .GrabBill -> Unit
167
+
168
+ is AnalyticsEvent .PaidForAccount -> {
169
+ put(" Fiat" , event.price.toString())
170
+ put(" Currency" , event.currency.name)
171
+ put(" Owner Public Key" , event.owner.getPublicKeyBase58())
172
+ }
127
173
}
128
174
129
175
if (localizedAmount != null ) {
0 commit comments