Skip to content

Commit a90e9d4

Browse files
ui: clean up the wallet creation screen
1 parent fb8947b commit a90e9d4

File tree

1 file changed

+107
-30
lines changed
  • app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/screens/intro

1 file changed

+107
-30
lines changed

app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/screens/intro/CreateNewWallet.kt

Lines changed: 107 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,22 @@
66
package org.bitcoindevkit.devkitwallet.presentation.ui.screens.intro
77

88
import androidx.compose.foundation.background
9+
import androidx.compose.foundation.border
910
import androidx.compose.foundation.clickable
11+
import androidx.compose.foundation.layout.Arrangement
12+
import androidx.compose.foundation.layout.Box
1013
import androidx.compose.foundation.layout.Column
1114
import androidx.compose.foundation.layout.Row
1215
import androidx.compose.foundation.layout.Spacer
1316
import androidx.compose.foundation.layout.fillMaxSize
1417
import androidx.compose.foundation.layout.fillMaxWidth
1518
import androidx.compose.foundation.layout.height
1619
import androidx.compose.foundation.layout.padding
20+
import androidx.compose.foundation.layout.size
1721
import androidx.compose.foundation.selection.selectable
22+
import androidx.compose.foundation.shape.CircleShape
1823
import androidx.compose.foundation.shape.RoundedCornerShape
24+
import androidx.compose.material3.HorizontalDivider
1925
import androidx.compose.material3.OutlinedTextField
2026
import androidx.compose.material3.OutlinedTextFieldDefaults
2127
import androidx.compose.material3.RadioButton
@@ -30,19 +36,26 @@ import androidx.compose.runtime.remember
3036
import androidx.compose.runtime.setValue
3137
import androidx.compose.ui.Alignment
3238
import androidx.compose.ui.Modifier
39+
import androidx.compose.ui.draw.clip
3340
import androidx.compose.ui.draw.shadow
3441
import androidx.compose.ui.text.TextStyle
3542
import androidx.compose.ui.unit.dp
43+
import androidx.compose.ui.unit.sp
3644
import androidx.constraintlayout.compose.ConstraintLayout
3745
import androidx.navigation.NavController
3846
import org.bitcoindevkit.devkitwallet.presentation.WalletCreateType
3947
import org.bitcoindevkit.devkitwallet.data.ActiveWalletScriptType
4048
import org.bitcoindevkit.devkitwallet.data.NewWalletConfig
49+
import org.bitcoindevkit.devkitwallet.data.TxDetails
4150
import org.bitcoindevkit.devkitwallet.presentation.ui.components.NeutralButton
4251
import org.bitcoindevkit.devkitwallet.presentation.ui.components.SecondaryScreensAppBar
4352
import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
4453
import 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
4557
import org.rustbitcoin.bitcoin.Network
58+
import org.rustbitcoin.bitcoin.Script
4659

4760
@Composable
4861
internal 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
167236
fun 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

Comments
 (0)