Skip to content

Commit 818d06e

Browse files
authored
Merge pull request #552 from code-payments/release/2.1.10
v2.1.10
2 parents e4988a2 + ea19c9a commit 818d06e

File tree

115 files changed

+1559
-555
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+1559
-555
lines changed

api/src/main/java/com/getcode/analytics/AnalyticsManager.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,14 @@ class AnalyticsManager @Inject constructor(
289289
)
290290
}
291291

292+
override fun photoScanned(successful: Boolean, timeToScanInMillis: Long) {
293+
track(
294+
Name.PhotoScanned,
295+
Property.Result to successful.toString(),
296+
Property.Time to timeToScanInMillis.toInt().toString()
297+
)
298+
}
299+
292300
override fun action(action: Action, source: ActionSource?) {
293301
track(
294302
action = action,
@@ -343,6 +351,7 @@ class AnalyticsManager @Inject constructor(
343351
PrivacyMigration("Privacy Migration"),
344352
BackgroundSwap("Background Swap Initiated"),
345353
Withdrawal("Withdrawal"),
354+
PhotoScanned("Photo Scanned"),
346355

347356
// Errors
348357
ErrorRequest("Error Request"),
@@ -365,6 +374,7 @@ class AnalyticsManager @Inject constructor(
365374
Result("Result"),
366375
MillisecondsToConfirm("Milliseconds to confirm"),
367376
GrabTime("Grab Time"),
377+
Time("Time"),
368378

369379
// Bill
370380
State("State"),

api/src/main/java/com/getcode/analytics/AnalyticsService.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ interface AnalyticsService {
5252

5353
fun appSettingToggled(setting: AppSetting, value: Boolean)
5454

55+
fun photoScanned(successful: Boolean, timeToScanInMillis: Long)
56+
5557
fun action(action: Action, source: ActionSource? = null)
5658
}
5759

@@ -98,5 +100,7 @@ class AnalyticsServiceNull : AnalyticsService {
98100
override fun backgroundSwapInitiated() = Unit
99101
override fun unintentionalLogout() = Unit
100102
override fun appSettingToggled(setting: AppSetting, value: Boolean) = Unit
103+
override fun photoScanned(successful: Boolean, timeToScanInMillis: Long) = Unit
104+
101105
override fun action(action: Action, source: ActionSource?) = Unit
102106
}

api/src/main/java/com/getcode/manager/SessionManager.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import javax.inject.Inject
1818
import javax.inject.Singleton
1919

2020

21+
// TODO: figure out a better naming paradigm b/w this and Session
2122
@Singleton
2223
class SessionManager @Inject constructor(
2324
private val client: Client,

api/src/main/java/com/getcode/model/Feature.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,9 @@ data class InvertedDragZoomFeature(
5656
data class FlippableTipCardFeature(
5757
override val enabled: Boolean = BetaOptions.Defaults.canFlipTipCard,
5858
override val available: Boolean = true, // always available
59+
): Feature
60+
61+
data class GalleryFeature(
62+
override val enabled: Boolean = BetaOptions.Defaults.galleryEnabled,
63+
override val available: Boolean = true, // always available
5964
): Feature

api/src/main/java/com/getcode/model/PrefBool.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ sealed interface AppSetting
2020
sealed interface BetaFlag
2121
// Dev settings
2222
sealed interface DevSetting
23-
// Once a feature behind a beta flag is made public, it becomes immutable
2423
// This removes it from the UI in Settings -> Beta Flags
2524
sealed interface Immutable
25+
// Once a feature behind a beta flag is made public, it becomes immutable
26+
sealed interface Launched: Immutable
27+
// A feature flag can also be deemed deprecated and is also then immutable
28+
sealed interface Deprecated : Immutable
2629

2730

2831
sealed class PrefsBool(val value: String) {
@@ -52,18 +55,19 @@ sealed class PrefsBool(val value: String) {
5255
data object DISPLAY_ERRORS: PrefsBool("debug_display_errors"), BetaFlag
5356
data object SHOW_CONNECTIVITY_STATUS: PrefsBool("debug_no_network"), BetaFlag
5457
data object GIVE_REQUESTS_ENABLED: PrefsBool("give_requests_enabled"), BetaFlag
55-
data object BUY_MODULE_ENABLED : PrefsBool("buy_kin_enabled"), BetaFlag, Immutable
58+
data object BUY_MODULE_ENABLED : PrefsBool("buy_kin_enabled"), BetaFlag, Launched
5659
data object CHAT_UNSUB_ENABLED: PrefsBool("chat_unsub_enabled"), BetaFlag
57-
data object TIPS_ENABLED : PrefsBool("tips_enabled"), BetaFlag, Immutable
60+
data object TIPS_ENABLED : PrefsBool("tips_enabled"), BetaFlag, Launched
5861
data object CONVERSATIONS_ENABLED: PrefsBool("conversations_enabled"), BetaFlag
5962
data object CONVERSATION_CASH_ENABLED: PrefsBool("convo_cash_enabled"), BetaFlag
60-
data object BALANCE_CURRENCY_SELECTION_ENABLED: PrefsBool("balance_currency_enabled"), BetaFlag, Immutable
63+
data object BALANCE_CURRENCY_SELECTION_ENABLED: PrefsBool("balance_currency_enabled"), BetaFlag, Launched
6164
data object KADO_WEBVIEW_ENABLED : PrefsBool("kado_inapp_enabled"), BetaFlag
62-
data object SHARE_TWEET_TO_TIP : PrefsBool("share_tweet_to_tip"), BetaFlag, Immutable
63-
data object TIP_CARD_ON_HOMESCREEN: PrefsBool("tip_card_on_home_screen"), BetaFlag, Immutable
65+
data object SHARE_TWEET_TO_TIP : PrefsBool("share_tweet_to_tip"), BetaFlag, Launched
66+
data object TIP_CARD_ON_HOMESCREEN: PrefsBool("tip_card_on_home_screen"), BetaFlag, Launched
6467
data object TIP_CARD_FLIPPABLE: PrefsBool("tipcard_flippable"), BetaFlag
65-
data object CAMERA_GESTURES_ENABLED: PrefsBool("camera_gestures_enabled"), BetaFlag, Immutable
66-
data object CAMERA_DRAG_INVERTED: PrefsBool("camera_drag_inverted"), BetaFlag
68+
data object CAMERA_GESTURES_ENABLED: PrefsBool("camera_gestures_enabled"), BetaFlag, Launched
69+
data object CAMERA_DRAG_INVERTED: PrefsBool("camera_drag_inverted"), BetaFlag, Deprecated
70+
data object GALLERY_ENABLED: PrefsBool("gallery_enabled"), BetaFlag, Launched
6771
}
6872

6973
val APP_SETTINGS: List<AppSetting> = listOf(PrefsBool.CAMERA_START_BY_DEFAULT, PrefsBool.REQUIRE_BIOMETRICS)

api/src/main/java/com/getcode/network/BalanceController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ open class BalanceController @Inject constructor(
183183
transactionReceiver.receiveFromIncoming(organizer)
184184
transactionRepository.swapIfNeeded(organizer)
185185
} catch (ex: Exception) {
186-
Timber.i("Error: ${ex.javaClass.simpleName} ${ex.cause}")
186+
Timber.i("Error: ${ex.javaClass.simpleName} ${ex.message}")
187187
val organizer =
188188
SessionManager.getOrganizer() ?: throw IllegalStateException("Missing Organizer")
189189

api/src/main/java/com/getcode/network/repository/BetaFlagsRepository.kt

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ data class BetaOptions(
2424
val cameraGesturesEnabled: Boolean,
2525
val invertedDragZoom: Boolean,
2626
val canFlipTipCard: Boolean,
27+
val galleryEnabled: Boolean,
2728
) {
2829
companion object {
2930
// Default states for various beta flags in app.
@@ -45,7 +46,8 @@ data class BetaOptions(
4546
tipCardOnHomeScreen = true,
4647
cameraGesturesEnabled = true,
4748
invertedDragZoom = false,
48-
canFlipTipCard = false
49+
canFlipTipCard = false,
50+
galleryEnabled = true
4951
)
5052
}
5153
}
@@ -85,7 +87,8 @@ class BetaFlagsRepository @Inject constructor(
8587
observeBetaFlag(PrefsBool.TIP_CARD_ON_HOMESCREEN, defaults.tipCardOnHomeScreen),
8688
observeBetaFlag(PrefsBool.CAMERA_GESTURES_ENABLED, defaults.cameraGesturesEnabled),
8789
observeBetaFlag(PrefsBool.CAMERA_DRAG_INVERTED, defaults.invertedDragZoom),
88-
observeBetaFlag(PrefsBool.TIP_CARD_FLIPPABLE, defaults.canFlipTipCard)
90+
observeBetaFlag(PrefsBool.TIP_CARD_FLIPPABLE, defaults.canFlipTipCard),
91+
observeBetaFlag(PrefsBool.GALLERY_ENABLED, defaults.galleryEnabled),
8992
) {
9093
BetaOptions(
9194
showNetworkDropOff = it[0],
@@ -106,6 +109,7 @@ class BetaFlagsRepository @Inject constructor(
106109
cameraGesturesEnabled = it[15],
107110
invertedDragZoom = it[16],
108111
canFlipTipCard = it[17],
112+
galleryEnabled = it[18],
109113
)
110114
}
111115
}
@@ -129,19 +133,34 @@ class BetaFlagsRepository @Inject constructor(
129133
PrefsBool.BALANCE_CURRENCY_SELECTION_ENABLED -> balanceCurrencySelectionEnabled
130134
PrefsBool.BUCKET_DEBUGGER_ENABLED -> canViewBuckets
131135
PrefsBool.BUY_MODULE_ENABLED -> buyModuleEnabled
136+
PrefsBool.CAMERA_GESTURES_ENABLED -> cameraGesturesEnabled
137+
PrefsBool.CAMERA_DRAG_INVERTED -> invertedDragZoom
132138
PrefsBool.CHAT_UNSUB_ENABLED -> chatUnsubEnabled
133139
PrefsBool.CONVERSATIONS_ENABLED -> conversationsEnabled
134140
PrefsBool.CONVERSATION_CASH_ENABLED -> conversationCashEnabled
135141
PrefsBool.DISPLAY_ERRORS -> displayErrors
142+
PrefsBool.GALLERY_ENABLED -> galleryEnabled
136143
PrefsBool.GIVE_REQUESTS_ENABLED -> giveRequestsEnabled
137144
PrefsBool.KADO_WEBVIEW_ENABLED -> kadoWebViewEnabled
138145
PrefsBool.LOG_SCAN_TIMES -> debugScanTimesEnabled
139146
PrefsBool.SHARE_TWEET_TO_TIP -> shareTweetToTip
140147
PrefsBool.SHOW_CONNECTIVITY_STATUS -> showNetworkDropOff
141148
PrefsBool.TIPS_ENABLED -> tipsEnabled
149+
PrefsBool.TIP_CARD_FLIPPABLE -> canFlipTipCard
142150
PrefsBool.TIP_CARD_ON_HOMESCREEN -> tipCardOnHomeScreen
143151
PrefsBool.VIBRATE_ON_SCAN -> tickOnScan
144-
else -> false
152+
PrefsBool.BUY_MODULE_AVAILABLE -> false
153+
PrefsBool.CAMERA_START_BY_DEFAULT -> false
154+
PrefsBool.DISMISSED_TIP_CARD_BANNER -> false
155+
PrefsBool.ESTABLISH_CODE_RELATIONSHIP -> false
156+
PrefsBool.HAS_REMOVED_LOCAL_CURRENCY -> false
157+
PrefsBool.IS_DEBUG_ACTIVE -> false
158+
PrefsBool.IS_DEBUG_ALLOWED -> false
159+
PrefsBool.IS_ELIGIBLE_GET_FIRST_KIN_AIRDROP -> false
160+
PrefsBool.IS_ELIGIBLE_GIVE_FIRST_KIN_AIRDROP -> false
161+
PrefsBool.REQUIRE_BIOMETRICS -> false
162+
PrefsBool.SEEN_TIP_CARD -> false
163+
PrefsBool.STARTED_TIP_CONNECT -> false
145164
}
146165
}
147166
}

api/src/main/java/com/getcode/network/repository/FeatureRepository.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.getcode.model.TipCardOnHomeScreenFeature
1010
import com.getcode.model.ConversationCashFeature
1111
import com.getcode.model.ConversationsFeature
1212
import com.getcode.model.FlippableTipCardFeature
13+
import com.getcode.model.GalleryFeature
1314
import com.getcode.model.InvertedDragZoomFeature
1415
import kotlinx.coroutines.flow.combine
1516
import kotlinx.coroutines.flow.map
@@ -25,20 +26,25 @@ class FeatureRepository @Inject constructor(
2526
val buyModule = combine(
2627
betaFlags.observe().map { it.buyModuleEnabled },
2728
prefRepository.observeOrDefault(PrefsBool.BUY_MODULE_AVAILABLE, false)
28-
) { enabled, available -> BuyModuleFeature(enabled, available) }
29+
) { enabled, available -> BuyModuleFeature(enabled, available) }
2930

3031
val tipCards = betaFlags.observe().map { TipCardFeature(it.tipsEnabled) }
31-
val tipCardOnHomeScreen = betaFlags.observe().map { TipCardOnHomeScreenFeature(it.tipCardOnHomeScreen) }
32+
val tipCardOnHomeScreen =
33+
betaFlags.observe().map { TipCardOnHomeScreenFeature(it.tipCardOnHomeScreen) }
3234
val tipCardFlippable = betaFlags.observe().map { FlippableTipCardFeature(it.canFlipTipCard) }
3335
val conversations = betaFlags.observe().map { ConversationsFeature(it.conversationsEnabled) }
34-
val conversationsCash = betaFlags.observe().map { ConversationCashFeature(it.conversationCashEnabled) }
36+
val conversationsCash =
37+
betaFlags.observe().map { ConversationCashFeature(it.conversationCashEnabled) }
3538

3639
val cameraGestures = betaFlags.observe().map { CameraGesturesFeature(it.cameraGesturesEnabled) }
3740
val invertedDragZoom = betaFlags.observe().map { InvertedDragZoomFeature(it.invertedDragZoom) }
3841

42+
val galleryEnabled = betaFlags.observe().map { GalleryFeature(it.galleryEnabled) }
43+
3944
val requestKin = betaFlags.observe().map { RequestKinFeature(it.giveRequestsEnabled) }
4045

41-
val balanceCurrencySelection = betaFlags.observe().map { BalanceCurrencyFeature(it.balanceCurrencySelectionEnabled) }
46+
val balanceCurrencySelection =
47+
betaFlags.observe().map { BalanceCurrencyFeature(it.balanceCurrencySelectionEnabled) }
4248

4349
suspend fun isEnabled(feature: PrefsBool): Boolean = betaFlags.isEnabled(feature)
4450
}

api/src/main/java/com/getcode/utils/Logging.kt

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
44
import com.bugsnag.android.BreadcrumbType
55
import com.bugsnag.android.Bugsnag
66
import timber.log.Timber
7+
import kotlin.time.Duration
78
import kotlin.time.measureTime
89

910
sealed interface TraceType {
@@ -103,16 +104,47 @@ fun <T> timedTrace(
103104
type: TraceType = TraceType.Log,
104105
metadata: MetadataBuilder.() -> Unit = {},
105106
error: Throwable? = null,
107+
onComplete: (T, Duration) -> Unit = { _, _ -> },
106108
block: () -> T
107109
): T {
108110
var result: T
109111
val time = measureTime {
110112
result = block()
111113
}
112114

113-
val newMessage = "$message took ${time.inWholeMilliseconds}ms"
114-
trace(newMessage, tag, type, metadata, error)
115+
val timedMetadata: MetadataBuilder.() -> Unit = {
116+
// Add the original metadata
117+
metadata()
118+
"duration" to time.inWholeMilliseconds
119+
}
120+
121+
trace(message, tag, type, timedMetadata, error)
122+
onComplete(result, time)
123+
return result
124+
}
125+
126+
suspend fun <T> timedTraceSuspend(
127+
message: String,
128+
tag: String? = null,
129+
type: TraceType = TraceType.Log,
130+
metadata: MetadataBuilder.() -> Unit = {},
131+
error: Throwable? = null,
132+
onComplete: (T, Duration) -> Unit = { _, _ -> },
133+
block: suspend () -> T
134+
): T {
135+
var result: T
136+
val time = measureTime {
137+
result = block()
138+
}
139+
140+
val timedMetadata: MetadataBuilder.() -> Unit = {
141+
// Add the original metadata
142+
metadata()
143+
"duration" to time.inWholeMilliseconds
144+
}
115145

146+
trace(message, tag, type, timedMetadata, error)
147+
onComplete(result, time)
116148
return result
117149
}
118150

api/src/main/java/com/getcode/utils/Timber.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ suspend fun <T> timberTimerSuspend(message: String, block: suspend () -> T): T {
2929
val result = block()
3030
Timber.d(
3131
"$message took ${
32-
(System.nanoTime() - start).toDouble().div(1000000).roundToLong()
32+
(System.nanoTime() - start).toDouble().div(1_000_000).roundToLong()
3333
}ms",
3434
)
3535
result

0 commit comments

Comments
 (0)