Skip to content

Commit 49de9ae

Browse files
bmc08gtclaude
andauthored
feat(contacts): add shared contacts module with persistence layer (#775)
* feat(verification): support full-screen and target navigation for drop-in use cases Add `target` and `fullScreen` params to AppRoute.Verification so the flow can forward-navigate on success (replace) and render with status bar padding when used outside of a modal sheet (e.g. onboarding). Wire phone verification into the onboarding flow from AccessKeyScreen. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Brandon McAnsh <git@bmcreations.dev> * feat(contacts): add shared contacts module with persistence layer Introduces the contacts module with: - ContactCoordinator for orchestrating contact sync - ScopeAwareContactReader with full-access and picker-based strategies - ContactChecksum for detecting contact list changes - Hilt module for DI wiring Adds persistence support: - ContactDao with Room queries for contact mappings and sync state - ContactMappingEntity and ContactSyncStateEntity - FlipcashDatabase v16 schema migration Signed-off-by: Brandon McAnsh <git@bmcreations.dev> * feat(contacts): reset contact state on logout via SessionController --------- Signed-off-by: Brandon McAnsh <git@bmcreations.dev> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 1d33233 commit 49de9ae

23 files changed

Lines changed: 1563 additions & 1 deletion

File tree

apps/flipcash/app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ dependencies {
150150
implementation(project(":apps:flipcash:shared:google-play-billing"))
151151
implementation(project(":apps:flipcash:shared:currency-selection:core"))
152152
implementation(project(":apps:flipcash:shared:currency-selection:ui"))
153+
implementation(project(":apps:flipcash:shared:contacts"))
153154
implementation(project(":apps:flipcash:shared:notifications"))
154155
implementation(project(":apps:flipcash:shared:onramp:coinbase"))
155156
implementation(project(":apps:flipcash:shared:onramp:deeplinks"))

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ 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.contacts.ContactCoordinator
20+
import com.flipcash.app.contacts.LocalContactCoordinator
1921
import com.flipcash.app.core.LocalUserManager
2022
import com.flipcash.app.core.verification.email.EmailCodeChannel
2123
import com.flipcash.app.core.verification.email.LocalEmailCodeChannel
@@ -115,6 +117,9 @@ class MainActivity : FragmentActivity() {
115117
@Inject
116118
lateinit var emailCodeChannel: EmailCodeChannel
117119

120+
@Inject
121+
lateinit var contactCoordinator: ContactCoordinator
122+
118123
@Inject
119124
lateinit var coinbaseOnRampController: CoinbaseOnRampController
120125

@@ -141,6 +146,7 @@ class MainActivity : FragmentActivity() {
141146
LocalBillPlaygroundController provides billPlaygroundController,
142147
LocalAppUpdater provides appUpdater,
143148
LocalEmailCodeChannel provides emailCodeChannel,
149+
LocalContactCoordinator provides contactCoordinator,
144150
LocalCoinbaseOnRampController provides coinbaseOnRampController,
145151
LocalUiTesting provides intent.getBooleanExtra(UI_TEST, false),
146152
) {
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
build/
2+
.gradle/
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
plugins {
2+
alias(libs.plugins.flipcash.android.feature)
3+
}
4+
5+
android {
6+
namespace = "${Gradle.flipcashNamespace}.shared.contacts"
7+
}
8+
9+
dependencies {
10+
testImplementation(kotlin("test"))
11+
testImplementation(libs.bundles.unit.testing)
12+
testImplementation(libs.robolectric)
13+
14+
implementation(project(":services:flipcash"))
15+
implementation(project(":services:opencode"))
16+
implementation(project(":apps:flipcash:shared:persistence:db"))
17+
implementation(project(":apps:flipcash:shared:phone"))
18+
implementation(project(":apps:flipcash:shared:featureflags"))
19+
implementation(project(":libs:encryption:keys"))
20+
implementation(project(":libs:network:connectivity:public"))
21+
implementation(libs.androidx.lifecycle.process)
22+
implementation(libs.bundles.room)
23+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
2+
3+
<uses-permission android:name="android.permission.READ_CONTACTS" />
4+
<application>
5+
6+
</application>
7+
8+
</manifest>

0 commit comments

Comments
 (0)