55
66package org.bitcoindevkit.devkitwallet.presentation.ui.screens.intro
77
8- import androidx.compose.foundation.background
9- import androidx.compose.foundation.clickable
8+ import androidx.compose.foundation.BorderStroke
109import androidx.compose.foundation.layout.Arrangement
1110import androidx.compose.foundation.layout.Column
1211import androidx.compose.foundation.layout.Row
1312import androidx.compose.foundation.layout.fillMaxSize
1413import androidx.compose.foundation.layout.fillMaxWidth
1514import androidx.compose.foundation.layout.padding
15+ import androidx.compose.foundation.layout.size
1616import androidx.compose.foundation.shape.RoundedCornerShape
17+ import androidx.compose.material3.CardDefaults
18+ import androidx.compose.material3.Icon
19+ import androidx.compose.material3.MaterialTheme
20+ import androidx.compose.material3.OutlinedCard
1721import androidx.compose.material3.Scaffold
1822import androidx.compose.material3.Text
1923import androidx.compose.runtime.Composable
2024import androidx.compose.ui.Alignment
2125import androidx.compose.ui.Modifier
26+ import androidx.compose.ui.graphics.Color
27+ import androidx.compose.ui.text.font.FontWeight
2228import androidx.compose.ui.unit.dp
2329import androidx.compose.ui.unit.sp
2430import androidx.navigation.NavController
31+ import com.composables.icons.lucide.ChevronRight
32+ import com.composables.icons.lucide.Lucide
2533import org.bitcoindevkit.devkitwallet.data.SingleWallet
2634import org.bitcoindevkit.devkitwallet.domain.DwLogger
2735import org.bitcoindevkit.devkitwallet.domain.DwLogger.LogLevel.INFO
2836import org.bitcoindevkit.devkitwallet.presentation.WalletCreateType
2937import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
30- import org.bitcoindevkit.devkitwallet.presentation.theme.monoRegular
31- import org.bitcoindevkit.devkitwallet.presentation.theme.quattroRegular
38+ import org.bitcoindevkit.devkitwallet.presentation.theme.inter
3239import org.bitcoindevkit.devkitwallet.presentation.ui.components.SecondaryScreensAppBar
3340
3441private const val TAG = " ActiveWalletsScreen"
@@ -39,57 +46,84 @@ internal fun ActiveWalletsScreen(
3946 navController : NavController ,
4047 onBuildWalletButtonClicked : (WalletCreateType ) -> Unit ,
4148) {
49+ val colorScheme = MaterialTheme .colorScheme
50+
4251 Scaffold (
4352 topBar = {
4453 SecondaryScreensAppBar (title = " Choose a Wallet" , navigation = { navController.navigateUp() })
4554 },
46- containerColor = DevkitWalletColors .primary,
4755 ) { paddingValues ->
4856 Column (
49- modifier =
50- Modifier
51- .fillMaxSize()
52- .padding(paddingValues),
57+ modifier = Modifier
58+ .fillMaxSize()
59+ .padding(paddingValues)
60+ .padding(horizontal = 24 .dp, vertical = 16 .dp),
61+ verticalArrangement = Arrangement .spacedBy(10 .dp),
5362 ) {
54- activeWallets.forEach {
55- ActiveWalletCard (wallet = it, onBuildWalletButtonClicked)
63+ if (activeWallets.isEmpty()) {
64+ Text (
65+ text = " No active wallets." ,
66+ fontFamily = inter,
67+ fontSize = 14 .sp,
68+ color = DevkitWalletColors .subtle,
69+ )
70+ } else {
71+ activeWallets.forEach { wallet ->
72+ OutlinedCard (
73+ onClick = {
74+ DwLogger .log(INFO , " Activating existing wallet: ${wallet.name} " )
75+ onBuildWalletButtonClicked(WalletCreateType .LOADEXISTING (wallet))
76+ },
77+ shape = RoundedCornerShape (20 .dp),
78+ border = BorderStroke (1.5 .dp, colorScheme.outline.copy(alpha = 0.12f )),
79+ colors = CardDefaults .outlinedCardColors(containerColor = Color .Transparent ),
80+ ) {
81+ Row (
82+ modifier = Modifier
83+ .fillMaxWidth()
84+ .padding(20 .dp),
85+ verticalAlignment = Alignment .CenterVertically ,
86+ ) {
87+ Column (modifier = Modifier .weight(1f )) {
88+ Text (
89+ text = wallet.name,
90+ fontFamily = inter,
91+ fontSize = 15 .sp,
92+ fontWeight = FontWeight .Medium ,
93+ color = colorScheme.onSurface,
94+ )
95+ Row (
96+ horizontalArrangement = Arrangement .spacedBy(8 .dp),
97+ modifier = Modifier .padding(top = 4 .dp),
98+ ) {
99+ WalletChip (text = wallet.network.name)
100+ WalletChip (text = wallet.scriptType.name)
101+ }
102+ }
103+ Icon (
104+ imageVector = Lucide .ChevronRight ,
105+ contentDescription = " Open" ,
106+ tint = colorScheme.outlineVariant,
107+ modifier = Modifier .size(18 .dp),
108+ )
109+ }
110+ }
111+ }
56112 }
57113 }
58- if (activeWallets.isEmpty()) {
59- Text (
60- text = " No active wallets." ,
61- fontSize = 16 .sp,
62- fontFamily = quattroRegular,
63- color = DevkitWalletColors .white,
64- modifier = Modifier .padding(16 .dp),
65- )
66- }
67114 }
68115}
69116
70117@Composable
71- fun ActiveWalletCard (wallet : SingleWallet , onBuildWalletButtonClicked : (WalletCreateType ) -> Unit ) {
72- Row (
73- Modifier
74- .padding(horizontal = 8 .dp, vertical = 6 .dp)
75- .fillMaxWidth()
76- .background(
77- color = DevkitWalletColors .primaryLight,
78- shape = RoundedCornerShape (16 .dp),
79- ).clickable {
80- DwLogger .log(INFO , " Activating existing wallet: ${wallet.name} " )
81- onBuildWalletButtonClicked(WalletCreateType .LOADEXISTING (wallet))
82- },
83- verticalAlignment = Alignment .CenterVertically ,
84- horizontalArrangement = Arrangement .Absolute .SpaceBetween ,
85- ) {
86- Text (
87- " Name: ${wallet.name} \n Network: ${wallet.network} \n Script Type: ${wallet.scriptType} " ,
88- fontFamily = monoRegular,
89- fontSize = 12 .sp,
90- lineHeight = 20 .sp,
91- color = DevkitWalletColors .white,
92- modifier = Modifier .padding(16 .dp),
93- )
94- }
118+ private fun WalletChip (text : String ) {
119+ val colorScheme = MaterialTheme .colorScheme
120+ Text (
121+ text = text,
122+ fontFamily = inter,
123+ fontSize = 11 .sp,
124+ fontWeight = FontWeight .Medium ,
125+ color = colorScheme.onSurfaceVariant,
126+ modifier = Modifier
127+ .padding(0 .dp),
128+ )
95129}
0 commit comments