Skip to content

Commit e21fd27

Browse files
authored
Merge branch 'code/cash' into dependabot/gradle/code/cash/navigation3-1.1.0
2 parents 1d05905 + 27f7311 commit e21fd27

303 files changed

Lines changed: 10097 additions & 4795 deletions

File tree

Some content is hidden

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

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,8 @@ jobs:
5050
- name: Setup Mixpanel API Key
5151
run: echo MIXPANEL_API_KEY=\"${{ secrets.FLIPCASH_MIXPANEL_API_KEY }}\" >> ./local.properties
5252

53+
- name: Setup Coinbase OnRamp API Key
54+
run: echo COINBASE_ONRAMP_API_KEY=${{ secrets.COINBASE_ONRAMP_API_KEY }} >> ./local.properties
55+
5356
- name: Run Flipcash tests
5457
run: bundle exec fastlane android flipcash_tests

apps/flipcash/app/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ dependencies {
152152
implementation(project(":apps:flipcash:shared:currency-selection:core"))
153153
implementation(project(":apps:flipcash:shared:currency-selection:ui"))
154154
implementation(project(":apps:flipcash:shared:notifications"))
155-
implementation(project(":apps:flipcash:shared:onramp:common"))
156155
implementation(project(":apps:flipcash:shared:onramp:coinbase"))
157156
implementation(project(":apps:flipcash:shared:onramp:deeplinks"))
158157
implementation(project(":apps:flipcash:shared:payments"))
@@ -178,12 +177,12 @@ dependencies {
178177
implementation(project(":apps:flipcash:features:backupkey"))
179178
implementation(project(":apps:flipcash:features:shareapp"))
180179
implementation(project(":apps:flipcash:features:withdrawal"))
181-
implementation(project(":apps:flipcash:features:payments"))
182180
implementation(project(":apps:flipcash:features:onramp"))
183181
implementation(project(":apps:flipcash:features:contact-verification"))
184182
implementation(project(":apps:flipcash:features:tokens"))
185183
implementation(project(":apps:flipcash:features:transactions"))
186184
implementation(project(":apps:flipcash:features:bill-customization"))
185+
implementation(project(":apps:flipcash:features:currency-creator"))
187186
implementation(project(":apps:flipcash:features:discovery"))
188187
implementation(project(":apps:flipcash:features:userflags"))
189188

apps/flipcash/app/src/main/kotlin/com/flipcash/app/MainActivity.kt

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@ import com.flipcash.app.appsettings.LocalAppSettings
1616
import com.flipcash.app.bill.customization.BillPlaygroundController
1717
import com.flipcash.app.bill.customization.LocalBillPlaygroundController
1818
import com.flipcash.app.billing.BillingClient
19-
import com.flipcash.app.billing.LocalBillingClient
2019
import com.flipcash.app.core.LocalUserManager
20+
import com.flipcash.app.core.verification.email.EmailCodeChannel
21+
import com.flipcash.app.core.verification.email.LocalEmailCodeChannel
22+
import com.flipcash.app.onramp.ExternalWalletOnRampController
23+
import com.flipcash.app.onramp.LocalExternalWalletOnRampController
24+
import com.flipcash.app.onramp.LocalCoinbaseOnRampController
25+
import com.flipcash.app.onramp.CoinbaseOnRampController
2126
import com.flipcash.app.featureflags.FeatureFlagController
2227
import com.flipcash.app.featureflags.LocalFeatureFlags
2328
import com.flipcash.app.internal.ui.App
24-
import com.flipcash.app.onramp.LocalOnRampAmountController
25-
import com.flipcash.app.onramp.OnRampAmountController
26-
import com.flipcash.app.payments.LocalPaymentController
27-
import com.flipcash.app.payments.PaymentController
2829
import com.flipcash.app.phone.LocalPhoneUtils
2930
import com.flipcash.app.phone.PhoneUtils
3031
import com.flipcash.app.router.LocalRouter
@@ -38,10 +39,7 @@ import com.flipcash.app.updates.LocalAppUpdater
3839
import com.flipcash.services.user.UserManager
3940
import com.getcode.libs.analytics.LocalAnalytics
4041
import com.getcode.opencode.compose.LocalExchange
41-
import com.getcode.opencode.compose.LocalTransactionController
42-
import com.getcode.opencode.controllers.TransactionController
4342
import com.getcode.opencode.exchange.Exchange
44-
import com.getcode.solana.rpc.RpcConfig
4543
import com.getcode.ui.testing.LocalUiTesting
4644
import com.getcode.util.permissions.PermissionChecker
4745
import com.getcode.util.permissions.ProvidePermissionChecker
@@ -51,8 +49,6 @@ import com.getcode.util.resources.ResourceHelper
5149
import com.getcode.util.resources.SettingsHelper
5250
import com.getcode.util.vibration.LocalVibrator
5351
import com.getcode.util.vibration.Vibrator
54-
import com.getcode.utils.CurrencyUtils
55-
import com.getcode.utils.LocalCurrencyUtils
5652
import com.getcode.utils.network.LocalNetworkObserver
5753
import com.getcode.utils.network.NetworkConnectivityListener
5854
import dagger.hilt.android.AndroidEntryPoint
@@ -76,9 +72,6 @@ class MainActivity : FragmentActivity() {
7672
@Inject
7773
lateinit var networkObserver: NetworkConnectivityListener
7874

79-
@Inject
80-
lateinit var currencyUtils: CurrencyUtils
81-
8275
@Inject
8376
lateinit var vibrator: Vibrator
8477

@@ -109,30 +102,26 @@ class MainActivity : FragmentActivity() {
109102
@Inject
110103
lateinit var featureFlagController: FeatureFlagController
111104

112-
@Inject
113-
lateinit var paymentController: PaymentController
114-
115105
@Inject
116106
lateinit var analytics: FlipcashAnalyticsService
117107

118-
@Inject
119-
lateinit var solanaRpcConfig: RpcConfig
120-
121108
@Inject
122109
lateinit var phoneUtils: PhoneUtils
123110

124-
@Inject
125-
lateinit var onRampAmountController: OnRampAmountController
126-
127111
@Inject
128112
lateinit var billPlaygroundController: BillPlaygroundController
129113

130114
@Inject
131115
lateinit var appUpdater: AppUpdateController
132116

133117
@Inject
134-
lateinit var transactionController: TransactionController
118+
lateinit var emailCodeChannel: EmailCodeChannel
135119

120+
@Inject
121+
lateinit var externalWalletOnRampController: ExternalWalletOnRampController
122+
123+
@Inject
124+
lateinit var coinbaseOnRampController: CoinbaseOnRampController
136125

137126
override fun onCreate(savedInstanceState: Bundle?) {
138127
super.onCreate(savedInstanceState)
@@ -146,28 +135,25 @@ class MainActivity : FragmentActivity() {
146135
LocalNetworkObserver provides networkObserver,
147136
LocalExchange provides exchange,
148137
LocalAnalytics provides analytics,
149-
LocalCurrencyUtils provides currencyUtils,
150138
LocalVibrator provides vibrator,
151139
LocalRouter provides router,
152140
LocalUserManager provides userManager,
153141
LocalSessionController provides sessionController,
154-
LocalBillingClient provides billing,
155142
LocalShareController provides shareController,
156143
LocalAppSettings provides appSettingsCoordinator,
157144
LocalFeatureFlags provides featureFlagController,
158-
LocalPaymentController provides paymentController,
159-
LocalOnRampAmountController provides onRampAmountController,
160-
LocalTransactionController provides transactionController,
161145
LocalPhoneUtils provides phoneUtils,
162146
LocalBillPlaygroundController provides billPlaygroundController,
163147
LocalAppUpdater provides appUpdater,
148+
LocalEmailCodeChannel provides emailCodeChannel,
149+
LocalExternalWalletOnRampController provides externalWalletOnRampController,
150+
LocalCoinbaseOnRampController provides coinbaseOnRampController,
164151
LocalUiTesting provides intent.getBooleanExtra(UI_TEST, false),
165152
) {
166153
ProvidePermissionChecker(permissionChecker) {
167154
Rinku {
168155
App(
169156
tipsEngine = tipsEngine,
170-
solanaRpcConfig = solanaRpcConfig,
171157
)
172158
}
173159
}

apps/flipcash/app/src/main/kotlin/com/flipcash/app/inject/AppModule.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import androidx.core.app.NotificationManagerCompat
77
import com.flipcash.app.android.BuildConfig
88
import com.flipcash.app.core.android.VersionInfo
99
import com.flipcash.app.core.annotations.AccountType
10+
import com.getcode.util.resources.AndroidContentReader
1011
import com.getcode.util.resources.AndroidResources
1112
import com.getcode.util.resources.AndroidSettingsHelper
13+
import com.getcode.util.resources.ContentReader
1214
import com.getcode.util.resources.ResourceHelper
1315
import com.getcode.util.resources.SettingsHelper
1416
import dagger.Module
@@ -33,6 +35,11 @@ object AppModule {
3335
@AccountType
3436
fun providesAccountType(): String = "flipcash.com"
3537

38+
@Provides
39+
fun providesContentReader(
40+
@ApplicationContext context: Context,
41+
): ContentReader = AndroidContentReader(context)
42+
3643
@Provides
3744
fun providesResourceHelper(
3845
@ApplicationContext context: Context,
Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,34 @@
11
package com.flipcash.app.internal.debug
22

33
import com.bugsnag.android.OnErrorCallback
4+
import com.getcode.utils.ErrorUtils
5+
import com.getcode.utils.TraceManager
6+
import io.grpc.StatusException
47

58
internal val FlipcashErrorCallback = OnErrorCallback onError@{ event ->
6-
// Only tag unhandled errors — handled errors go through ErrorUtils.handleError()
7-
if (!event.isUnhandled) return@onError true
89
val error = event.originalError ?: return@onError true
9-
1010
val cause = error.cause ?: error
11-
event.addMetadata("alert", "slack_notify", true)
12-
event.addMetadata("alert", "error_type", cause.javaClass.simpleName)
13-
event.addMetadata("alert", "error_family", cause.javaClass.enclosingClass?.simpleName ?: "Unknown")
11+
12+
// Discard gRPC client-error / validation status codes — these are not bugs
13+
if (cause is StatusException && cause.status.code in ErrorUtils.ignoredGrpcStatusCodes) {
14+
return@onError false
15+
}
16+
17+
// Discard handled gRPC INTERNAL — server-side errors, not actionable from the client
18+
if (!event.isUnhandled && cause is StatusException && cause.status.code == io.grpc.Status.Code.INTERNAL) {
19+
return@onError false
20+
}
21+
22+
if (!event.isUnhandled) return@onError true
23+
24+
// Attach recent logs
25+
val logFile = TraceManager.getLogFile(includeHeader = false)
26+
if (logFile != null && logFile.exists()) {
27+
// Bugsnag metadata has a size limit (~1MB per event).
28+
// Attach the last ~64KB of log content as a metadata tab.
29+
val tail = logFile.readText().takeLast(64_000)
30+
event.addMetadata("App Logs", "app_log", tail)
31+
}
32+
1433
true
1534
}

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/TraceInitializer.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ class TraceInitializer: Initializer<Unit> {
2222
Timber.plant(FlipcashDebugTree)
2323
} else {
2424
CoroutineScope(Dispatchers.IO).launch {
25-
val config = Configuration.load(context)
26-
config.addOnError(FlipcashErrorCallback)
25+
val config = Configuration.load(context).apply {
26+
addOnError(FlipcashErrorCallback)
27+
}
2728
Bugsnag.start(context, config)
2829

2930
ErrorUtils.addReporter(BugsnagErrorReporter())

0 commit comments

Comments
 (0)