Skip to content

Commit 0418629

Browse files
author
Jeff Yanta
committed
Merge branch 'develop'
2 parents 8d5da6b + 9149ee8 commit 0418629

24 files changed

Lines changed: 181 additions & 119 deletions

api/src/main/java/com/getcode/db/AppDatabase.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@ import androidx.room.Room
88
import androidx.room.RoomDatabase
99
import androidx.room.TypeConverters
1010
import androidx.room.migration.AutoMigrationSpec
11-
import androidx.room.migration.Migration
12-
import androidx.sqlite.db.SupportSQLiteDatabase
1311
import com.getcode.model.*
1412
import com.getcode.network.repository.decodeBase64
15-
import com.getcode.utils.startupLog
13+
import com.getcode.utils.trace
1614
import com.getcode.vendor.Base58
1715
import io.reactivex.rxjava3.core.BackpressureStrategy
1816
import io.reactivex.rxjava3.subjects.BehaviorSubject
@@ -73,7 +71,7 @@ object Database {
7371
fun requireInstance() = instance!!
7472

7573
fun init(context: Context, entropyB64: String) {
76-
startupLog("database init start")
74+
trace("database init start")
7775
instance?.close()
7876
val dbUniqueName = Base58.encode(entropyB64.toByteArray().subByteArray(0, 3))
7977
dbName = "$dbNamePrefix-$dbUniqueName$dbNameSuffix"
@@ -89,7 +87,7 @@ object Database {
8987
instance?.conversationMessageRemoteKeyDao()?.clearRemoteKeys()
9088

9189
isInitSubject.onNext(true)
92-
startupLog("database init end")
90+
trace("database init end")
9391
}
9492

9593
fun close() {

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package com.getcode.network
22

33
import android.content.Context
4-
import android.icu.text.NumberFormat
5-
import android.icu.text.NumberFormat.INTEGERSTYLE
64
import com.getcode.manager.SessionManager
75
import com.getcode.model.Currency
86
import com.getcode.model.CurrencyCode
9-
import com.getcode.model.KinAmount
107
import com.getcode.model.PrefsString
118
import com.getcode.model.Rate
129
import com.getcode.network.client.TransactionReceiver
@@ -19,19 +16,17 @@ import com.getcode.solana.organizer.Organizer
1916
import com.getcode.solana.organizer.Tray
2017
import com.getcode.utils.FormatUtils
2118
import com.getcode.utils.network.NetworkConnectivityListener
22-
import com.getcode.utils.startupLog
19+
import com.getcode.utils.trace
2320
import dagger.hilt.android.qualifiers.ApplicationContext
2421
import io.reactivex.rxjava3.core.Completable
2522
import kotlinx.coroutines.CoroutineScope
2623
import kotlinx.coroutines.Dispatchers
2724
import kotlinx.coroutines.flow.Flow
2825
import kotlinx.coroutines.flow.MutableStateFlow
29-
import kotlinx.coroutines.flow.SharedFlow
3026
import kotlinx.coroutines.flow.SharingStarted
3127
import kotlinx.coroutines.flow.StateFlow
3228
import kotlinx.coroutines.flow.combine
3329
import kotlinx.coroutines.flow.distinctUntilChanged
34-
import kotlinx.coroutines.flow.filterNotNull
3530
import kotlinx.coroutines.flow.flatMapLatest
3631
import kotlinx.coroutines.flow.flowOf
3732
import kotlinx.coroutines.flow.flowOn
@@ -42,17 +37,16 @@ import kotlinx.coroutines.flow.onEach
4237
import kotlinx.coroutines.flow.stateIn
4338
import kotlinx.coroutines.launch
4439
import timber.log.Timber
45-
import java.util.Locale
4640
import java.util.concurrent.TimeUnit
4741
import javax.inject.Inject
48-
import kotlin.math.roundToInt
4942

5043
data class BalanceDisplay(
5144
val marketValue: Double = 0.0,
5245
val formattedValue: String = "",
5346
val currency: Currency? = null,
5447

5548
)
49+
5650
open class BalanceController @Inject constructor(
5751
exchange: Exchange,
5852
networkObserver: NetworkConnectivityListener,
@@ -131,7 +125,7 @@ open class BalanceController @Inject constructor(
131125
}
132126

133127
fun fetchBalance(): Completable {
134-
startupLog("fetchBalance")
128+
trace("fetchBalance")
135129
if (SessionManager.isAuthenticated() != true) {
136130
Timber.d("FetchBalance - Not authenticated")
137131
return Completable.complete()

api/src/main/java/com/getcode/network/client/TransactionReceiver.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.getcode.network.client
22

33
import android.content.Context
44
import com.getcode.model.Kin
5-
import com.getcode.model.intents.IntentDeposit
65
import com.getcode.model.intents.IntentPublicTransfer
76
import com.getcode.model.intents.IntentReceive
87
import com.getcode.model.intents.IntentRemoteReceive
@@ -12,7 +11,7 @@ import com.getcode.solana.organizer.GiftCardAccount
1211
import com.getcode.solana.organizer.Organizer
1312
import com.getcode.solana.organizer.Tray
1413
import com.getcode.utils.ErrorUtils
15-
import com.getcode.utils.startupLog
14+
import com.getcode.utils.trace
1615
import dagger.hilt.android.qualifiers.ApplicationContext
1716
import io.reactivex.rxjava3.core.Completable
1817
import timber.log.Timber
@@ -122,7 +121,7 @@ class TransactionReceiver @Inject constructor(
122121
}
123122

124123
fun receiveFromIncoming(amount: Kin, organizer: Organizer): Completable {
125-
startupLog("receiveFromIncoming $amount")
124+
trace("receiveFromIncoming $amount")
126125
return transactionRepository.receiveFromIncoming(
127126
context, amount, organizer
128127
).map {

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,13 @@
11
package com.getcode.network.repository
22

3-
import android.content.Context
43
import com.codeinc.gen.account.v1.AccountService
5-
import com.codeinc.gen.chat.v1.ChatService
64
import com.codeinc.gen.common.v1.Model
75
import com.getcode.ed25519.Ed25519
8-
import com.getcode.ed25519.Ed25519.KeyPair
96
import com.getcode.model.*
107
import com.getcode.network.api.AccountApi
118
import com.getcode.solana.keys.PublicKey
12-
import com.getcode.utils.startupLog
13-
import com.google.firebase.messaging.Constants.ScionAnalytics.MessageType
14-
import com.google.protobuf.GeneratedMessageLite
15-
import dagger.hilt.android.qualifiers.ApplicationContext
169
import io.reactivex.rxjava3.core.Single
17-
import kotlinx.coroutines.flow.first
18-
import kotlinx.coroutines.flow.map
1910
import timber.log.Timber
20-
import java.io.ByteArrayOutputStream
2111
import javax.inject.Inject
2212

2313
private const val TAG = "AccountRepository"

api/src/main/java/com/getcode/network/source/ChatMessagePagingSource.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import com.getcode.ed25519.Ed25519.KeyPair
66
import com.getcode.model.Chat
77
import com.getcode.model.ChatMessage
88
import com.getcode.model.Cursor
9-
import com.getcode.model.ID
109
import com.getcode.network.client.Client
1110
import com.getcode.network.client.fetchMessagesFor
1211

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

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,84 @@
11
package com.getcode.utils
22

3+
import android.annotation.SuppressLint
4+
import com.bugsnag.android.BreadcrumbType
35
import com.bugsnag.android.Bugsnag
46
import timber.log.Timber
57

8+
sealed interface TraceType {
9+
/**
10+
* An error was sent to Bugsnag (internal use only)
11+
*/
612

7-
fun startupLog(message: String, error: Throwable? = null) {
8-
val tag = "app-startup"
13+
data object Error : TraceType
914

10-
Timber.tag(tag).let {
11-
if (error != null) {
12-
it.e(error, message)
13-
} else {
14-
it.d(message)
15-
}
15+
/**
16+
* A log message
17+
*/
18+
data object Log : TraceType
19+
20+
/**
21+
* A navigation event, such as a window opening or closing
22+
*/
23+
data object Navigation : TraceType
24+
25+
/**
26+
* A background process such as a database query
27+
*/
28+
data object Process : TraceType
29+
30+
/**
31+
* A network request
32+
*/
33+
data object Network : TraceType
34+
35+
/**
36+
* A change in application state, such as launch or memory warning
37+
*/
38+
data object StateChange : TraceType
39+
40+
/**
41+
* A user action, such as tapping a button
42+
*/
43+
data object User : TraceType
44+
}
45+
46+
private fun TraceType.toBugsnagBreadcrumbType(): BreadcrumbType {
47+
return when (this) {
48+
TraceType.Error -> BreadcrumbType.ERROR
49+
TraceType.Log -> BreadcrumbType.LOG
50+
TraceType.Navigation -> BreadcrumbType.NAVIGATION
51+
TraceType.Network -> BreadcrumbType.REQUEST
52+
TraceType.Process -> BreadcrumbType.PROCESS
53+
TraceType.StateChange -> BreadcrumbType.STATE
54+
TraceType.User -> BreadcrumbType.USER
1655
}
56+
}
57+
58+
@SuppressLint("TimberExceptionLogging")
59+
fun trace(
60+
message: String,
61+
tag: String? = null,
62+
type: TraceType = TraceType.Log,
63+
error: Throwable? = null
64+
) {
65+
val tree = if (tag == null) Timber else Timber.tag(tag)
66+
val traceMessage = if (tag == null) message else "trace : $message"
67+
68+
tree.d(traceMessage)
1769

1870
if (Bugsnag.isStarted()) {
19-
Bugsnag.leaveBreadcrumb("$tag | $message")
71+
val breadcrumb = if (tag != null) {
72+
"$tag | $traceMessage"
73+
} else {
74+
traceMessage
75+
}
76+
77+
Bugsnag.leaveBreadcrumb(
78+
breadcrumb,
79+
emptyMap(),
80+
type.toBugsnagBreadcrumbType()
81+
)
2082
}
2183

2284
error?.let(ErrorUtils::handleError)

app/src/main/AndroidManifest.xml

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222

2323
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2424
<!-- needed for network connectivity detection in Api24NetworkObserver -->
25-
<uses-permission android:name="android.permission.READ_PHONE_STATE"
26-
android:maxSdkVersion="28"
27-
/>
25+
<uses-permission
26+
android:name="android.permission.READ_PHONE_STATE"
27+
android:maxSdkVersion="28" />
2828

2929
<queries>
3030
<intent>
@@ -45,7 +45,6 @@
4545
android:name="com.getcode.view.MainActivity"
4646
android:exported="true"
4747
android:hardwareAccelerated="true"
48-
android:label="@string/app_name"
4948
android:launchMode="singleTask"
5049
android:resizeableActivity="false"
5150
android:screenOrientation="portrait"
@@ -57,8 +56,10 @@
5756

5857
<intent-filter android:autoVerify="true">
5958
<action android:name="android.intent.action.VIEW" />
59+
6060
<category android:name="android.intent.category.DEFAULT" />
6161
<category android:name="android.intent.category.BROWSABLE" />
62+
6263
<data
6364
android:host="app.getcode.com"
6465
android:pathPattern="/login.*"
@@ -67,8 +68,10 @@
6768

6869
<intent-filter android:autoVerify="true">
6970
<action android:name="android.intent.action.VIEW" />
71+
7072
<category android:name="android.intent.category.DEFAULT" />
7173
<category android:name="android.intent.category.BROWSABLE" />
74+
7275
<data
7376
android:host="@string/root_url_app_no_protocol"
7477
android:pathPattern="/cash/.*"
@@ -77,8 +80,10 @@
7780

7881
<intent-filter android:autoVerify="true">
7982
<action android:name="android.intent.action.VIEW" />
83+
8084
<category android:name="android.intent.category.DEFAULT" />
8185
<category android:name="android.intent.category.BROWSABLE" />
86+
8287
<data
8388
android:host="@string/root_url_app_no_protocol"
8489
android:pathPattern="/c/.*"
@@ -87,18 +92,10 @@
8792

8893
<intent-filter android:autoVerify="true">
8994
<action android:name="android.intent.action.VIEW" />
90-
<category android:name="android.intent.category.DEFAULT" />
91-
<category android:name="android.intent.category.BROWSABLE" />
92-
<data
93-
android:host="@string/root_url_tipcard_no_protocol"
94-
android:pathPattern="/x/.*"
95-
android:scheme="https" />
96-
</intent-filter>
9795

98-
<intent-filter android:autoVerify="true">
99-
<action android:name="android.intent.action.VIEW" />
10096
<category android:name="android.intent.category.DEFAULT" />
10197
<category android:name="android.intent.category.BROWSABLE" />
98+
10299
<data
103100
android:host="cash.getcode.com"
104101
android:pathPattern="/cash/.*"
@@ -107,6 +104,7 @@
107104

108105
<intent-filter android:autoVerify="true">
109106
<action android:name="android.intent.action.VIEW" />
107+
110108
<category android:name="android.intent.category.DEFAULT" />
111109
<category android:name="android.intent.category.BROWSABLE" />
112110

@@ -129,15 +127,15 @@
129127
</intent-filter>
130128

131129
<intent-filter>
132-
<action android:name="android.intent.action.VIEW" />
130+
<action android:name="android.intent.action.VIEW" />
133131

134-
<category android:name="android.intent.category.DEFAULT" />
135-
<category android:name="android.intent.category.BROWSABLE" />
132+
<category android:name="android.intent.category.DEFAULT" />
133+
<category android:name="android.intent.category.BROWSABLE" />
136134

137-
<data
138-
android:host="@string/root_url_sdk_no_protocol"
139-
android:pathPattern="/v1/elements/.*/"
140-
android:scheme="codewallet" />
135+
<data
136+
android:host="@string/root_url_sdk_no_protocol"
137+
android:pathPattern="/v1/elements/.*/"
138+
android:scheme="codewallet" />
141139
</intent-filter>
142140

143141
</activity>

app/src/main/java/com/getcode/App.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.bugsnag.android.Bugsnag
66
import com.getcode.manager.AuthManager
77
import com.getcode.network.integrity.DeviceCheck
88
import com.getcode.utils.ErrorUtils
9-
import com.getcode.utils.startupLog
9+
import com.getcode.utils.trace
1010
import com.getcode.view.main.bill.CashBillAssets
1111
import com.google.firebase.Firebase
1212
import com.google.firebase.initialize
@@ -62,6 +62,6 @@ class App : Application() {
6262
} else {
6363
Bugsnag.start(this)
6464
}
65-
startupLog("app onCreate end")
65+
trace("app onCreate end")
6666
}
6767
}

0 commit comments

Comments
 (0)