66package org.bitcoindevkit.devkitwallet.presentation.ui.screens.intro
77
88import androidx.compose.foundation.background
9+ import androidx.compose.foundation.border
910import androidx.compose.foundation.clickable
11+ import androidx.compose.foundation.layout.Arrangement
12+ import androidx.compose.foundation.layout.Box
1013import androidx.compose.foundation.layout.Column
1114import androidx.compose.foundation.layout.Row
1215import androidx.compose.foundation.layout.Spacer
1316import androidx.compose.foundation.layout.fillMaxSize
1417import androidx.compose.foundation.layout.fillMaxWidth
1518import androidx.compose.foundation.layout.height
1619import androidx.compose.foundation.layout.padding
20+ import androidx.compose.foundation.layout.size
1721import androidx.compose.foundation.selection.selectable
22+ import androidx.compose.foundation.shape.CircleShape
1823import androidx.compose.foundation.shape.RoundedCornerShape
24+ import androidx.compose.material3.HorizontalDivider
1925import androidx.compose.material3.OutlinedTextField
2026import androidx.compose.material3.OutlinedTextFieldDefaults
2127import androidx.compose.material3.RadioButton
@@ -30,19 +36,26 @@ import androidx.compose.runtime.remember
3036import androidx.compose.runtime.setValue
3137import androidx.compose.ui.Alignment
3238import androidx.compose.ui.Modifier
39+ import androidx.compose.ui.draw.clip
3340import androidx.compose.ui.draw.shadow
3441import androidx.compose.ui.text.TextStyle
3542import androidx.compose.ui.unit.dp
43+ import androidx.compose.ui.unit.sp
3644import androidx.constraintlayout.compose.ConstraintLayout
3745import androidx.navigation.NavController
3846import org.bitcoindevkit.devkitwallet.presentation.WalletCreateType
3947import org.bitcoindevkit.devkitwallet.data.ActiveWalletScriptType
4048import org.bitcoindevkit.devkitwallet.data.NewWalletConfig
49+ import org.bitcoindevkit.devkitwallet.data.TxDetails
4150import org.bitcoindevkit.devkitwallet.presentation.ui.components.NeutralButton
4251import org.bitcoindevkit.devkitwallet.presentation.ui.components.SecondaryScreensAppBar
4352import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
4453import org.bitcoindevkit.devkitwallet.presentation.theme.monoRegular
54+ import org.bitcoindevkit.devkitwallet.presentation.ui.components.confirmedTransactionsItem
55+ import org.bitcoindevkit.devkitwallet.presentation.ui.components.pendingTransactionsItem
56+ import org.bitcoindevkit.devkitwallet.presentation.ui.screens.wallet.viewTransaction
4557import org.rustbitcoin.bitcoin.Network
58+ import org.rustbitcoin.bitcoin.Script
4659
4760@Composable
4861internal fun CreateNewWalletScreen (
@@ -65,9 +78,9 @@ internal fun CreateNewWalletScreen(
6578 val (choices, button) = createRefs()
6679
6780 val walletName: MutableState <String > = remember { mutableStateOf(" " ) }
68- var selectedNetwork: Network by remember { mutableStateOf(Network .TESTNET ) }
69- val network = listOf (Network .TESTNET , Network .SIGNET , Network .REGTEST )
70- var selectedScriptType: ActiveWalletScriptType by remember { mutableStateOf(ActiveWalletScriptType .P2TR ) }
81+ val selectedNetwork: MutableState < Network > = remember { mutableStateOf(Network .TESTNET ) }
82+ val networks = listOf (Network .TESTNET , Network .SIGNET , Network .REGTEST )
83+ val selectedScriptType: MutableState < ActiveWalletScriptType > = remember { mutableStateOf(ActiveWalletScriptType .P2TR ) }
7184 val scriptTypes = listOf (ActiveWalletScriptType .P2TR , ActiveWalletScriptType .P2WPKH )
7285
7386 Column (
@@ -103,30 +116,10 @@ internal fun CreateNewWalletScreen(
103116 ),
104117 )
105118
106- Spacer (modifier = Modifier .padding(24 .dp))
107- Text (
108- text = " Network" ,
109- color = DevkitWalletColors .white
110- )
111-
112- network.forEach {
113- RadioButtonWithLabel (
114- label = it.displayString(),
115- isSelected = selectedNetwork == it,
116- onSelect = { selectedNetwork = it }
117- )
118- }
119-
120- Spacer (modifier = Modifier .padding(24 .dp))
121- Text (text = " Script Type" , color = DevkitWalletColors .white)
122-
123- scriptTypes.forEach {
124- RadioButtonWithLabel (
125- label = it.displayString(),
126- isSelected = selectedScriptType == it,
127- onSelect = { selectedScriptType = it }
128- )
129- }
119+ Spacer (modifier = Modifier .padding(12 .dp))
120+ NetworkOptionCard (networks, selectedNetwork)
121+ Spacer (modifier = Modifier .padding(16 .dp))
122+ ScriptTypeOptionCard (scriptTypes, selectedScriptType)
130123 }
131124
132125 Column (
@@ -150,8 +143,8 @@ internal fun CreateNewWalletScreen(
150143 onClick = {
151144 val newWalletConfig = NewWalletConfig (
152145 name = walletName.value,
153- network = selectedNetwork,
154- scriptType = selectedScriptType
146+ network = selectedNetwork.value ,
147+ scriptType = selectedScriptType.value
155148 )
156149 onBuildWalletButtonClicked(
157150 WalletCreateType .FROMSCRATCH (newWalletConfig)
@@ -163,11 +156,89 @@ internal fun CreateNewWalletScreen(
163156 }
164157}
165158
159+ @Composable
160+ fun NetworkOptionCard (networks : List <Network >, selectedNetwork : MutableState <Network >) {
161+ Column (
162+ Modifier
163+ .fillMaxWidth()
164+ .border(
165+ width = 2 .dp,
166+ color = DevkitWalletColors .secondary,
167+ shape = RoundedCornerShape (16 .dp)
168+ )
169+ .background(
170+ color = DevkitWalletColors .primaryLight,
171+ shape = RoundedCornerShape (16 .dp)
172+ ),
173+ verticalArrangement = Arrangement .Center ,
174+ horizontalAlignment = Alignment .Start
175+ ) {
176+ Text (
177+ text = " Network" ,
178+ fontFamily = monoRegular,
179+ fontSize = 18 .sp,
180+ color = DevkitWalletColors .white,
181+ modifier = Modifier .padding(top = 8 .dp, start = 8 .dp, bottom = 8 .dp)
182+ )
183+
184+ HorizontalDivider (color = DevkitWalletColors .secondary, thickness = 2 .dp, modifier = Modifier .padding(bottom = 8 .dp))
185+
186+ networks.forEachIndexed { index, it ->
187+ RadioButtonWithLabel (
188+ label = it.displayString(),
189+ isSelected = selectedNetwork.value == it,
190+ onSelect = { selectedNetwork.value = it }
191+ )
192+ if (index == 2 ) Spacer (modifier = Modifier .padding(bottom = 8 .dp))
193+ }
194+ }
195+ }
196+
197+ @Composable
198+ fun ScriptTypeOptionCard (scriptTypes : List <ActiveWalletScriptType >, selectedScriptType : MutableState <ActiveWalletScriptType >) {
199+ Column (
200+ Modifier
201+ .fillMaxWidth()
202+ .border(
203+ width = 2 .dp,
204+ color = DevkitWalletColors .secondary,
205+ shape = RoundedCornerShape (16 .dp)
206+ )
207+ .background(
208+ color = DevkitWalletColors .primaryLight,
209+ shape = RoundedCornerShape (16 .dp)
210+ ),
211+ verticalArrangement = Arrangement .Center ,
212+ horizontalAlignment = Alignment .Start
213+ ) {
214+ Text (
215+ text = " Script Type" ,
216+ fontFamily = monoRegular,
217+ fontSize = 18 .sp,
218+ color = DevkitWalletColors .white,
219+ modifier = Modifier .padding(top = 8 .dp, start = 8 .dp, bottom = 8 .dp)
220+ )
221+
222+ HorizontalDivider (color = DevkitWalletColors .secondary, thickness = 2 .dp, modifier = Modifier .padding(bottom = 8 .dp))
223+
224+ scriptTypes.forEachIndexed { index, it ->
225+ RadioButtonWithLabel (
226+ label = it.displayString(),
227+ isSelected = selectedScriptType.value == it,
228+ onSelect = { selectedScriptType.value = it }
229+ )
230+ if (index == 1 ) Spacer (modifier = Modifier .padding(bottom = 8 .dp))
231+ }
232+ }
233+ }
234+
166235@Composable
167236fun RadioButtonWithLabel (label : String , isSelected : Boolean , onSelect : () -> Unit ) {
168237 Row (
169238 verticalAlignment = Alignment .CenterVertically ,
239+ horizontalArrangement = Arrangement .spacedBy(2 .dp),
170240 modifier = Modifier
241+ .padding(0 .dp)
171242 .selectable(
172243 selected = isSelected,
173244 onClick = onSelect
@@ -179,13 +250,19 @@ fun RadioButtonWithLabel(label: String, isSelected: Boolean, onSelect: () -> Uni
179250 colors = RadioButtonDefaults .colors(
180251 selectedColor = DevkitWalletColors .accent1,
181252 unselectedColor = DevkitWalletColors .accent2
182- )
253+ ),
254+ modifier = Modifier
255+ .padding(0 .dp)
256+ .size(40 .dp)
183257 )
184258 Text (
185259 text = label,
186260 color = DevkitWalletColors .white,
261+ fontFamily = monoRegular,
262+ fontSize = 14 .sp,
187263 modifier = Modifier
188264 .clickable(onClick = onSelect)
265+ .padding(0 .dp)
189266 )
190267 }
191268}
0 commit comments