Skip to content

Commit 6b770ce

Browse files
authored
Merge pull request #381 from synonymdev/fix/savings-spending-wallets
fix(wallet): fix savings & spending empty views and transfer button logic
2 parents f7eb9d5 + 745dd62 commit 6b770ce

File tree

7 files changed

+167
-70
lines changed

7 files changed

+167
-70
lines changed

app/src/main/java/to/bitkit/ui/ContentView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ private fun RootNavHost(
537537
onAdvanced = { navController.navigate(Routes.FundingAdvanced) },
538538
onBackClick = { navController.popBackStack() },
539539
onCloseClick = { navController.navigateToHome() },
540-
isGeoBlocked = isGeoBlocked
540+
isGeoBlocked = isGeoBlocked,
541541
)
542542
}
543543
composableWithDefaultTransitions<Routes.FundingAdvanced> {

app/src/main/java/to/bitkit/ui/components/TabBar.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package to.bitkit.ui.components
33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.clickable
55
import androidx.compose.foundation.layout.Box
6+
import androidx.compose.foundation.layout.BoxScope
67
import androidx.compose.foundation.layout.Column
78
import androidx.compose.foundation.layout.Row
89
import androidx.compose.foundation.layout.Spacer
@@ -51,7 +52,7 @@ private val buttonRightShape = RoundedCornerShape(topEndPercent = 50, bottomEndP
5152

5253
@OptIn(ExperimentalHazeMaterialsApi::class)
5354
@Composable
54-
fun TabBar(
55+
fun BoxScope.TabBar(
5556
modifier: Modifier = Modifier,
5657
hazeState: HazeState = rememberHazeState(),
5758
onSendClick: () -> Unit = {},
@@ -61,6 +62,7 @@ fun TabBar(
6162
Box(
6263
contentAlignment = Alignment.Center,
6364
modifier = modifier
65+
.align(Alignment.BottomCenter)
6466
.fillMaxWidth()
6567
.background(
6668
Brush.verticalGradient(

app/src/main/java/to/bitkit/ui/screens/wallets/HomeNav.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ fun HomeNav(
7979
onSendClick = { appViewModel.showSheet(Sheet.Send()) },
8080
onReceiveClick = { appViewModel.showSheet(Sheet.Receive) },
8181
onScanClick = { rootNavController.navigateToScanner() },
82-
modifier = Modifier.align(Alignment.BottomCenter)
8382
)
8483

8584
DrawerMenu(
@@ -125,7 +124,12 @@ private fun NavContent(
125124
exitTransition = { Transitions.slideOutHorizontally },
126125
) {
127126
val hasSeenSpendingIntro by settingsViewModel.hasSeenSpendingIntro.collectAsStateWithLifecycle()
127+
val isGeoBlocked by appViewModel.isGeoBlocked.collectAsStateWithLifecycle()
128+
val onchainActivities by activityListViewModel.onchainActivities.collectAsStateWithLifecycle()
129+
128130
SavingsWalletScreen(
131+
isGeoBlocked = isGeoBlocked,
132+
onchainActivities = onchainActivities.orEmpty(),
129133
onAllActivityButtonClick = { walletNavController.navigate(HomeRoutes.AllActivity) },
130134
onActivityItemClick = { rootNavController.navigateToActivityItem(it) },
131135
onEmptyActivityRowClick = { appViewModel.showSheet(Sheet.Receive) },
@@ -144,8 +148,10 @@ private fun NavContent(
144148
exitTransition = { Transitions.slideOutHorizontally },
145149
) {
146150
val hasSeenSavingsIntro by settingsViewModel.hasSeenSavingsIntro.collectAsStateWithLifecycle()
151+
val lightningActivities by activityListViewModel.lightningActivities.collectAsStateWithLifecycle()
147152
SpendingWalletScreen(
148153
uiState = mainUiState,
154+
lightningActivities = lightningActivities.orEmpty(),
149155
onAllActivityButtonClick = { walletNavController.navigate(HomeRoutes.AllActivity) },
150156
onActivityItemClick = { rootNavController.navigateToActivityItem(it) },
151157
onEmptyActivityRowClick = { appViewModel.showSheet(Sheet.Receive) },

app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ private fun Preview() {
693693
totalSats = 200_000u,
694694
),
695695
)
696-
TabBar(modifier = Modifier.align(Alignment.BottomCenter))
696+
TabBar()
697697
}
698698
}
699699
}
@@ -712,13 +712,9 @@ private fun PreviewEmpty() {
712712
walletNavController = rememberNavController(),
713713
drawerState = rememberDrawerState(initialValue = DrawerValue.Closed),
714714
latestActivities = previewActivityItems.take(3),
715-
balances = BalanceState(
716-
totalOnchainSats = 165_000u,
717-
totalLightningSats = 45_000u,
718-
totalSats = 200_000u,
719-
)
715+
balances = BalanceState(totalSats = 0u)
720716
)
721-
TabBar(modifier = Modifier.align(Alignment.BottomCenter))
717+
TabBar()
722718
}
723719
}
724720
}

app/src/main/java/to/bitkit/ui/screens/wallets/SavingsWalletScreen.kt

Lines changed: 93 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.size
1414
import androidx.compose.foundation.layout.systemBarsPadding
1515
import androidx.compose.material3.Icon
1616
import androidx.compose.runtime.Composable
17-
import androidx.compose.runtime.collectAsState
1817
import androidx.compose.runtime.getValue
1918
import androidx.compose.runtime.mutableStateOf
2019
import androidx.compose.runtime.remember
@@ -26,31 +25,41 @@ import androidx.compose.ui.res.painterResource
2625
import androidx.compose.ui.res.stringResource
2726
import androidx.compose.ui.tooling.preview.Preview
2827
import androidx.compose.ui.unit.dp
28+
import com.synonym.bitkitcore.Activity
2929
import to.bitkit.R
3030
import to.bitkit.models.BalanceState
3131
import to.bitkit.ui.LocalBalances
32-
import to.bitkit.ui.activityListViewModel
3332
import to.bitkit.ui.components.BalanceHeaderView
3433
import to.bitkit.ui.components.EmptyStateView
3534
import to.bitkit.ui.components.SecondaryButton
35+
import to.bitkit.ui.components.TabBar
3636
import to.bitkit.ui.scaffold.AppTopBar
3737
import to.bitkit.ui.scaffold.ScreenColumn
3838
import to.bitkit.ui.screens.wallets.activity.components.ActivityListGrouped
39+
import to.bitkit.ui.screens.wallets.activity.utils.previewOnchainActivityItems
3940
import to.bitkit.ui.theme.AppThemeSurface
4041
import to.bitkit.ui.theme.Colors
4142
import to.bitkit.ui.utils.withAccent
4243

4344
@Composable
4445
fun SavingsWalletScreen(
46+
isGeoBlocked: Boolean,
47+
onchainActivities: List<Activity>,
4548
onAllActivityButtonClick: () -> Unit,
4649
onEmptyActivityRowClick: () -> Unit,
4750
onActivityItemClick: (String) -> Unit,
4851
onTransferToSpendingClick: () -> Unit,
4952
onBackClick: () -> Unit,
5053
balances: BalanceState = LocalBalances.current,
5154
) {
52-
val showEmptyState by remember(balances.totalOnchainSats) {
53-
mutableStateOf(balances.totalOnchainSats == 0uL) // TODO use && hasOnchainActivity
55+
val showEmptyState by remember(balances.totalOnchainSats, onchainActivities.size) {
56+
val hasFunds = balances.totalOnchainSats > 0uL
57+
val hasActivity = onchainActivities.isNotEmpty()
58+
mutableStateOf(!hasFunds && !hasActivity)
59+
}
60+
val canTransfer by remember(balances.totalOnchainSats) {
61+
val hasFunds = balances.totalOnchainSats > 0uL
62+
mutableStateOf(hasFunds && !isGeoBlocked)
5463
}
5564

5665
Box(
@@ -85,21 +94,22 @@ fun SavingsWalletScreen(
8594
)
8695
if (!showEmptyState) {
8796
Spacer(modifier = Modifier.height(32.dp))
88-
SecondaryButton(
89-
onClick = onTransferToSpendingClick,
90-
text = "Transfer To Spending", // TODO add missing localized text
91-
icon = {
92-
Icon(
93-
painter = painterResource(R.drawable.ic_transfer),
94-
contentDescription = null,
95-
modifier = Modifier.size(16.dp),
96-
)
97-
},
98-
modifier = Modifier.testTag("TransferToSpending")
99-
)
10097

101-
val activity = activityListViewModel ?: return@Column
102-
val onchainActivities by activity.onchainActivities.collectAsState()
98+
if (canTransfer) {
99+
SecondaryButton(
100+
onClick = onTransferToSpendingClick,
101+
text = "Transfer To Spending", // TODO add missing localized text
102+
icon = {
103+
Icon(
104+
painter = painterResource(R.drawable.ic_transfer),
105+
contentDescription = null,
106+
modifier = Modifier.size(16.dp),
107+
)
108+
},
109+
modifier = Modifier.testTag("TransferToSpending")
110+
)
111+
}
112+
103113
ActivityListGrouped(
104114
items = onchainActivities,
105115
onActivityItemClick = onActivityItemClick,
@@ -125,27 +135,77 @@ fun SavingsWalletScreen(
125135
@Composable
126136
private fun Preview() {
127137
AppThemeSurface {
128-
SavingsWalletScreen(
129-
onAllActivityButtonClick = {},
130-
onActivityItemClick = {},
131-
onEmptyActivityRowClick = {},
132-
onTransferToSpendingClick = {},
133-
onBackClick = {},
134-
balances = BalanceState(totalOnchainSats = 50_000u),
135-
)
138+
Box {
139+
SavingsWalletScreen(
140+
isGeoBlocked = false,
141+
onchainActivities = previewOnchainActivityItems(),
142+
onAllActivityButtonClick = {},
143+
onActivityItemClick = {},
144+
onEmptyActivityRowClick = {},
145+
onTransferToSpendingClick = {},
146+
onBackClick = {},
147+
balances = BalanceState(totalOnchainSats = 50_000u),
148+
)
149+
TabBar()
150+
}
151+
}
152+
}
153+
154+
@Preview(showSystemUi = true)
155+
@Composable
156+
private fun PreviewNoActivity() {
157+
AppThemeSurface {
158+
Box {
159+
SavingsWalletScreen(
160+
isGeoBlocked = false,
161+
onchainActivities = emptyList(),
162+
onAllActivityButtonClick = {},
163+
onActivityItemClick = {},
164+
onEmptyActivityRowClick = {},
165+
onTransferToSpendingClick = {},
166+
onBackClick = {},
167+
balances = BalanceState(totalOnchainSats = 50_000u),
168+
)
169+
TabBar()
170+
}
171+
}
172+
}
173+
174+
@Preview(showSystemUi = true)
175+
@Composable
176+
private fun PreviewGeoBlocked() {
177+
AppThemeSurface {
178+
Box {
179+
SavingsWalletScreen(
180+
isGeoBlocked = true,
181+
onchainActivities = previewOnchainActivityItems(),
182+
onAllActivityButtonClick = {},
183+
onActivityItemClick = {},
184+
onEmptyActivityRowClick = {},
185+
onTransferToSpendingClick = {},
186+
onBackClick = {},
187+
balances = BalanceState(totalOnchainSats = 50_000u),
188+
)
189+
TabBar()
190+
}
136191
}
137192
}
138193

139194
@Preview(showSystemUi = true)
140195
@Composable
141196
private fun PreviewEmpty() {
142197
AppThemeSurface {
143-
SavingsWalletScreen(
144-
onAllActivityButtonClick = {},
145-
onActivityItemClick = {},
146-
onEmptyActivityRowClick = {},
147-
onTransferToSpendingClick = {},
148-
onBackClick = {},
149-
)
198+
Box {
199+
SavingsWalletScreen(
200+
isGeoBlocked = false,
201+
onchainActivities = emptyList(),
202+
onAllActivityButtonClick = {},
203+
onActivityItemClick = {},
204+
onEmptyActivityRowClick = {},
205+
onTransferToSpendingClick = {},
206+
onBackClick = {},
207+
)
208+
TabBar()
209+
}
150210
}
151211
}

0 commit comments

Comments
 (0)