Skip to content

Commit 5ab5ed6

Browse files
committed
Migrate to Nav-3
1 parent 6312d72 commit 5ab5ed6

3 files changed

Lines changed: 42 additions & 36 deletions

File tree

app/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,13 @@ dependencies {
7878

7979
// Bitcoin Development Kit
8080
implementation("org.bitcoindevkit:bdk-android:2.3.1")
81+
// Nav-3
82+
implementation("androidx.navigation:navigation-compose:2.8.0")
83+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
8184

8285
// QR codes
8386
implementation("com.google.zxing:core:3.5.4")
87+
implementation("com.google.android.gms:play-services-tflite-support:16.4.0")
8488

8589
// Tests
8690
testImplementation("junit:junit:4.13.2")

app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/navigation/AppNavigation.kt

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ import org.bitcoindevkit.devkitwallet.presentation.viewmodels.WalletViewModel
4747
// M3 motion easing curves
4848
private val EmphasizedDecelerate = CubicBezierEasing(0.05f, 0.7f, 0.1f, 1.0f)
4949
private val EmphasizedAccelerate = CubicBezierEasing(0.3f, 0.0f, 0.8f, 0.15f)
50-
5150
private const val ENTER_DURATION = 400
5251
private const val EXIT_DURATION = 200
5352
private const val FADE_IN_DURATION = 300
@@ -99,7 +98,6 @@ fun AppNavigation(
9998
onToggleTheme: () -> Unit,
10099
) {
101100
val navController: NavHostController = rememberNavController()
102-
103101
val walletViewModel = remember(activeWallet) { activeWallet?.let { WalletViewModel(it) } }
104102
val addressViewModel = remember(activeWallet) { activeWallet?.let { AddressViewModel(it) } }
105103
val sendViewModel = remember(activeWallet) { activeWallet?.let { SendViewModel(it) } }
@@ -124,73 +122,77 @@ fun AppNavigation(
124122
composable<WalletChoiceScreen> {
125123
WalletChoiceScreen(navController = navController)
126124
}
127-
128125
composable<ActiveWalletsScreen> {
129126
ActiveWalletsScreen(
130127
activeWallets = activeWallets,
131128
navController = navController,
132-
onBuildWalletButtonClicked
129+
onBuildWalletButtonClicked = onBuildWalletButtonClicked
133130
)
134131
}
135-
136132
composable<CreateNewWalletScreen> {
137133
CreateNewWalletScreen(navController = navController, onBuildWalletButtonClicked)
138134
}
139-
140135
composable<WalletRecoveryScreen> {
141136
RecoverWalletScreen(onAction = onBuildWalletButtonClicked, navController = navController)
142137
}
143138

144139
// Wallet screens
145140
composable<HomeScreen> {
146-
WalletHomeScreen(
147-
state = walletViewModel!!.state,
148-
onAction = walletViewModel::onAction,
149-
navController = navController,
150-
)
141+
if (walletViewModel != null) {
142+
WalletHomeScreen(
143+
state = walletViewModel.state,
144+
onAction = walletViewModel::onAction,
145+
navController = navController,
146+
)
147+
}
151148
}
152-
153149
composable<ReceiveScreen> {
154-
ReceiveScreen(
155-
state = addressViewModel!!.state,
156-
onAction = addressViewModel::onAction,
157-
navController = navController,
158-
)
150+
if (addressViewModel != null) {
151+
ReceiveScreen(
152+
state = addressViewModel.state,
153+
onAction = addressViewModel::onAction,
154+
navController = navController,
155+
)
156+
}
157+
}
158+
composable<SendScreen> {
159+
if (sendViewModel != null) {
160+
SendScreen(navController, sendViewModel)
161+
}
159162
}
160-
161-
composable<SendScreen> { SendScreen(navController, sendViewModel!!) }
162-
163163
composable<RbfScreen> {
164164
val args = it.toRoute<RbfScreen>()
165165
RBFScreen(args.txid, navController)
166166
}
167-
168-
composable<TransactionHistoryScreen> { TransactionHistoryScreen(navController, activeWallet!!) }
169-
167+
composable<TransactionHistoryScreen> {
168+
// Ensure activeWallet is available
169+
activeWallet?.let { wallet ->
170+
TransactionHistoryScreen(navController, wallet)
171+
}
172+
}
170173
composable<TransactionScreen> {
171174
val args = it.toRoute<TransactionScreen>()
172175
TransactionScreen(args.txid, navController)
173176
}
174177

175178
// Settings/drawer screens
176179
composable<SettingsScreen> { SettingsScreen(navController = navController) }
177-
178180
composable<AboutScreen> { AboutScreen(navController = navController) }
179-
180181
composable<RecoveryPhraseScreen> {
181-
RecoveryDataScreen(activeWallet!!.getWalletSecrets(), navController = navController)
182+
activeWallet?.let { wallet ->
183+
RecoveryDataScreen(wallet.getWalletSecrets(), navController = navController)
184+
}
182185
}
183-
184186
composable<BlockchainClientScreen> {
185-
BlockchainClientScreen(
186-
state = walletViewModel!!.state,
187-
onAction = walletViewModel::onAction,
188-
navController = navController,
189-
)
187+
if (walletViewModel != null) {
188+
BlockchainClientScreen(
189+
state = walletViewModel.state,
190+
onAction = walletViewModel::onAction,
191+
navController = navController,
192+
)
193+
}
190194
}
191-
192195
composable<LogsScreen> { LogsScreen(navController = navController) }
193-
194196
composable<ThemeScreen> {
195197
ThemeScreen(
196198
useDarkTheme = useDarkTheme,
@@ -199,4 +201,4 @@ fun AppNavigation(
199201
)
200202
}
201203
}
202-
}
204+
}

app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/navigation/Destinations.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,4 @@ object TransactionHistoryScreen
5656
data class TransactionScreen(val txid: String)
5757

5858
@Serializable
59-
data class RbfScreen(val txid: String)
59+
data class RbfScreen(val txid: String)

0 commit comments

Comments
 (0)