From 59cbdba58bb46f0ea2a8de017e67f652edb6098b Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:03:23 -0300 Subject: [PATCH 01/64] chore: add widgetsOnboardingHintDismissed flag --- app/src/main/java/to/bitkit/data/SettingsStore.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/to/bitkit/data/SettingsStore.kt b/app/src/main/java/to/bitkit/data/SettingsStore.kt index a3cfcef84..0c9fd240f 100644 --- a/app/src/main/java/to/bitkit/data/SettingsStore.kt +++ b/app/src/main/java/to/bitkit/data/SettingsStore.kt @@ -113,6 +113,7 @@ data class SettingsData( val backupWarningIgnoredMillis: Long = 0, val notificationsIgnoredMillis: Long = 0, val balanceWarningTimes: Int = 0, + val widgetsOnboardingHintDismissed: Boolean = false, val coinSelectAuto: Boolean = true, val coinSelectPreference: CoinSelectionPreference = CoinSelectionPreference.BranchAndBound, val electrumServer: String = Env.electrumServerUrl, From 7256873fad883fa529b201dd6edbda9d1b7f0230 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:03:50 -0300 Subject: [PATCH 02/64] feat: update HomeUiState with new fields --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt index 7b086e64e..61530826f 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt @@ -36,4 +36,6 @@ data class HomeUiState( val isEditingWidgets: Boolean = false, val deleteWidgetAlert: WidgetType? = null, val showEmptyState: Boolean = false, + val currentPage: Int = 0, + val showWidgetsOnboardingHint: Boolean = false, ) From 7c813a38e709ca1f65975f84a1dbfdaca895c3c1 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:06:16 -0300 Subject: [PATCH 03/64] feat: update HomeViewModel with page tracking and hint logic --- .../to/bitkit/ui/screens/wallets/HomeViewModel.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index 5410ad6e3..483aa53c8 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -71,6 +71,8 @@ class HomeViewModel @Inject constructor( currentBlock = widgetsData.block?.toBlockModel(), currentWeather = widgetsData.weather?.toWeatherModel(), currentPrice = widgetsData.price, + showWidgetsOnboardingHint = settings.showWidgets && + !settings.widgetsOnboardingHintDismissed, ) }.collect { newState -> _uiState.update { newState } @@ -142,6 +144,16 @@ class HomeViewModel @Inject constructor( _currentFact.value = null } + fun onPageChanged(page: Int) { + _uiState.update { it.copy(currentPage = page) } + } + + fun dismissWidgetsOnboardingHint() { + viewModelScope.launch { + settingsStore.update { it.copy(widgetsOnboardingHintDismissed = true) } + } + } + fun dismissEmptyState() { viewModelScope.launch { settingsStore.update { it.copy(showEmptyBalanceView = false) } From 49fabc587009bda705185d49fb8fd9553e063268 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:06:46 -0300 Subject: [PATCH 04/64] chore: simplify ActivityListSimple --- .../activity/components/ActivityListSimple.kt | 42 ++++++------------- 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt index cc476b42a..a8aa4f75f 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt @@ -23,28 +23,24 @@ fun ActivityListSimple( items: List?, onAllActivityClick: () -> Unit, onActivityItemClick: (String) -> Unit, - onEmptyActivityRowClick: () -> Unit, ) { + if (items.isNullOrEmpty()) return Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.fillMaxWidth() ) { - if (items != null && items.isNotEmpty()) { - items.forEachIndexed { index, item -> - ActivityRow(item, onActivityItemClick, testTag = "ActivityShort-$index") - VerticalSpacer(16.dp) - } - TertiaryButton( - text = stringResource(R.string.wallet__activity_show_all), - onClick = onAllActivityClick, - modifier = Modifier - .wrapContentWidth() - .padding(top = 8.dp) - .testTag("ActivityShowAll") - ) - } else { - EmptyActivityRow(onClick = onEmptyActivityRowClick) + items.forEachIndexed { index, item -> + ActivityRow(item, onActivityItemClick, testTag = "ActivityShort-$index") + VerticalSpacer(16.dp) } + TertiaryButton( + text = stringResource(R.string.wallet__activity_show_all), + onClick = onAllActivityClick, + modifier = Modifier + .wrapContentWidth() + .padding(top = 8.dp) + .testTag("ActivityShowAll") + ) } } @@ -56,20 +52,6 @@ private fun Preview() { items = previewActivityItems, onAllActivityClick = {}, onActivityItemClick = {}, - onEmptyActivityRowClick = {}, - ) - } -} - -@Preview -@Composable -private fun PreviewEmpty() { - AppThemeSurface { - ActivityListSimple( - items = emptyList(), - onAllActivityClick = {}, - onActivityItemClick = {}, - onEmptyActivityRowClick = {}, ) } } From c81eb53dd465aebdd45618db6f4cbef5e46d12e9 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:08:01 -0300 Subject: [PATCH 05/64] chore: add string resources and drawable --- app/src/main/res/drawable/ic_swipe_hint.xml | 9 +++++++++ app/src/main/res/values/strings.xml | 1 + 2 files changed, 10 insertions(+) create mode 100644 app/src/main/res/drawable/ic_swipe_hint.xml diff --git a/app/src/main/res/drawable/ic_swipe_hint.xml b/app/src/main/res/drawable/ic_swipe_hint.xml new file mode 100644 index 000000000..5e60113a9 --- /dev/null +++ b/app/src/main/res/drawable/ic_swipe_hint.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0d080f226..fe6601bee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1000,4 +1000,5 @@ Widget Source Widgets + Swipe down\nto find your\nwidgets From 764a92f78c37d6fc79e6d1936210e54ff592e594 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:22:50 -0300 Subject: [PATCH 06/64] feat: restructure HomeScreen with VerticalPager --- .../bitkit/ui/screens/wallets/HomeScreen.kt | 478 +++++++++++------- 1 file changed, 305 insertions(+), 173 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 5367f742f..a39a98ed7 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -9,17 +9,19 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.pager.VerticalPager +import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.DrawerState @@ -44,6 +46,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource @@ -75,7 +78,9 @@ import to.bitkit.ui.Routes import to.bitkit.ui.components.ActivityBanner import to.bitkit.ui.components.AppStatus import to.bitkit.ui.components.BalanceHeaderView +import to.bitkit.ui.components.Display import to.bitkit.ui.components.EmptyStateView +import to.bitkit.ui.components.FillHeight import to.bitkit.ui.components.HorizontalSpacer import to.bitkit.ui.components.Sheet import to.bitkit.ui.components.StatusBarSpacer @@ -114,6 +119,10 @@ import to.bitkit.viewmodels.AppViewModel import to.bitkit.viewmodels.SettingsViewModel import to.bitkit.viewmodels.WalletViewModel +private const val SMALL_SCREEN_HEIGHT_DP = 700 +private const val SMALL_SCREEN_ACTIVITY_COUNT = 2 +private const val LARGE_SCREEN_ACTIVITY_COUNT = 3 + @Suppress("CyclomaticComplexMethod") @Composable fun HomeScreen( @@ -130,7 +139,6 @@ fun HomeScreen( val context = LocalContext.current val hasSeenTransferIntro by settingsViewModel.hasSeenTransferIntro.collectAsStateWithLifecycle() val hasSeenShopIntro by settingsViewModel.hasSeenShopIntro.collectAsStateWithLifecycle() - val hasSeenProfileIntro by settingsViewModel.hasSeenProfileIntro.collectAsStateWithLifecycle() val hasSeenWidgetsIntro: Boolean by settingsViewModel.hasSeenWidgetsIntro.collectAsStateWithLifecycle() val bgPaymentsIntroSeen: Boolean by settingsViewModel.bgPaymentsIntroSeen.collectAsStateWithLifecycle() val quickPayIntroSeen by settingsViewModel.quickPayIntroSeen.collectAsStateWithLifecycle() @@ -256,8 +264,8 @@ fun HomeScreen( onMoveWidget = { fromIndex, toIndex -> homeViewModel.moveWidget(fromIndex, toIndex) }, - onDismissEmptyState = homeViewModel::dismissEmptyState, - onClickEmptyActivityRow = { appViewModel.showSheet(Sheet.Receive) }, + onPageChanged = homeViewModel::onPageChanged, + onDismissWidgetsOnboardingHint = homeViewModel::dismissWidgetsOnboardingHint, ) } @@ -280,192 +288,159 @@ private fun Content( onClickEditWidget: (WidgetType) -> Unit = {}, onClickDeleteWidget: (WidgetType) -> Unit = {}, onMoveWidget: (Int, Int) -> Unit = { _, _ -> }, - onDismissEmptyState: () -> Unit = {}, - onClickEmptyActivityRow: () -> Unit = {}, + onPageChanged: (Int) -> Unit = {}, + onDismissWidgetsOnboardingHint: () -> Unit = {}, balances: BalanceState = LocalBalances.current, ) { val scope = rememberCoroutineScope() + val pageCount = if (homeUiState.showWidgets) 2 else 1 + val pagerState = rememberPagerState(pageCount = { pageCount }) + + LaunchedEffect(pagerState.currentPage) { + onPageChanged(pagerState.currentPage) + if (pagerState.currentPage == 1 && !latestActivities.isNullOrEmpty()) { + onDismissWidgetsOnboardingHint() + } + } + + val screenHeightDp = LocalConfiguration.current.screenHeightDp + val activityCount = if (screenHeightDp < SMALL_SCREEN_HEIGHT_DP) { + SMALL_SCREEN_ACTIVITY_COUNT + } else { + LARGE_SCREEN_ACTIVITY_COUNT + } Box { - val heightStatusBar = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() TopBar( hazeState = hazeState, rootNavController = rootNavController, scope = scope, drawerState = drawerState, + showEditWidgets = homeUiState.currentPage == 1 && homeUiState.showWidgets, + isEditingWidgets = homeUiState.isEditingWidgets, + onClickEditWidgetList = onClickEditWidgetList, ) - val pullToRefreshState = rememberPullToRefreshState() - PullToRefreshBox( - state = pullToRefreshState, - isRefreshing = isRefreshing, - onRefresh = onRefresh, - indicator = { - Indicator( - isRefreshing = isRefreshing, - state = pullToRefreshState, - modifier = Modifier - .padding(top = heightStatusBar) - .align(Alignment.TopCenter) - ) - }, + + VerticalPager( + state = pagerState, + userScrollEnabled = homeUiState.showWidgets, modifier = Modifier .fillMaxSize() .hazeSource(state = hazeState) .zIndex(0f) - ) { - Column( - modifier = Modifier - .padding(horizontal = 16.dp) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .testTag("HomeScrollView") - ) { - StatusBarSpacer() - TopBarSpacer() - VerticalSpacer(16.dp) - BalanceHeaderView( - sats = balances.totalSats.toLong(), - showEyeIcon = true, - testTag = "TotalBalance", - modifier = Modifier - .fillMaxWidth() - .testTag("TotalBalance") + ) { page -> + when (page) { + 0 -> WalletPage( + isRefreshing = isRefreshing, + homeUiState = homeUiState, + latestActivities = latestActivities?.take(activityCount), + balances = balances, + rootNavController = rootNavController, + walletNavController = walletNavController, + onRefresh = onRefresh, ) - if (!homeUiState.showEmptyState) { - Spacer(modifier = Modifier.height(32.dp)) - Row( - modifier = Modifier - .fillMaxWidth() - .height(IntrinsicSize.Min) - ) { - WalletBalanceView( - title = stringResource(R.string.wallet__savings__title), - sats = balances.totalOnchainSats.toLong(), - icon = painterResource(id = R.drawable.ic_btc_circle), - modifier = Modifier - .clickableAlpha { walletNavController.navigate(Routes.Savings) } - .padding(vertical = 4.dp) - .testTag("ActivitySavings") - ) - VerticalDivider() - HorizontalSpacer(16.dp) - WalletBalanceView( - title = stringResource(R.string.wallet__spending__title), - sats = balances.totalLightningSats.toLong(), - icon = painterResource(id = R.drawable.ic_ln_circle), - modifier = Modifier - .clickableAlpha { walletNavController.navigate(Routes.Spending) } - .padding(vertical = 4.dp) - .testTag("ActivitySpending") - ) - } - - AnimatedVisibility(homeUiState.suggestions.isNotEmpty()) { - val state = rememberLazyListState() - val snapBehavior = rememberSnapFlingBehavior( - lazyListState = state, - snapPosition = SnapPosition.Start - ) - Column { - Spacer(modifier = Modifier.height(32.dp)) - Text13Up(stringResource(R.string.cards__suggestions), color = Colors.White64) - Spacer(modifier = Modifier.height(16.dp)) - LazyRow( - horizontalArrangement = Arrangement.spacedBy(16.dp), - state = state, - flingBehavior = snapBehavior, - modifier = Modifier - .fillMaxWidth() - .testTag("Suggestions") - ) { - items(homeUiState.suggestions, key = { it.name }) { item -> - SuggestionCard( - gradientColor = item.color, - title = stringResource(item.title), - description = stringResource(item.description), - icon = item.icon, - onClose = { onRemoveSuggestion(item) }.takeIf { item.dismissible }, - onClick = { onClickSuggestion(item) }, - modifier = Modifier.testTag("Suggestion-${item.name.lowercase()}") - ) - } - } - } - } + 1 -> WidgetsPage( + homeUiState = homeUiState, + onRemoveSuggestion = onRemoveSuggestion, + onClickSuggestion = onClickSuggestion, + onClickAddWidget = onClickAddWidget, + onClickEditWidget = onClickEditWidget, + onClickDeleteWidget = onClickDeleteWidget, + onMoveWidget = onMoveWidget, + ) + } + } + } +} - if (homeUiState.showWidgets) { - Spacer(modifier = Modifier.height(32.dp)) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically - ) { - Text13Up( - stringResource(R.string.widgets__widgets), - color = Colors.White64 - ) - - IconButton( - onClick = onClickEditWidgetList, - modifier = Modifier.testTag("WidgetsEdit") - ) { - Icon( - painter = when (homeUiState.isEditingWidgets) { - true -> painterResource(R.drawable.ic_check) - else -> painterResource(R.drawable.ic_sort_ascending) - }, - contentDescription = null, - ) - } - } +@Suppress("MagicNumber") +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun WalletPage( + isRefreshing: Boolean, + homeUiState: HomeUiState, + latestActivities: List?, + balances: BalanceState, + rootNavController: NavController, + walletNavController: NavController, + onRefresh: () -> Unit, +) { + val heightStatusBar = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() + val pullToRefreshState = rememberPullToRefreshState() + val hasActivity = !latestActivities.isNullOrEmpty() - Spacer(modifier = Modifier.height(16.dp)) - - if (homeUiState.isEditingWidgets) { - DragDropColumn( - items = homeUiState.widgetsWithPosition, - onMove = onMoveWidget, - modifier = Modifier.fillMaxWidth() - ) { widgetWithPosition, isDragging -> - DragAndDropWidget( - iconRes = widgetWithPosition.type.iconRes, - title = stringResource(widgetWithPosition.type.title), - onClickSettings = { onClickEditWidget(widgetWithPosition.type) }, - onClickDelete = { onClickDeleteWidget(widgetWithPosition.type) }, - modifier = Modifier - .fillMaxWidth() - .graphicsLayer { - alpha = if (isDragging) 0.8f else 1.0f - } - ) - } - } else { - Widgets(homeUiState) - } + PullToRefreshBox( + state = pullToRefreshState, + isRefreshing = isRefreshing, + onRefresh = onRefresh, + indicator = { + Indicator( + isRefreshing = isRefreshing, + state = pullToRefreshState, + modifier = Modifier + .padding(top = heightStatusBar) + .align(Alignment.TopCenter) + ) + }, + modifier = Modifier.fillMaxSize() + ) { + Column( + modifier = Modifier + .padding(horizontal = 16.dp) + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .testTag("HomeScrollView") + ) { + StatusBarSpacer() + TopBarSpacer() + VerticalSpacer(16.dp) + + BalanceHeaderView( + sats = balances.totalSats.toLong(), + showEyeIcon = true, + testTag = "TotalBalance", + modifier = Modifier + .fillMaxWidth() + .testTag("TotalBalance") + ) - Spacer(modifier = Modifier.height(32.dp)) - TertiaryButton( - text = stringResource(R.string.widgets__add), - icon = { - Icon( - painter = painterResource(R.drawable.ic_plus), - contentDescription = null, - tint = Colors.White80, - ) - }, - onClick = onClickAddWidget, - modifier = Modifier.testTag("WidgetsAdd") - ) - } - Spacer(modifier = Modifier.height(32.dp)) + if (!homeUiState.showEmptyState) { + VerticalSpacer(32.dp) + Row( + modifier = Modifier + .fillMaxWidth() + .height(IntrinsicSize.Min) + ) { + WalletBalanceView( + title = stringResource(R.string.wallet__savings__title), + sats = balances.totalOnchainSats.toLong(), + icon = painterResource(id = R.drawable.ic_btc_circle), + modifier = Modifier + .clickableAlpha { walletNavController.navigate(Routes.Savings) } + .padding(vertical = 4.dp) + .testTag("ActivitySavings") + ) + VerticalDivider() + HorizontalSpacer(16.dp) + WalletBalanceView( + title = stringResource(R.string.wallet__spending__title), + sats = balances.totalLightningSats.toLong(), + icon = painterResource(id = R.drawable.ic_ln_circle), + modifier = Modifier + .clickableAlpha { walletNavController.navigate(Routes.Spending) } + .padding(vertical = 4.dp) + .testTag("ActivitySpending") + ) + } + if (hasActivity) { AnimatedVisibility(homeUiState.banners.isNotEmpty()) { Column( verticalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier .fillMaxWidth() - .padding(bottom = 18.dp) + .padding(top = 32.dp, bottom = 18.dp) ) { homeUiState.banners.forEach { banner -> ActivityBanner( @@ -474,7 +449,8 @@ private fun Content( icon = banner.icon, onClick = { when (banner) { - ActivityBannerType.SPENDING -> rootNavController.navigate(Routes.SettingUp) + ActivityBannerType.SPENDING -> + rootNavController.navigate(Routes.SettingUp) ActivityBannerType.SAVINGS -> Unit } }, @@ -484,26 +460,164 @@ private fun Content( } } + VerticalSpacer(32.dp) + ActivityListSimple( items = latestActivities, onAllActivityClick = { rootNavController.navigateToAllActivity() }, onActivityItemClick = { rootNavController.navigateToActivityItem(it) }, - onEmptyActivityRowClick = onClickEmptyActivityRow, ) - VerticalSpacer(150.dp) // scrollable empty space behind footer + FillHeight() + + if (homeUiState.showWidgetsOnboardingHint) { + WidgetsOnboardingHint() + } } + + VerticalSpacer(150.dp) } - if (homeUiState.showEmptyState) { - EmptyStateView( - text = stringResource(R.string.onboarding__empty_wallet).withAccent(), - onClose = onDismissEmptyState, + } + + if (homeUiState.showEmptyState) { + EmptyStateView( + text = stringResource(R.string.onboarding__empty_wallet).withAccent(), + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(bottom = 24.dp) + ) + } + } +} + +@Suppress("MagicNumber") +@Composable +private fun WidgetsPage( + homeUiState: HomeUiState, + onRemoveSuggestion: (Suggestion) -> Unit, + onClickSuggestion: (Suggestion) -> Unit, + onClickAddWidget: () -> Unit, + onClickEditWidget: (WidgetType) -> Unit, + onClickDeleteWidget: (WidgetType) -> Unit, + onMoveWidget: (Int, Int) -> Unit, +) { + Column( + modifier = Modifier + .padding(horizontal = 16.dp) + .fillMaxSize() + .verticalScroll(rememberScrollState()) + ) { + StatusBarSpacer() + TopBarSpacer() + VerticalSpacer(16.dp) + + AnimatedVisibility(homeUiState.suggestions.isNotEmpty()) { + SuggestionsSection( + suggestions = homeUiState.suggestions, + onRemoveSuggestion = onRemoveSuggestion, + onClickSuggestion = onClickSuggestion, + ) + } + + if (homeUiState.isEditingWidgets) { + DragDropColumn( + items = homeUiState.widgetsWithPosition, + onMove = onMoveWidget, + modifier = Modifier.fillMaxWidth() + ) { widgetWithPosition, isDragging -> + DragAndDropWidget( + iconRes = widgetWithPosition.type.iconRes, + title = stringResource(widgetWithPosition.type.title), + onClickSettings = { onClickEditWidget(widgetWithPosition.type) }, + onClickDelete = { onClickDeleteWidget(widgetWithPosition.type) }, modifier = Modifier - .align(Alignment.BottomCenter) - .padding(bottom = 24.dp) + .fillMaxWidth() + .graphicsLayer { + alpha = if (isDragging) 0.8f else 1.0f + } ) } + } else { + Widgets(homeUiState) } + + VerticalSpacer(32.dp) + + TertiaryButton( + text = stringResource(R.string.widgets__add), + icon = { + Icon( + painter = painterResource(R.drawable.ic_plus), + contentDescription = null, + tint = Colors.White80, + ) + }, + onClick = onClickAddWidget, + modifier = Modifier.testTag("WidgetsAdd") + ) + + VerticalSpacer(150.dp) + } +} + +@Composable +private fun SuggestionsSection( + suggestions: List, + onRemoveSuggestion: (Suggestion) -> Unit, + onClickSuggestion: (Suggestion) -> Unit, + modifier: Modifier = Modifier, +) { + val state = rememberLazyListState() + val snapBehavior = rememberSnapFlingBehavior( + lazyListState = state, + snapPosition = SnapPosition.Start + ) + + Column(modifier = modifier.padding(bottom = 32.dp)) { + Text13Up(stringResource(R.string.cards__suggestions), color = Colors.White64) + VerticalSpacer(16.dp) + LazyRow( + horizontalArrangement = Arrangement.spacedBy(16.dp), + state = state, + flingBehavior = snapBehavior, + modifier = Modifier + .fillMaxWidth() + .testTag("Suggestions") + ) { + items(suggestions, key = { it.name }) { item -> + SuggestionCard( + gradientColor = item.color, + title = stringResource(item.title), + description = stringResource(item.description), + icon = item.icon, + onClose = { onRemoveSuggestion(item) }.takeIf { item.dismissible }, + onClick = { onClickSuggestion(item) }, + modifier = Modifier.testTag("Suggestion-${item.name.lowercase()}") + ) + } + } + } +} + +@Composable +private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { + Row( + verticalAlignment = Alignment.Bottom, + modifier = modifier + .fillMaxWidth() + .padding(vertical = 32.dp) + ) { + Display( + text = stringResource(R.string.widgets__onboarding_swipe).withAccent(), + modifier = Modifier.weight(1f) + ) + HorizontalSpacer(16.dp) + Icon( + painter = painterResource(R.drawable.ic_swipe_hint), + contentDescription = null, + tint = Colors.White64, + modifier = Modifier.size(40.dp) + ) } } @@ -611,6 +725,9 @@ private fun TopBar( rootNavController: NavController, scope: CoroutineScope, drawerState: DrawerState, + showEditWidgets: Boolean = false, + isEditingWidgets: Boolean = false, + onClickEditWidgetList: () -> Unit = {}, ) { val topbarGradient = Brush.verticalGradient( colorStops = arrayOf( @@ -631,6 +748,21 @@ private fun TopBar( TopAppBar( title = {}, actions = { + if (showEditWidgets) { + IconButton( + onClick = onClickEditWidgetList, + modifier = Modifier.testTag("WidgetsEdit") + ) { + Icon( + painter = if (isEditingWidgets) { + painterResource(R.drawable.ic_check) + } else { + painterResource(R.drawable.ic_sort_ascending) + }, + contentDescription = null, + ) + } + } AppStatus(onClick = { rootNavController.navigate(Routes.AppStatus) }) HorizontalSpacer(4.dp) IconButton( From 0dc1ddb0e508767848ba7b3a9bfd5a043396c516 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:44:04 -0300 Subject: [PATCH 07/64] feat: change SuggestionCard to use aspectRatio instead of fixed size --- app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index 8c1a36fb8..cf1dd72c1 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -54,7 +55,6 @@ fun SuggestionCard( description: String, @DrawableRes icon: Int, onClose: (() -> Unit)? = null, - size: Int = 152, disableGlow: Boolean = false, captionColor: Color = Colors.White64, onClick: () -> Unit, @@ -75,7 +75,8 @@ fun SuggestionCard( Box( modifier = modifier - .size(size.dp) + .fillMaxWidth() + .aspectRatio(1f) .clip(ShapeDefaults.Large) .then( if (isDismissible || disableGlow) { From f58a28807d6b99b93799affa04242e5efa573dc2 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:49:24 -0300 Subject: [PATCH 08/64] feat: convert suggestion list into a grid --- .../bitkit/ui/screens/wallets/HomeScreen.kt | 68 +++++++++++-------- .../ui/screens/wallets/HomeViewModel.kt | 7 +- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index a39a98ed7..e3688a12f 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -1,11 +1,11 @@ package to.bitkit.ui.screens.wallets import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.tween import androidx.compose.foundation.background -import androidx.compose.foundation.gestures.snapping.SnapPosition -import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row @@ -17,9 +17,9 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBars -import androidx.compose.foundation.lazy.LazyRow -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.pager.VerticalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.rememberScrollState @@ -122,6 +122,7 @@ import to.bitkit.viewmodels.WalletViewModel private const val SMALL_SCREEN_HEIGHT_DP = 700 private const val SMALL_SCREEN_ACTIVITY_COUNT = 2 private const val LARGE_SCREEN_ACTIVITY_COUNT = 3 +private const val ANIMATION_DURATION_MS = 300 @Suppress("CyclomaticComplexMethod") @Composable @@ -567,33 +568,44 @@ private fun SuggestionsSection( onClickSuggestion: (Suggestion) -> Unit, modifier: Modifier = Modifier, ) { - val state = rememberLazyListState() - val snapBehavior = rememberSnapFlingBehavior( - lazyListState = state, - snapPosition = SnapPosition.Start - ) + val rows = (suggestions.size + 1) / 2 Column(modifier = modifier.padding(bottom = 32.dp)) { Text13Up(stringResource(R.string.cards__suggestions), color = Colors.White64) VerticalSpacer(16.dp) - LazyRow( - horizontalArrangement = Arrangement.spacedBy(16.dp), - state = state, - flingBehavior = snapBehavior, - modifier = Modifier - .fillMaxWidth() - .testTag("Suggestions") - ) { - items(suggestions, key = { it.name }) { item -> - SuggestionCard( - gradientColor = item.color, - title = stringResource(item.title), - description = stringResource(item.description), - icon = item.icon, - onClose = { onRemoveSuggestion(item) }.takeIf { item.dismissible }, - onClick = { onClickSuggestion(item) }, - modifier = Modifier.testTag("Suggestion-${item.name.lowercase()}") - ) + BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { + val cardSize = (maxWidth - 16.dp) / 2 + val gridHeight = (cardSize * rows) + (16.dp * (rows - 1)) + LazyVerticalGrid( + columns = GridCells.Fixed(2), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + userScrollEnabled = false, + modifier = Modifier + .fillMaxWidth() + .height(gridHeight) + .testTag("Suggestions") + ) { + items( + items = suggestions, + key = { it.name } + ) { item -> + SuggestionCard( + gradientColor = item.color, + title = stringResource(item.title), + description = stringResource(item.description), + icon = item.icon, + onClose = { onRemoveSuggestion(item) }.takeIf { item.dismissible }, + onClick = { onClickSuggestion(item) }, + modifier = Modifier + .testTag("Suggestion-${item.name.lowercase()}") + .animateItem( + fadeInSpec = tween(durationMillis = ANIMATION_DURATION_MS), + fadeOutSpec = tween(durationMillis = ANIMATION_DURATION_MS), + placementSpec = tween(durationMillis = ANIMATION_DURATION_MS), + ) + ) + } } } } diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index 483aa53c8..5302c2b40 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -291,6 +291,11 @@ class HomeViewModel @Inject constructor( } } val dismissedList = settings.dismissedSuggestions.mapNotNull { it.toSuggestionOrNull() } - baseSuggestions.filterNot { it in dismissedList } + baseSuggestions.filterNot { it in dismissedList }.take(MAX_SUGGESTIONS) + } + + companion object { + private const val TAG = "HomeViewModel" + private const val MAX_SUGGESTIONS = 4 } } From 6db1be5afcd96df3ec387f27979b1a087f716eeb Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:52:46 -0300 Subject: [PATCH 09/64] feat: add Suggestions entry to AddWidgetsScreen --- .../bitkit/ui/screens/widgets/AddWidgetsScreen.kt | 13 ++++++++++++- app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt index 300d8a5d3..e8fb45242 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt @@ -19,6 +19,7 @@ import to.bitkit.ui.theme.AppThemeSurface @Composable fun AddWidgetsScreen( onWidgetSelected: (WidgetType) -> Unit, + onSuggestionsClick: () -> Unit, onBackCLick: () -> Unit, fiatSymbol: String, ) { @@ -32,6 +33,15 @@ fun AddWidgetsScreen( Column( modifier = Modifier.padding(horizontal = 16.dp) ) { + SettingsButtonRow( + title = stringResource(R.string.widgets__suggestions__name), + subtitle = stringResource(R.string.widgets__suggestions__description), + iconRes = R.drawable.widget_suggestions, + iconSize = 48.dp, + maxLinesSubtitle = 1, + onClick = onSuggestionsClick, + modifier = Modifier.testTag("WidgetListItem-suggestions") + ) SettingsButtonRow( title = stringResource(R.string.widgets__price__name), subtitle = stringResource(R.string.widgets__price__description), @@ -100,8 +110,9 @@ private fun Preview() { AppThemeSurface { AddWidgetsScreen( onWidgetSelected = {}, + onSuggestionsClick = {}, fiatSymbol = "$", - onBackCLick = {} + onBackCLick = {}, ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fe6601bee..5f4832314 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1001,4 +1001,6 @@ Source Widgets Swipe down\nto find your\nwidgets + Discover everything Bitkit has to offer. + Bitkit Suggestions From 7cf6cd169858af3260b5490bbfe4e9643ddc9dca Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 13:59:16 -0300 Subject: [PATCH 10/64] feat: create SuggestionsPreviewScreen and wire navigation --- app/src/main/java/to/bitkit/ui/ContentView.kt | 13 +- .../shop/shopDiscover/ShopDiscoverScreen.kt | 10 +- .../suggestions/SuggestionsPreviewScreen.kt | 146 ++++++++++++++++++ .../main/res/drawable/widget_suggestions.xml | 20 +++ 4 files changed, 183 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt create mode 100644 app/src/main/res/drawable/widget_suggestions.xml diff --git a/app/src/main/java/to/bitkit/ui/ContentView.kt b/app/src/main/java/to/bitkit/ui/ContentView.kt index 45ae8f1d5..de420783d 100644 --- a/app/src/main/java/to/bitkit/ui/ContentView.kt +++ b/app/src/main/java/to/bitkit/ui/ContentView.kt @@ -105,6 +105,7 @@ import to.bitkit.ui.screens.wallets.activity.TagSelectorSheet import to.bitkit.ui.screens.wallets.receive.ReceiveSheet import to.bitkit.ui.screens.wallets.suggestion.BuyIntroScreen import to.bitkit.ui.screens.widgets.AddWidgetsScreen +import to.bitkit.ui.screens.widgets.suggestions.SuggestionsPreviewScreen import to.bitkit.ui.screens.widgets.WidgetsIntroScreen import to.bitkit.ui.screens.widgets.blocks.BlocksEditScreen import to.bitkit.ui.screens.widgets.blocks.BlocksPreviewScreen @@ -1395,8 +1396,15 @@ private fun NavGraphBuilder.widgets( WidgetType.WEATHER -> navController.navigate(Routes.WeatherPreview) } }, + onSuggestionsClick = { navController.navigate(Routes.SuggestionsPreview) }, fiatSymbol = LocalCurrencies.current.currencySymbol, - onBackCLick = { navController.popBackStack() } + onBackCLick = { navController.popBackStack() }, + ) + } + composableWithDefaultTransitions { + SuggestionsPreviewScreen( + onBackClick = { navController.popBackStack() }, + onAddWidget = { navController.navigateToHome() }, ) } composableWithDefaultTransitions { @@ -1981,6 +1989,9 @@ sealed interface Routes { @Serializable data object AddWidget : Routes + @Serializable + data object SuggestionsPreview : Routes + @Serializable data object Headlines : Routes diff --git a/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt b/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt index 8517a76eb..c20f204c3 100644 --- a/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt @@ -55,7 +55,7 @@ import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors import to.bitkit.ui.theme.Shapes -private const val SHOP_CARD_SIZE = 164 + @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -128,7 +128,7 @@ private fun ShopTabContent( description = stringResource(R.string.other__shop__discover__gift_cards__description), icon = R.drawable.gift, captionColor = Colors.Gray1, - size = SHOP_CARD_SIZE, + disableGlow = true, onClick = { navigateWebView("gift-cards", title) @@ -142,7 +142,7 @@ private fun ShopTabContent( description = stringResource(R.string.other__shop__discover__esims__description), icon = R.drawable.globe, captionColor = Colors.Gray1, - size = SHOP_CARD_SIZE, + disableGlow = true, onClick = { navigateWebView("esims", title2) @@ -163,7 +163,7 @@ private fun ShopTabContent( description = stringResource(R.string.other__shop__discover__refill__description), icon = R.drawable.phone, captionColor = Colors.Gray1, - size = SHOP_CARD_SIZE, + disableGlow = true, onClick = { navigateWebView("refill", title) @@ -176,7 +176,7 @@ private fun ShopTabContent( title = title2, description = stringResource(R.string.other__shop__discover__travel__description), icon = R.drawable.rocket_2, - size = SHOP_CARD_SIZE, + disableGlow = true, captionColor = Colors.Gray1, onClick = { diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt new file mode 100644 index 000000000..81da70703 --- /dev/null +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt @@ -0,0 +1,146 @@ +package to.bitkit.ui.screens.widgets.suggestions + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.items +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import to.bitkit.R +import to.bitkit.models.Suggestion +import to.bitkit.ui.components.BodyM +import to.bitkit.ui.components.FillHeight +import to.bitkit.ui.components.Headline +import to.bitkit.ui.components.PrimaryButton +import to.bitkit.ui.components.SuggestionCard +import to.bitkit.ui.components.Text13Up +import to.bitkit.ui.components.VerticalSpacer +import to.bitkit.ui.scaffold.AppTopBar +import to.bitkit.ui.scaffold.DrawerNavIcon +import to.bitkit.ui.scaffold.ScreenColumn +import to.bitkit.ui.theme.AppThemeSurface +import to.bitkit.ui.theme.Colors + +private val previewSuggestions = listOf(Suggestion.BUY, Suggestion.BACK_UP) + +@Composable +fun SuggestionsPreviewScreen( + onBackClick: () -> Unit, + onAddWidget: () -> Unit, +) { + Content( + onBackClick = onBackClick, + onAddWidget = onAddWidget, + ) +} + +@Composable +private fun Content( + onBackClick: () -> Unit, + onAddWidget: () -> Unit, +) { + ScreenColumn { + AppTopBar( + titleText = stringResource(R.string.widgets__widget__nav_title), + onBackClick = onBackClick, + actions = { DrawerNavIcon() }, + ) + + Column( + modifier = Modifier.padding(horizontal = 16.dp) + ) { + VerticalSpacer(26.dp) + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Headline( + text = AnnotatedString(stringResource(R.string.widgets__suggestions__name)), + modifier = Modifier.width(200.dp) + ) + Icon( + painter = painterResource(R.drawable.widget_suggestions), + contentDescription = null, + tint = Color.Unspecified, + modifier = Modifier.size(64.dp) + ) + } + + BodyM( + text = stringResource(R.string.widgets__suggestions__description), + color = Colors.White64, + modifier = Modifier.padding(vertical = 16.dp) + ) + + HorizontalDivider() + + FillHeight() + + Text13Up( + stringResource(R.string.common__preview), + color = Colors.White64, + modifier = Modifier.padding(vertical = 16.dp) + ) + + LazyVerticalGrid( + columns = GridCells.Fixed(2), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + userScrollEnabled = false, + modifier = Modifier.fillMaxWidth() + ) { + items( + items = previewSuggestions, + key = { it.name } + ) { item -> + SuggestionCard( + gradientColor = item.color, + title = stringResource(item.title), + description = stringResource(item.description), + icon = item.icon, + disableGlow = true, + onClick = {}, + ) + } + } + + VerticalSpacer(21.dp) + + PrimaryButton( + text = stringResource(R.string.widgets__add), + onClick = onAddWidget, + modifier = Modifier.fillMaxWidth() + ) + + VerticalSpacer(21.dp) + } + } +} + +@Preview(showBackground = true) +@Composable +private fun Preview() { + AppThemeSurface { + Content( + onBackClick = {}, + onAddWidget = {}, + ) + } +} diff --git a/app/src/main/res/drawable/widget_suggestions.xml b/app/src/main/res/drawable/widget_suggestions.xml new file mode 100644 index 000000000..2fa730d04 --- /dev/null +++ b/app/src/main/res/drawable/widget_suggestions.xml @@ -0,0 +1,20 @@ + + + + + + From f59d13c45d64f93504093894985c2be146d9d28e Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 18 Feb 2026 14:15:18 -0300 Subject: [PATCH 11/64] chore: lint --- .../bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt | 2 -- app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt b/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt index c20f204c3..b9fc346c8 100644 --- a/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/shop/shopDiscover/ShopDiscoverScreen.kt @@ -55,8 +55,6 @@ import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors import to.bitkit.ui.theme.Shapes - - @OptIn(ExperimentalMaterial3Api::class) @Composable fun ShopDiscoverScreen( diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index 5302c2b40..3f9471af1 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -27,6 +27,7 @@ import to.bitkit.ui.screens.widgets.blocks.toWeatherModel import javax.inject.Inject import kotlin.time.Duration.Companion.seconds +@Suppress("TooManyFunctions") @HiltViewModel class HomeViewModel @Inject constructor( private val walletRepo: WalletRepo, @@ -295,7 +296,6 @@ class HomeViewModel @Inject constructor( } companion object { - private const val TAG = "HomeViewModel" private const val MAX_SUGGESTIONS = 4 } } From 634af1d06a67ce5efe65687aa87358cc8d854485 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 19 Feb 2026 14:19:20 -0300 Subject: [PATCH 12/64] feat: replace autogenerated icons --- .../bitkit/ui/screens/wallets/HomeScreen.kt | 3 +- .../ui/screens/widgets/AddWidgetsScreen.kt | 18 +++++------ app/src/main/res/drawable/ic_swipe_hint.xml | 9 ------ .../main/res/drawable/swipe_instruction.xml | 31 +++++++++++++++++++ .../main/res/drawable/widget_suggestions.xml | 14 +++++---- 5 files changed, 50 insertions(+), 25 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_swipe_hint.xml create mode 100644 app/src/main/res/drawable/swipe_instruction.xml diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index e3688a12f..1243e0136 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -452,6 +452,7 @@ private fun WalletPage( when (banner) { ActivityBannerType.SPENDING -> rootNavController.navigate(Routes.SettingUp) + ActivityBannerType.SAVINGS -> Unit } }, @@ -625,7 +626,7 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { ) HorizontalSpacer(16.dp) Icon( - painter = painterResource(R.drawable.ic_swipe_hint), + painter = painterResource(R.drawable.swipe_instruction), contentDescription = null, tint = Colors.White64, modifier = Modifier.size(40.dp) diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt index e8fb45242..39280fde6 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt @@ -33,15 +33,6 @@ fun AddWidgetsScreen( Column( modifier = Modifier.padding(horizontal = 16.dp) ) { - SettingsButtonRow( - title = stringResource(R.string.widgets__suggestions__name), - subtitle = stringResource(R.string.widgets__suggestions__description), - iconRes = R.drawable.widget_suggestions, - iconSize = 48.dp, - maxLinesSubtitle = 1, - onClick = onSuggestionsClick, - modifier = Modifier.testTag("WidgetListItem-suggestions") - ) SettingsButtonRow( title = stringResource(R.string.widgets__price__name), subtitle = stringResource(R.string.widgets__price__description), @@ -100,6 +91,15 @@ fun AddWidgetsScreen( onClick = { onWidgetSelected(WidgetType.CALCULATOR) }, modifier = Modifier.testTag("WidgetListItem-calculator") ) + SettingsButtonRow( + title = stringResource(R.string.widgets__suggestions__name), + subtitle = stringResource(R.string.widgets__suggestions__description), + iconRes = R.drawable.widget_suggestions, + iconSize = 48.dp, + maxLinesSubtitle = 1, + onClick = onSuggestionsClick, + modifier = Modifier.testTag("WidgetListItem-suggestions") + ) } } } diff --git a/app/src/main/res/drawable/ic_swipe_hint.xml b/app/src/main/res/drawable/ic_swipe_hint.xml deleted file mode 100644 index 5e60113a9..000000000 --- a/app/src/main/res/drawable/ic_swipe_hint.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/swipe_instruction.xml b/app/src/main/res/drawable/swipe_instruction.xml new file mode 100644 index 000000000..6ec67c2b2 --- /dev/null +++ b/app/src/main/res/drawable/swipe_instruction.xml @@ -0,0 +1,31 @@ + + + + + + + diff --git a/app/src/main/res/drawable/widget_suggestions.xml b/app/src/main/res/drawable/widget_suggestions.xml index 2fa730d04..f5ce0bbdd 100644 --- a/app/src/main/res/drawable/widget_suggestions.xml +++ b/app/src/main/res/drawable/widget_suggestions.xml @@ -7,14 +7,16 @@ android:pathData="M6.4,0L41.6,0A6.4,6.4 0,0 1,48 6.4L48,41.6A6.4,6.4 0,0 1,41.6 48L6.4,48A6.4,6.4 0,0 1,0 41.6L0,6.4A6.4,6.4 0,0 1,6.4 0z" android:fillColor="#FF4400"/> + android:pathData="M28.687,22.125V20.719C28.687,20.097 28.441,19.501 28.001,19.062C27.561,18.622 26.965,18.375 26.344,18.375C25.722,18.375 25.126,18.622 24.686,19.062C24.247,19.501 24,20.097 24,20.719V13.219C24,12.597 23.753,12.001 23.313,11.561C22.874,11.122 22.278,10.875 21.656,10.875C21.035,10.875 20.438,11.122 19.999,11.561C19.559,12.001 19.312,12.597 19.312,13.219V27.43L16.743,22.979C16.589,22.712 16.384,22.478 16.14,22.291C15.896,22.103 15.617,21.965 15.32,21.885C15.022,21.806 14.712,21.785 14.407,21.825C14.101,21.865 13.807,21.965 13.54,22.119C13.274,22.273 13.04,22.478 12.852,22.723C12.665,22.967 12.528,23.246 12.448,23.543C12.368,23.841 12.348,24.151 12.389,24.456C12.429,24.762 12.529,25.056 12.683,25.323C16.5,33.375 18.822,36.188 24,36.188C25.231,36.188 26.45,35.945 27.588,35.474C28.725,35.003 29.758,34.312 30.629,33.442C31.5,32.571 32.19,31.538 32.661,30.4C33.132,29.263 33.375,28.044 33.375,26.813V22.125C33.375,21.503 33.128,20.907 32.688,20.468C32.249,20.028 31.653,19.781 31.031,19.781C30.41,19.781 29.813,20.028 29.374,20.468C28.934,20.907 28.687,21.503 28.687,22.125V22.125Z" + android:strokeAlpha="0.2" + android:fillColor="#FF6600" + android:fillAlpha="0.2"/> + android:fillType="evenOdd"/> + android:fillType="evenOdd"/> From b134eb0a78ad41d23e71dcbd6fe7d9833dbac13b Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 19 Feb 2026 14:58:21 -0300 Subject: [PATCH 13/64] feat: make suggestions a widget type --- .../main/java/to/bitkit/models/WidgetType.kt | 4 + .../to/bitkit/repositories/WidgetsRepo.kt | 12 ++- app/src/main/java/to/bitkit/ui/ContentView.kt | 9 +- .../bitkit/ui/screens/wallets/HomeScreen.kt | 101 ++++++++++-------- .../ui/screens/widgets/AddWidgetsScreen.kt | 4 +- .../suggestions/SuggestionsPreviewScreen.kt | 79 +++++++++++--- .../suggestions/SuggestionsViewModel.kt | 44 ++++++++ 7 files changed, 179 insertions(+), 74 deletions(-) create mode 100644 app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsViewModel.kt diff --git a/app/src/main/java/to/bitkit/models/WidgetType.kt b/app/src/main/java/to/bitkit/models/WidgetType.kt index 95d0c74bc..00f26bce4 100644 --- a/app/src/main/java/to/bitkit/models/WidgetType.kt +++ b/app/src/main/java/to/bitkit/models/WidgetType.kt @@ -31,5 +31,9 @@ enum class WidgetType( WEATHER( iconRes = R.drawable.widget_cloud, title = R.string.widgets__weather__name + ), + SUGGESTIONS( + iconRes = R.drawable.widget_suggestions, + title = R.string.widgets__suggestions__name, ) } diff --git a/app/src/main/java/to/bitkit/repositories/WidgetsRepo.kt b/app/src/main/java/to/bitkit/repositories/WidgetsRepo.kt index 66f7b2338..fb5746535 100644 --- a/app/src/main/java/to/bitkit/repositories/WidgetsRepo.kt +++ b/app/src/main/java/to/bitkit/repositories/WidgetsRepo.kt @@ -84,7 +84,7 @@ class WidgetsRepo @Inject constructor( private fun updateWidgetJobs(enabledWidgetTypes: Set) { val widgetTypesWithServices = WidgetType.entries.filter { - it != WidgetType.CALCULATOR + it != WidgetType.CALCULATOR && it != WidgetType.SUGGESTIONS } widgetTypesWithServices.forEach { widgetType -> @@ -138,7 +138,9 @@ class WidgetsRepo @Inject constructor( } } - WidgetType.CALCULATOR -> throw NotImplementedError("Calculator widget doesn't need a service") + WidgetType.CALCULATOR, + WidgetType.SUGGESTIONS, + -> throw NotImplementedError("Widget doesn't need a service") } widgetJobs[widgetType] = job @@ -226,8 +228,10 @@ class WidgetsRepo @Inject constructor( widgetsStore.updateBlock(block) } - WidgetType.CALCULATOR -> { - throw NotImplementedError("Calculator widget doesn't need a service") + WidgetType.CALCULATOR, + WidgetType.SUGGESTIONS, + -> { + throw NotImplementedError("Widget doesn't need a service") } WidgetType.FACTS -> updateWidget(factsService) { facts -> diff --git a/app/src/main/java/to/bitkit/ui/ContentView.kt b/app/src/main/java/to/bitkit/ui/ContentView.kt index de420783d..1c3f8c9dc 100644 --- a/app/src/main/java/to/bitkit/ui/ContentView.kt +++ b/app/src/main/java/to/bitkit/ui/ContentView.kt @@ -106,6 +106,7 @@ import to.bitkit.ui.screens.wallets.receive.ReceiveSheet import to.bitkit.ui.screens.wallets.suggestion.BuyIntroScreen import to.bitkit.ui.screens.widgets.AddWidgetsScreen import to.bitkit.ui.screens.widgets.suggestions.SuggestionsPreviewScreen +import to.bitkit.ui.screens.widgets.suggestions.SuggestionsViewModel import to.bitkit.ui.screens.widgets.WidgetsIntroScreen import to.bitkit.ui.screens.widgets.blocks.BlocksEditScreen import to.bitkit.ui.screens.widgets.blocks.BlocksPreviewScreen @@ -1394,17 +1395,19 @@ private fun NavGraphBuilder.widgets( WidgetType.NEWS -> navController.navigate(Routes.HeadlinesPreview) WidgetType.PRICE -> navController.navigate(Routes.PricePreview) WidgetType.WEATHER -> navController.navigate(Routes.WeatherPreview) + WidgetType.SUGGESTIONS -> navController.navigate(Routes.SuggestionsPreview) } }, - onSuggestionsClick = { navController.navigate(Routes.SuggestionsPreview) }, fiatSymbol = LocalCurrencies.current.currencySymbol, onBackCLick = { navController.popBackStack() }, ) } composableWithDefaultTransitions { + val viewModel = hiltViewModel() SuggestionsPreviewScreen( - onBackClick = { navController.popBackStack() }, - onAddWidget = { navController.navigateToHome() }, + suggestionsViewModel = viewModel, + onClose = { navController.navigateToHome() }, + onBack = { navController.popBackStack() }, ) } composableWithDefaultTransitions { diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 1243e0136..acb5bbb83 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -87,7 +87,6 @@ import to.bitkit.ui.components.StatusBarSpacer import to.bitkit.ui.components.SuggestionCard import to.bitkit.ui.components.TabBar import to.bitkit.ui.components.TertiaryButton -import to.bitkit.ui.components.Text13Up import to.bitkit.ui.components.TopBarSpacer import to.bitkit.ui.components.VerticalSpacer import to.bitkit.ui.components.WalletBalanceView @@ -257,6 +256,7 @@ fun HomeScreen( WidgetType.NEWS -> rootNavController.navigate(Routes.HeadlinesPreview) WidgetType.PRICE -> rootNavController.navigate(Routes.PricePreview) WidgetType.WEATHER -> rootNavController.navigate(Routes.WeatherPreview) + WidgetType.SUGGESTIONS -> rootNavController.navigate(Routes.SuggestionsPreview) } }, onClickDeleteWidget = { widgetType -> @@ -513,14 +513,6 @@ private fun WidgetsPage( TopBarSpacer() VerticalSpacer(16.dp) - AnimatedVisibility(homeUiState.suggestions.isNotEmpty()) { - SuggestionsSection( - suggestions = homeUiState.suggestions, - onRemoveSuggestion = onRemoveSuggestion, - onClickSuggestion = onClickSuggestion, - ) - } - if (homeUiState.isEditingWidgets) { DragDropColumn( items = homeUiState.widgetsWithPosition, @@ -540,7 +532,11 @@ private fun WidgetsPage( ) } } else { - Widgets(homeUiState) + Widgets( + homeUiState = homeUiState, + onRemoveSuggestion = onRemoveSuggestion, + onClickSuggestion = onClickSuggestion, + ) } VerticalSpacer(32.dp) @@ -571,42 +567,38 @@ private fun SuggestionsSection( ) { val rows = (suggestions.size + 1) / 2 - Column(modifier = modifier.padding(bottom = 32.dp)) { - Text13Up(stringResource(R.string.cards__suggestions), color = Colors.White64) - VerticalSpacer(16.dp) - BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { - val cardSize = (maxWidth - 16.dp) / 2 - val gridHeight = (cardSize * rows) + (16.dp * (rows - 1)) - LazyVerticalGrid( - columns = GridCells.Fixed(2), - horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalArrangement = Arrangement.spacedBy(16.dp), - userScrollEnabled = false, - modifier = Modifier - .fillMaxWidth() - .height(gridHeight) - .testTag("Suggestions") - ) { - items( - items = suggestions, - key = { it.name } - ) { item -> - SuggestionCard( - gradientColor = item.color, - title = stringResource(item.title), - description = stringResource(item.description), - icon = item.icon, - onClose = { onRemoveSuggestion(item) }.takeIf { item.dismissible }, - onClick = { onClickSuggestion(item) }, - modifier = Modifier - .testTag("Suggestion-${item.name.lowercase()}") - .animateItem( - fadeInSpec = tween(durationMillis = ANIMATION_DURATION_MS), - fadeOutSpec = tween(durationMillis = ANIMATION_DURATION_MS), - placementSpec = tween(durationMillis = ANIMATION_DURATION_MS), - ) - ) - } + BoxWithConstraints(modifier = modifier.fillMaxWidth()) { + val cardSize = (maxWidth - 16.dp) / 2 + val gridHeight = (cardSize * rows) + (16.dp * (rows - 1)) + LazyVerticalGrid( + columns = GridCells.Fixed(2), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + userScrollEnabled = false, + modifier = Modifier + .fillMaxWidth() + .height(gridHeight) + .testTag("Suggestions") + ) { + items( + items = suggestions, + key = { it.name } + ) { item -> + SuggestionCard( + gradientColor = item.color, + title = stringResource(item.title), + description = stringResource(item.description), + icon = item.icon, + onClose = { onRemoveSuggestion(item) }.takeIf { item.dismissible }, + onClick = { onClickSuggestion(item) }, + modifier = Modifier + .testTag("Suggestion-${item.name.lowercase()}") + .animateItem( + fadeInSpec = tween(durationMillis = ANIMATION_DURATION_MS), + fadeOutSpec = tween(durationMillis = ANIMATION_DURATION_MS), + placementSpec = tween(durationMillis = ANIMATION_DURATION_MS), + ) + ) } } } @@ -634,8 +626,13 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { } } +@Suppress("CyclomaticComplexMethod") @Composable -private fun Widgets(homeUiState: HomeUiState) { +private fun Widgets( + homeUiState: HomeUiState, + onRemoveSuggestion: (Suggestion) -> Unit, + onClickSuggestion: (Suggestion) -> Unit, +) { Column( modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(16.dp) @@ -726,6 +723,16 @@ private fun Widgets(homeUiState: HomeUiState) { ) } } + + WidgetType.SUGGESTIONS -> { + if (homeUiState.suggestions.isNotEmpty()) { + SuggestionsSection( + suggestions = homeUiState.suggestions, + onRemoveSuggestion = onRemoveSuggestion, + onClickSuggestion = onClickSuggestion, + ) + } + } } } } diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt index 39280fde6..4c37a8008 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/AddWidgetsScreen.kt @@ -19,7 +19,6 @@ import to.bitkit.ui.theme.AppThemeSurface @Composable fun AddWidgetsScreen( onWidgetSelected: (WidgetType) -> Unit, - onSuggestionsClick: () -> Unit, onBackCLick: () -> Unit, fiatSymbol: String, ) { @@ -97,7 +96,7 @@ fun AddWidgetsScreen( iconRes = R.drawable.widget_suggestions, iconSize = 48.dp, maxLinesSubtitle = 1, - onClick = onSuggestionsClick, + onClick = { onWidgetSelected(WidgetType.SUGGESTIONS) }, modifier = Modifier.testTag("WidgetListItem-suggestions") ) } @@ -110,7 +109,6 @@ private fun Preview() { AppThemeSurface { AddWidgetsScreen( onWidgetSelected = {}, - onSuggestionsClick = {}, fiatSymbol = "$", onBackCLick = {}, ) diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt index 81da70703..3c9e73d76 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.foundation.lazy.grid.items import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -21,12 +22,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle import to.bitkit.R import to.bitkit.models.Suggestion import to.bitkit.ui.components.BodyM import to.bitkit.ui.components.FillHeight import to.bitkit.ui.components.Headline import to.bitkit.ui.components.PrimaryButton +import to.bitkit.ui.components.SecondaryButton import to.bitkit.ui.components.SuggestionCard import to.bitkit.ui.components.Text13Up import to.bitkit.ui.components.VerticalSpacer @@ -40,24 +43,38 @@ private val previewSuggestions = listOf(Suggestion.BUY, Suggestion.BACK_UP) @Composable fun SuggestionsPreviewScreen( - onBackClick: () -> Unit, - onAddWidget: () -> Unit, + suggestionsViewModel: SuggestionsViewModel, + onClose: () -> Unit, + onBack: () -> Unit, ) { + val isSuggestionsWidgetEnabled by suggestionsViewModel.isSuggestionsWidgetEnabled + .collectAsStateWithLifecycle() + Content( - onBackClick = onBackClick, - onAddWidget = onAddWidget, + onBack = onBack, + isSuggestionsWidgetEnabled = isSuggestionsWidgetEnabled, + onClickDelete = { + suggestionsViewModel.removeWidget() + onClose() + }, + onClickSave = { + suggestionsViewModel.addWidget() + onClose() + }, ) } @Composable private fun Content( - onBackClick: () -> Unit, - onAddWidget: () -> Unit, + onBack: () -> Unit, + isSuggestionsWidgetEnabled: Boolean, + onClickDelete: () -> Unit, + onClickSave: () -> Unit, ) { ScreenColumn { AppTopBar( titleText = stringResource(R.string.widgets__widget__nav_title), - onBackClick = onBackClick, + onBackClick = onBack, actions = { DrawerNavIcon() }, ) @@ -121,15 +138,28 @@ private fun Content( } } - VerticalSpacer(21.dp) - - PrimaryButton( - text = stringResource(R.string.widgets__add), - onClick = onAddWidget, - modifier = Modifier.fillMaxWidth() - ) + Row( + modifier = Modifier + .padding(vertical = 21.dp) + .fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + if (isSuggestionsWidgetEnabled) { + SecondaryButton( + text = stringResource(R.string.common__delete), + fullWidth = false, + onClick = onClickDelete, + modifier = Modifier.weight(1f), + ) + } - VerticalSpacer(21.dp) + PrimaryButton( + text = stringResource(R.string.common__save), + fullWidth = false, + onClick = onClickSave, + modifier = Modifier.weight(1f), + ) + } } } } @@ -139,8 +169,23 @@ private fun Content( private fun Preview() { AppThemeSurface { Content( - onBackClick = {}, - onAddWidget = {}, + onBack = {}, + isSuggestionsWidgetEnabled = false, + onClickDelete = {}, + onClickSave = {}, + ) + } +} + +@Preview(showBackground = true) +@Composable +private fun PreviewWithDelete() { + AppThemeSurface { + Content( + onBack = {}, + isSuggestionsWidgetEnabled = true, + onClickDelete = {}, + onClickSave = {}, ) } } diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsViewModel.kt new file mode 100644 index 000000000..afa8b5aa3 --- /dev/null +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsViewModel.kt @@ -0,0 +1,44 @@ +package to.bitkit.ui.screens.widgets.suggestions + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import to.bitkit.models.WidgetType +import to.bitkit.repositories.WidgetsRepo +import javax.inject.Inject + +@HiltViewModel +class SuggestionsViewModel @Inject constructor( + private val widgetsRepo: WidgetsRepo, +) : ViewModel() { + + companion object { + private const val SUBSCRIBE_TIMEOUT = 5000L + } + + val isSuggestionsWidgetEnabled: StateFlow = widgetsRepo.widgetsDataFlow + .map { widgetsData -> + widgetsData.widgets.any { it.type == WidgetType.SUGGESTIONS } + } + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(SUBSCRIBE_TIMEOUT), false) + + val showWidgetTitles: StateFlow = widgetsRepo.showWidgetTitles + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(SUBSCRIBE_TIMEOUT), false) + + fun addWidget() { + viewModelScope.launch { + widgetsRepo.addWidget(WidgetType.SUGGESTIONS) + } + } + + fun removeWidget() { + viewModelScope.launch { + widgetsRepo.deleteWidget(WidgetType.SUGGESTIONS) + } + } +} From eb3a667be409c856f8feabd8e75d55bdc1449189 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 10:46:54 -0300 Subject: [PATCH 14/64] fix: check for pending transfer on showEmptyState --- .../to/bitkit/ui/screens/wallets/HomeViewModel.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index 3f9471af1..f28a3e764 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -83,10 +83,15 @@ class HomeViewModel @Inject constructor( viewModelScope.launch { combine( settingsStore.data, - walletRepo.balanceState - ) { settings, balanceState -> + walletRepo.balanceState, + transferRepo.activeTransfers, + ) { settings, balanceState, activeTransfers -> _uiState.value.copy( - showEmptyState = settings.showEmptyBalanceView && balanceState.totalSats == 0uL + showEmptyState = settings.showEmptyBalanceView && + balanceState.totalSats == 0uL && + balanceState.balanceInTransferToSpending == 0uL && + balanceState.balanceInTransferToSavings == 0uL && + activeTransfers.isEmpty() ) }.collect { newState -> _uiState.update { newState } From 63d4e38343d4e886124e960391354e0d81b05659 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 11:09:12 -0300 Subject: [PATCH 15/64] fix: replace icon with image --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index acb5bbb83..e875233ba 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -2,6 +2,7 @@ package to.bitkit.ui.screens.wallets import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -617,11 +618,9 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { modifier = Modifier.weight(1f) ) HorizontalSpacer(16.dp) - Icon( + Image( painter = painterResource(R.drawable.swipe_instruction), contentDescription = null, - tint = Colors.White64, - modifier = Modifier.size(40.dp) ) } } From bd60dbcb61bdb5635cc522d19efc6fab5da4c49f Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 11:17:00 -0300 Subject: [PATCH 16/64] fix: implement Headline24 style --- .../main/java/to/bitkit/ui/components/Text.kt | 17 +++++++++++++++++ .../to/bitkit/ui/screens/wallets/HomeScreen.kt | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/Text.kt b/app/src/main/java/to/bitkit/ui/components/Text.kt index 8bfa181b4..e30ad3b2d 100644 --- a/app/src/main/java/to/bitkit/ui/components/Text.kt +++ b/app/src/main/java/to/bitkit/ui/components/Text.kt @@ -84,6 +84,23 @@ fun Headline20( ) } +@Composable +fun Headline24( + text: AnnotatedString, + modifier: Modifier = Modifier, + color: Color = MaterialTheme.colorScheme.primary, +) { + Text( + text = text.toUpperCase(), + style = AppTextStyles.Headline.merge( + fontSize = 24.sp, + lineHeight = 24.sp, + color = color, + ), + modifier = modifier, + ) +} + @Composable fun Title( text: String, diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index e875233ba..6788a3ad3 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -79,7 +79,7 @@ import to.bitkit.ui.Routes import to.bitkit.ui.components.ActivityBanner import to.bitkit.ui.components.AppStatus import to.bitkit.ui.components.BalanceHeaderView -import to.bitkit.ui.components.Display +import to.bitkit.ui.components.Headline24 import to.bitkit.ui.components.EmptyStateView import to.bitkit.ui.components.FillHeight import to.bitkit.ui.components.HorizontalSpacer @@ -613,7 +613,7 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { .fillMaxWidth() .padding(vertical = 32.dp) ) { - Display( + Headline24( text = stringResource(R.string.widgets__onboarding_swipe).withAccent(), modifier = Modifier.weight(1f) ) From 2d0ca86b014bb97c519b290fc0e5da8e905ebe24 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 11:17:16 -0300 Subject: [PATCH 17/64] fix: accent tag --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5f4832314..85c401fe5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1000,7 +1000,7 @@ Widget Source Widgets - Swipe down\nto find your\nwidgets + Swipe down\nto find your\n<accent>widgets</accent> Discover everything Bitkit has to offer. Bitkit Suggestions From 10b1da18e0143a39c7540f140cfc027948cfcf17 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 11:20:23 -0300 Subject: [PATCH 18/64] feat: image padding --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 6788a3ad3..f0b842754 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -621,6 +621,7 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { Image( painter = painterResource(R.drawable.swipe_instruction), contentDescription = null, + modifier = Modifier.padding(bottom = 12.dp) ) } } From 907df7dd4d9b38eeb24cf1ed39f4e73be7080308 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 12:15:41 -0300 Subject: [PATCH 19/64] fix: bottom padding --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index f0b842754..e6b14e118 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -97,6 +97,7 @@ import to.bitkit.ui.navigateToAllActivity import to.bitkit.ui.navigateToTransferFunding import to.bitkit.ui.navigateToTransferIntro import to.bitkit.ui.scaffold.AppAlertDialog +import to.bitkit.ui.theme.Insets import to.bitkit.ui.screens.wallets.activity.components.ActivityListSimple import to.bitkit.ui.screens.wallets.activity.utils.previewActivityItems import to.bitkit.ui.screens.widgets.DragAndDropWidget @@ -478,7 +479,7 @@ private fun WalletPage( } } - VerticalSpacer(150.dp) + VerticalSpacer(116.dp + Insets.Bottom) } } @@ -611,7 +612,7 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { verticalAlignment = Alignment.Bottom, modifier = modifier .fillMaxWidth() - .padding(vertical = 32.dp) + .padding(top = 32.dp) ) { Headline24( text = stringResource(R.string.widgets__onboarding_swipe).withAccent(), From ce97fccd7effabef090742a6c6db7f3c9c2851a7 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 13:36:38 -0300 Subject: [PATCH 20/64] fix: cards alignment --- app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index cf1dd72c1..99b1862a5 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -26,6 +26,7 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.ShapeDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Brush @@ -122,6 +123,7 @@ fun SuggestionCard( Image( painter = painterResource(icon), contentDescription = null, + alignment = Alignment.CenterStart, contentScale = ContentScale.FillHeight, modifier = Modifier.weight(1f) ) From e91c097592fb94b20603a1e2b7b74e7991dc976e Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 13:41:20 -0300 Subject: [PATCH 21/64] fix: close suggestion icon color --- app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index 99b1862a5..aa16f51ad 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -138,7 +138,7 @@ fun SuggestionCard( Icon( painter = painterResource(R.drawable.ic_x), contentDescription = null, - tint = Colors.White, + tint = Colors.White64, ) } } From 169df7baff23a83275ff786e1683ee697fb788b7 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 13:46:32 -0300 Subject: [PATCH 22/64] fix: show all padding --- .../ui/screens/wallets/activity/components/ActivityListSimple.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt index a8aa4f75f..bb5c9d4ab 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt @@ -38,7 +38,6 @@ fun ActivityListSimple( onClick = onAllActivityClick, modifier = Modifier .wrapContentWidth() - .padding(top = 8.dp) .testTag("ActivityShowAll") ) } From 767d5cd858540a64e0701b381b0e0fa25f7a6407 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 13:52:41 -0300 Subject: [PATCH 23/64] fix: update show all label --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-b+es+419/strings.xml | 2 +- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 7bad49966..1ce6686ad 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -796,7 +796,7 @@ أُزيل من Mempool مُرسل أُرسل لنفسي - عرض كل النشاط + عرض الكل الحالة ناجح الكل diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml index 16dcbef26..a619d6363 100644 --- a/app/src/main/res/values-b+es+419/strings.xml +++ b/app/src/main/res/values-b+es+419/strings.xml @@ -796,7 +796,7 @@ Eliminado de Mempool Enviado Enviado a mí mismo - Mostrar toda la actividad + Mostrar todo Estatus Éxito Todas diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index cb5e4ad8c..79d34ae77 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -796,7 +796,7 @@ Eliminat de la Mempool Enviat Enviat a mi mateix - Mostra tota l\'activitat + Mostra-ho tot Estat Exitós Tots diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7182c5530..48fc95e61 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -796,7 +796,7 @@ Odebráno z Mempoolu Posláno Posláno sobě - Zobrazit veškerou aktivitu + Zobrazit vše Status Úspěch Vše diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 15d9fa57e..949139b26 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -866,7 +866,7 @@ Du wirst empfangen MINIMUM Aktivität - Alle Aktivitäten anzeigen + Alle anzeigen Noch keine Aktivitäten Empfange einige Gelder, um zu starten Gesendet diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index f5f597595..d5cde34c4 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -796,7 +796,7 @@ Αφαιρέθηκε από το Mempool Στάλθηκε Στάλθηκε στον εαυτό μου - Εμφάνιση όλης της δραστηριότητας + Εμφάνιση όλων Κατάσταση Επιτυχής Όλα diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 531548579..243569e5d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -796,7 +796,7 @@ Eliminado De Mempool Enviado Enviado a mí mismo - Mostrar toda la actividad + Mostrar todo Estatus Éxito Todas diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e83746275..5d6ad056e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -861,7 +861,7 @@ Recibirás MÍNIMO Actividad - Mostrar toda la actividad + Mostrar todo Aún no hay actividad Reciba algunos fondos para empezar Enviado diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e225932ff..6f8a88b7c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -856,7 +856,7 @@ Vous recevrez MINIMUM Activité - Afficher toutes les activités + Tout afficher Pas encore d\'activité Recevoir des fonds pour démarrer Envoyé diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 4820186a7..fe1348e62 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -796,7 +796,7 @@ Rimossa dalla Mempool Inviato Inviato a me stesso - Visualizza tutte le attività + Mostra tutto Stato Successo Tutti diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d013e28af..2ce90640d 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -796,7 +796,7 @@ Verwijderd uit mempool Verzonden Naar mezelf verzonden - Alle activiteit tonen + Alles tonen Status Succesvol Alles diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5e471c82d..9a2d808e1 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -856,7 +856,7 @@ Otrzymasz MINIMUM Aktywność - Pokaż całą aktywność + Pokaż wszystko Nie ma jeszcze aktywności Otrzymaj trochę środków aby rozpocząć Wysłane diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 81514d997..304fd5e94 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -796,7 +796,7 @@ Removido da Mempool Enviado Enviado para mim mesmo - Mostrar Todas as Atividades + Mostrar Tudo Status Sucesso Todos diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 3183fda3e..f20ecd545 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -811,7 +811,7 @@ Você receberá MÍNIMO Atividade - Mostrar Todas as Atividades + Mostrar Tudo Nenhuma atividade ainda Receba alguns bitcoins para começar Enviado diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cac54ff2f..2bfc91051 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -813,7 +813,7 @@ Удалено из мемпула Отправлено Отправлено себе - Показать Все + Показать все Статус Успешно Все diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 85c401fe5..00f732672 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -798,7 +798,7 @@ Removed from Mempool Sent Sent to myself - Show All Activity + Show All Status Successful All From 9dc135ca3d2bb71276187ba91bb0ce7e7e1ee5be Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 14:10:43 -0300 Subject: [PATCH 24/64] fix: TabBar height --- app/src/main/java/to/bitkit/ui/components/TabBar.kt | 6 ++++-- .../main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/TabBar.kt b/app/src/main/java/to/bitkit/ui/components/TabBar.kt index fd629f34e..3914a72b6 100644 --- a/app/src/main/java/to/bitkit/ui/components/TabBar.kt +++ b/app/src/main/java/to/bitkit/ui/components/TabBar.kt @@ -50,6 +50,8 @@ import to.bitkit.ui.theme.Colors private val iconToTextGap = 4.dp private val iconSize = 20.dp +const val TAB_BAR_HEIGHT = 56 + private val buttonLeftShape = RoundedCornerShape(topStartPercent = 50, bottomStartPercent = 50) private val buttonRightShape = RoundedCornerShape(topEndPercent = 50, bottomEndPercent = 50) @@ -81,7 +83,7 @@ fun BoxScope.TabBar( contentAlignment = Alignment.Center, modifier = Modifier .weight(1f) - .height(60.dp) + .height(TAB_BAR_HEIGHT.dp) .clip(buttonLeftShape) .clickable { onSendClick() } .testTag("Send") @@ -102,7 +104,7 @@ fun BoxScope.TabBar( contentAlignment = Alignment.Center, modifier = Modifier .weight(1f) - .height(60.dp) + .height(TAB_BAR_HEIGHT.dp) .clip(buttonRightShape) .clickable { onReceiveClick() } .testTag("Receive") diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index e6b14e118..ef8a1e6c5 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -86,6 +86,7 @@ import to.bitkit.ui.components.HorizontalSpacer import to.bitkit.ui.components.Sheet import to.bitkit.ui.components.StatusBarSpacer import to.bitkit.ui.components.SuggestionCard +import to.bitkit.ui.components.TAB_BAR_HEIGHT import to.bitkit.ui.components.TabBar import to.bitkit.ui.components.TertiaryButton import to.bitkit.ui.components.TopBarSpacer @@ -479,7 +480,7 @@ private fun WalletPage( } } - VerticalSpacer(116.dp + Insets.Bottom) + VerticalSpacer(TAB_BAR_HEIGHT.dp + 56.dp + Insets.Bottom) } } From ad0ab3e9ef33dfdf465cc08c565399cf68fe15ca Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 14:25:31 -0300 Subject: [PATCH 25/64] fix: TabBar bottom padding --- app/src/main/java/to/bitkit/ui/components/TabBar.kt | 3 ++- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/TabBar.kt b/app/src/main/java/to/bitkit/ui/components/TabBar.kt index 3914a72b6..4a305e789 100644 --- a/app/src/main/java/to/bitkit/ui/components/TabBar.kt +++ b/app/src/main/java/to/bitkit/ui/components/TabBar.kt @@ -51,6 +51,7 @@ private val iconToTextGap = 4.dp private val iconSize = 20.dp const val TAB_BAR_HEIGHT = 56 +const val TAB_BAR_PADDING_BOTTOM = 8 private val buttonLeftShape = RoundedCornerShape(topStartPercent = 50, bottomStartPercent = 50) private val buttonRightShape = RoundedCornerShape(topEndPercent = 50, bottomEndPercent = 50) @@ -69,7 +70,7 @@ fun BoxScope.TabBar( .align(Alignment.BottomCenter) .fillMaxWidth() .padding(horizontal = 16.dp) - .padding(bottom = 16.dp) + .padding(bottom = TAB_BAR_PADDING_BOTTOM.dp) .navigationBarsPadding() ) { Row( diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index ef8a1e6c5..1726cf649 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -87,6 +87,7 @@ import to.bitkit.ui.components.Sheet import to.bitkit.ui.components.StatusBarSpacer import to.bitkit.ui.components.SuggestionCard import to.bitkit.ui.components.TAB_BAR_HEIGHT +import to.bitkit.ui.components.TAB_BAR_PADDING_BOTTOM import to.bitkit.ui.components.TabBar import to.bitkit.ui.components.TertiaryButton import to.bitkit.ui.components.TopBarSpacer @@ -480,7 +481,7 @@ private fun WalletPage( } } - VerticalSpacer(TAB_BAR_HEIGHT.dp + 56.dp + Insets.Bottom) + VerticalSpacer(TAB_BAR_HEIGHT.dp + TAB_BAR_PADDING_BOTTOM.dp + 36.dp + Insets.Bottom) } } From 1d91ee074f39e3898e5e497b83dd4ed7150048c2 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 14:33:07 -0300 Subject: [PATCH 26/64] fix: remove empty state bottom padding --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 1726cf649..bfb904e3c 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -490,7 +490,6 @@ private fun WalletPage( text = stringResource(R.string.onboarding__empty_wallet).withAccent(), modifier = Modifier .align(Alignment.BottomCenter) - .padding(bottom = 24.dp) ) } } From 37180db037ce113d8e1fb59de9a5cc808d324a41 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 14:35:55 -0300 Subject: [PATCH 27/64] fix: support icon height --- app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index aa16f51ad..46a7bfe96 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -125,7 +126,9 @@ fun SuggestionCard( contentDescription = null, alignment = Alignment.CenterStart, contentScale = ContentScale.FillHeight, - modifier = Modifier.weight(1f) + modifier = Modifier + .defaultMinSize(minHeight = 96.dp) + .weight(1f) ) if (onClose != null) { From adf2779f48dc4f81950bb6f067a3fa55acb9801e Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 14:41:31 -0300 Subject: [PATCH 28/64] feat: update default widgets set --- app/src/main/java/to/bitkit/data/WidgetsStore.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/data/WidgetsStore.kt b/app/src/main/java/to/bitkit/data/WidgetsStore.kt index 13487b950..1f50c447c 100644 --- a/app/src/main/java/to/bitkit/data/WidgetsStore.kt +++ b/app/src/main/java/to/bitkit/data/WidgetsStore.kt @@ -160,9 +160,9 @@ class WidgetsStore @Inject constructor( @Serializable data class WidgetsData( val widgets: List = listOf( - WidgetWithPosition(type = WidgetType.PRICE, position = 0), - WidgetWithPosition(type = WidgetType.BLOCK, position = 1), - WidgetWithPosition(type = WidgetType.NEWS, position = 2), + WidgetWithPosition(type = WidgetType.SUGGESTIONS, position = 0), + WidgetWithPosition(type = WidgetType.PRICE, position = 1), + WidgetWithPosition(type = WidgetType.BLOCK, position = 2), ), val headlinePreferences: HeadlinePreferences = HeadlinePreferences(), val factsPreferences: FactsPreferences = FactsPreferences(), From 6b3b1440197f4620fc3fb97ce832cc0af0464f35 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 14:51:29 -0300 Subject: [PATCH 29/64] feat: icon edit widget --- .../bitkit/ui/screens/wallets/HomeScreen.kt | 4 ++-- app/src/main/res/drawable/ic_edit.xml | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_edit.xml diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index bfb904e3c..b118bb423 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -775,11 +775,11 @@ private fun TopBar( onClick = onClickEditWidgetList, modifier = Modifier.testTag("WidgetsEdit") ) { - Icon( + Image( painter = if (isEditingWidgets) { painterResource(R.drawable.ic_check) } else { - painterResource(R.drawable.ic_sort_ascending) + painterResource(R.drawable.ic_edit) }, contentDescription = null, ) diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 000000000..bd9ebb0c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,23 @@ + + + + + + From 37c4985e0646b07dd3aa6e344f69139732a3ba55 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 14:52:15 -0300 Subject: [PATCH 30/64] fix: drawer icon color --- .../main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index b118bb423..19891244c 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid @@ -79,9 +78,9 @@ import to.bitkit.ui.Routes import to.bitkit.ui.components.ActivityBanner import to.bitkit.ui.components.AppStatus import to.bitkit.ui.components.BalanceHeaderView -import to.bitkit.ui.components.Headline24 import to.bitkit.ui.components.EmptyStateView import to.bitkit.ui.components.FillHeight +import to.bitkit.ui.components.Headline24 import to.bitkit.ui.components.HorizontalSpacer import to.bitkit.ui.components.Sheet import to.bitkit.ui.components.StatusBarSpacer @@ -99,7 +98,6 @@ import to.bitkit.ui.navigateToAllActivity import to.bitkit.ui.navigateToTransferFunding import to.bitkit.ui.navigateToTransferIntro import to.bitkit.ui.scaffold.AppAlertDialog -import to.bitkit.ui.theme.Insets import to.bitkit.ui.screens.wallets.activity.components.ActivityListSimple import to.bitkit.ui.screens.wallets.activity.utils.previewActivityItems import to.bitkit.ui.screens.widgets.DragAndDropWidget @@ -116,6 +114,7 @@ import to.bitkit.ui.sheets.BackupRoute import to.bitkit.ui.sheets.PinRoute import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors +import to.bitkit.ui.theme.Insets import to.bitkit.ui.utils.withAccent import to.bitkit.viewmodels.ActivityListViewModel import to.bitkit.viewmodels.AppViewModel @@ -793,6 +792,7 @@ private fun TopBar( ) { Icon( painter = painterResource(R.drawable.ic_list), + tint = Colors.White, contentDescription = stringResource(R.string.settings__settings), ) } From bbed75983476d8f2ce78ab0539f8249d78f3ae97 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 15:07:58 -0300 Subject: [PATCH 31/64] fix: remove unnecessary spacer --- .../main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 19891244c..0949a1f0e 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -769,7 +769,7 @@ private fun TopBar( TopAppBar( title = {}, actions = { - if (showEditWidgets) { + AnimatedVisibility(showEditWidgets) { IconButton( onClick = onClickEditWidgetList, modifier = Modifier.testTag("WidgetsEdit") @@ -784,8 +784,9 @@ private fun TopBar( ) } } - AppStatus(onClick = { rootNavController.navigate(Routes.AppStatus) }) - HorizontalSpacer(4.dp) + AppStatus( + onClick = { rootNavController.navigate(Routes.AppStatus) }, + ) IconButton( onClick = { scope.launch { drawerState.open() } }, modifier = Modifier.testTag("HeaderMenu") From 8a97b12051fc6687cc4fa256b9f8f46392f256d8 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Mon, 23 Feb 2026 15:14:43 -0300 Subject: [PATCH 32/64] fix: icon color --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 0949a1f0e..ebfb2e42c 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -774,12 +774,13 @@ private fun TopBar( onClick = onClickEditWidgetList, modifier = Modifier.testTag("WidgetsEdit") ) { - Image( + Icon( painter = if (isEditingWidgets) { painterResource(R.drawable.ic_check) } else { painterResource(R.drawable.ic_edit) }, + tint = Colors.White, contentDescription = null, ) } From b963072505015c76a6b4f495f883d58a21e0d2d8 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 08:07:02 -0300 Subject: [PATCH 33/64] feat: display balances section on empty state --- .../bitkit/ui/screens/wallets/HomeScreen.kt | 64 +++++++++++-------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index ebfb2e42c..f2e1fb7a0 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -408,36 +408,10 @@ private fun WalletPage( .fillMaxWidth() .testTag("TotalBalance") ) + VerticalSpacer(32.dp) + BalancesSection(balances, walletNavController) if (!homeUiState.showEmptyState) { - VerticalSpacer(32.dp) - Row( - modifier = Modifier - .fillMaxWidth() - .height(IntrinsicSize.Min) - ) { - WalletBalanceView( - title = stringResource(R.string.wallet__savings__title), - sats = balances.totalOnchainSats.toLong(), - icon = painterResource(id = R.drawable.ic_btc_circle), - modifier = Modifier - .clickableAlpha { walletNavController.navigate(Routes.Savings) } - .padding(vertical = 4.dp) - .testTag("ActivitySavings") - ) - VerticalDivider() - HorizontalSpacer(16.dp) - WalletBalanceView( - title = stringResource(R.string.wallet__spending__title), - sats = balances.totalLightningSats.toLong(), - icon = painterResource(id = R.drawable.ic_ln_circle), - modifier = Modifier - .clickableAlpha { walletNavController.navigate(Routes.Spending) } - .padding(vertical = 4.dp) - .testTag("ActivitySpending") - ) - } - if (hasActivity) { AnimatedVisibility(homeUiState.banners.isNotEmpty()) { Column( @@ -494,6 +468,40 @@ private fun WalletPage( } } + +@Composable +fun BalancesSection( + balances: BalanceState, + walletNavController: NavController, +) { + Row( + modifier = Modifier + .fillMaxWidth() + .height(IntrinsicSize.Min) + ) { + WalletBalanceView( + title = stringResource(R.string.wallet__savings__title), + sats = balances.totalOnchainSats.toLong(), + icon = painterResource(id = R.drawable.ic_btc_circle), + modifier = Modifier + .clickableAlpha { walletNavController.navigate(Routes.Savings) } + .padding(vertical = 4.dp) + .testTag("ActivitySavings") + ) + VerticalDivider() + HorizontalSpacer(16.dp) + WalletBalanceView( + title = stringResource(R.string.wallet__spending__title), + sats = balances.totalLightningSats.toLong(), + icon = painterResource(id = R.drawable.ic_ln_circle), + modifier = Modifier + .clickableAlpha { walletNavController.navigate(Routes.Spending) } + .padding(vertical = 4.dp) + .testTag("ActivitySpending") + ) + } +} + @Suppress("MagicNumber") @Composable private fun WidgetsPage( From 29a12789ec4632da67765b96162112286a6d1813 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 08:14:49 -0300 Subject: [PATCH 34/64] feat: default widgets --- app/src/main/java/to/bitkit/data/WidgetsStore.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/to/bitkit/data/WidgetsStore.kt b/app/src/main/java/to/bitkit/data/WidgetsStore.kt index 1f50c447c..c4af38227 100644 --- a/app/src/main/java/to/bitkit/data/WidgetsStore.kt +++ b/app/src/main/java/to/bitkit/data/WidgetsStore.kt @@ -163,6 +163,7 @@ data class WidgetsData( WidgetWithPosition(type = WidgetType.SUGGESTIONS, position = 0), WidgetWithPosition(type = WidgetType.PRICE, position = 1), WidgetWithPosition(type = WidgetType.BLOCK, position = 2), + WidgetWithPosition(type = WidgetType.NEWS, position = 3), ), val headlinePreferences: HeadlinePreferences = HeadlinePreferences(), val factsPreferences: FactsPreferences = FactsPreferences(), From 8793e7073e1a04100f1d01722a27554576ef798c Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 08:30:07 -0300 Subject: [PATCH 35/64] fix: onboarding hint text and alightment --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 3 +-- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index f2e1fb7a0..c4207a826 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -617,7 +617,7 @@ private fun SuggestionsSection( @Composable private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { Row( - verticalAlignment = Alignment.Bottom, + verticalAlignment = Alignment.CenterVertically, modifier = modifier .fillMaxWidth() .padding(top = 32.dp) @@ -630,7 +630,6 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { Image( painter = painterResource(R.drawable.swipe_instruction), contentDescription = null, - modifier = Modifier.padding(bottom = 12.dp) ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 00f732672..7ca4d4b62 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1000,7 +1000,7 @@ Widget Source Widgets - Swipe down\nto find your\n<accent>widgets</accent> + Swipe to find\n<accent>your widgets</accent> Discover everything Bitkit has to offer. Bitkit Suggestions From 12784ed43b8a7cceb2a442e82be9bc529c5e3aff Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 08:37:27 -0300 Subject: [PATCH 36/64] chore: add immutable annotation --- app/src/main/java/to/bitkit/models/BalanceState.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/to/bitkit/models/BalanceState.kt b/app/src/main/java/to/bitkit/models/BalanceState.kt index 07cfc7a23..8664ceac4 100644 --- a/app/src/main/java/to/bitkit/models/BalanceState.kt +++ b/app/src/main/java/to/bitkit/models/BalanceState.kt @@ -1,7 +1,9 @@ package to.bitkit.models +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable +@Immutable @Serializable data class BalanceState( val totalOnchainSats: ULong = 0uL, From ee63974ca17f29b36efcc405fa7724fe6aa54ed0 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 08:37:40 -0300 Subject: [PATCH 37/64] chore: add stable annotation annotation --- .../main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt index 61530826f..84128d497 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeUiState.kt @@ -17,16 +17,16 @@ import to.bitkit.ui.screens.widgets.blocks.WeatherModel @Stable data class HomeUiState( - val suggestions: List = listOf(), - val banners: List = listOf(), + @Stable val suggestions: List = listOf(), + @Stable val banners: List = listOf(), val showWidgets: Boolean = false, val showWidgetTitles: Boolean = false, - val widgetsWithPosition: List = emptyList(), + @Stable val widgetsWithPosition: List = emptyList(), val headlinePreferences: HeadlinePreferences = HeadlinePreferences(), val currentArticle: ArticleModel? = null, val currentFact: String? = null, val factsPreferences: FactsPreferences = FactsPreferences(), - val facts: List = listOf(), + @Stable val facts: List = listOf(), val blocksPreferences: BlocksPreferences = BlocksPreferences(), val currentBlock: BlockModel? = null, val weatherPreferences: WeatherPreferences = WeatherPreferences(), From bade5581b286871bfe4a35a1a6e9e7c50e3ae656 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 08:50:00 -0300 Subject: [PATCH 38/64] refactor: remove navController from inner composables to improve stability --- .../bitkit/ui/screens/wallets/HomeScreen.kt | 70 ++++++++++--------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index c4207a826..1861b31ad 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -58,14 +58,12 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import androidx.navigation.NavHostController -import androidx.navigation.compose.rememberNavController import com.synonym.bitkitcore.Activity import dev.chrisbanes.haze.HazeState import dev.chrisbanes.haze.hazeEffect import dev.chrisbanes.haze.hazeSource import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi import dev.chrisbanes.haze.rememberHazeState -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import to.bitkit.R import to.bitkit.env.Env @@ -166,8 +164,6 @@ fun HomeScreen( Content( isRefreshing = isRefreshing, homeUiState = homeUiState, - rootNavController = rootNavController, - walletNavController = walletNavController, drawerState = drawerState, latestActivities = latestActivities, onRefresh = { @@ -270,6 +266,12 @@ fun HomeScreen( }, onPageChanged = homeViewModel::onPageChanged, onDismissWidgetsOnboardingHint = homeViewModel::dismissWidgetsOnboardingHint, + onNavigateToAppStatus = { rootNavController.navigate(Routes.AppStatus) }, + onNavigateToSettingUp = { rootNavController.navigate(Routes.SettingUp) }, + onNavigateToAllActivity = { rootNavController.navigateToAllActivity() }, + onNavigateToActivityItem = { rootNavController.navigateToActivityItem(it) }, + onNavigateToSavings = { walletNavController.navigate(Routes.Savings) }, + onNavigateToSpending = { walletNavController.navigate(Routes.Spending) }, ) } @@ -279,10 +281,7 @@ fun HomeScreen( private fun Content( isRefreshing: Boolean, homeUiState: HomeUiState, - rootNavController: NavController, - walletNavController: NavController, drawerState: DrawerState, - hazeState: HazeState = rememberHazeState(), latestActivities: List?, onRefresh: () -> Unit = {}, onRemoveSuggestion: (Suggestion) -> Unit = {}, @@ -294,6 +293,13 @@ private fun Content( onMoveWidget: (Int, Int) -> Unit = { _, _ -> }, onPageChanged: (Int) -> Unit = {}, onDismissWidgetsOnboardingHint: () -> Unit = {}, + onNavigateToAppStatus: () -> Unit = {}, + onNavigateToSettingUp: () -> Unit = {}, + onNavigateToAllActivity: () -> Unit = {}, + onNavigateToActivityItem: (String) -> Unit = {}, + onNavigateToSavings: () -> Unit = {}, + onNavigateToSpending: () -> Unit = {}, + hazeState: HazeState = rememberHazeState(), balances: BalanceState = LocalBalances.current, ) { val scope = rememberCoroutineScope() @@ -317,12 +323,11 @@ private fun Content( Box { TopBar( hazeState = hazeState, - rootNavController = rootNavController, - scope = scope, - drawerState = drawerState, showEditWidgets = homeUiState.currentPage == 1 && homeUiState.showWidgets, isEditingWidgets = homeUiState.isEditingWidgets, onClickEditWidgetList = onClickEditWidgetList, + onNavigateToAppStatus = onNavigateToAppStatus, + onOpenDrawer = { scope.launch { drawerState.open() } }, ) VerticalPager( @@ -339,9 +344,12 @@ private fun Content( homeUiState = homeUiState, latestActivities = latestActivities?.take(activityCount), balances = balances, - rootNavController = rootNavController, - walletNavController = walletNavController, onRefresh = onRefresh, + onNavigateToSettingUp = onNavigateToSettingUp, + onNavigateToAllActivity = onNavigateToAllActivity, + onNavigateToActivityItem = onNavigateToActivityItem, + onNavigateToSavings = onNavigateToSavings, + onNavigateToSpending = onNavigateToSpending, ) 1 -> WidgetsPage( @@ -366,9 +374,12 @@ private fun WalletPage( homeUiState: HomeUiState, latestActivities: List?, balances: BalanceState, - rootNavController: NavController, - walletNavController: NavController, onRefresh: () -> Unit, + onNavigateToSettingUp: () -> Unit, + onNavigateToAllActivity: () -> Unit, + onNavigateToActivityItem: (String) -> Unit, + onNavigateToSavings: () -> Unit, + onNavigateToSpending: () -> Unit, ) { val heightStatusBar = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() val pullToRefreshState = rememberPullToRefreshState() @@ -409,7 +420,7 @@ private fun WalletPage( .testTag("TotalBalance") ) VerticalSpacer(32.dp) - BalancesSection(balances, walletNavController) + BalancesSection(balances, onNavigateToSavings, onNavigateToSpending) if (!homeUiState.showEmptyState) { if (hasActivity) { @@ -427,9 +438,7 @@ private fun WalletPage( icon = banner.icon, onClick = { when (banner) { - ActivityBannerType.SPENDING -> - rootNavController.navigate(Routes.SettingUp) - + ActivityBannerType.SPENDING -> onNavigateToSettingUp() ActivityBannerType.SAVINGS -> Unit } }, @@ -443,8 +452,8 @@ private fun WalletPage( ActivityListSimple( items = latestActivities, - onAllActivityClick = { rootNavController.navigateToAllActivity() }, - onActivityItemClick = { rootNavController.navigateToActivityItem(it) }, + onAllActivityClick = onNavigateToAllActivity, + onActivityItemClick = onNavigateToActivityItem, ) FillHeight() @@ -468,11 +477,11 @@ private fun WalletPage( } } - @Composable fun BalancesSection( balances: BalanceState, - walletNavController: NavController, + onNavigateToSavings: () -> Unit, + onNavigateToSpending: () -> Unit, ) { Row( modifier = Modifier @@ -484,7 +493,7 @@ fun BalancesSection( sats = balances.totalOnchainSats.toLong(), icon = painterResource(id = R.drawable.ic_btc_circle), modifier = Modifier - .clickableAlpha { walletNavController.navigate(Routes.Savings) } + .clickableAlpha(onClick = onNavigateToSavings) .padding(vertical = 4.dp) .testTag("ActivitySavings") ) @@ -495,7 +504,7 @@ fun BalancesSection( sats = balances.totalLightningSats.toLong(), icon = painterResource(id = R.drawable.ic_ln_circle), modifier = Modifier - .clickableAlpha { walletNavController.navigate(Routes.Spending) } + .clickableAlpha(onClick = onNavigateToSpending) .padding(vertical = 4.dp) .testTag("ActivitySpending") ) @@ -750,12 +759,11 @@ private fun Widgets( @OptIn(ExperimentalMaterial3Api::class) private fun TopBar( hazeState: HazeState, - rootNavController: NavController, - scope: CoroutineScope, - drawerState: DrawerState, showEditWidgets: Boolean = false, isEditingWidgets: Boolean = false, onClickEditWidgetList: () -> Unit = {}, + onNavigateToAppStatus: () -> Unit = {}, + onOpenDrawer: () -> Unit = {}, ) { val topbarGradient = Brush.verticalGradient( colorStops = arrayOf( @@ -793,10 +801,10 @@ private fun TopBar( } } AppStatus( - onClick = { rootNavController.navigate(Routes.AppStatus) }, + onClick = onNavigateToAppStatus, ) IconButton( - onClick = { scope.launch { drawerState.open() } }, + onClick = onOpenDrawer, modifier = Modifier.testTag("HeaderMenu") ) { Icon( @@ -840,8 +848,6 @@ private fun Preview() { homeUiState = HomeUiState( showWidgets = true, ), - rootNavController = rememberNavController(), - walletNavController = rememberNavController(), drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), latestActivities = previewActivityItems.take(3), balances = BalanceState( @@ -864,8 +870,6 @@ private fun PreviewEmpty() { homeUiState = HomeUiState( showEmptyState = true, ), - rootNavController = rememberNavController(), - walletNavController = rememberNavController(), drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), latestActivities = previewActivityItems.take(3), balances = BalanceState() From 5e3ff4b0072779e3d8d23f787566bf1f54e75a5d Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 08:51:20 -0300 Subject: [PATCH 39/64] chore: add immutability annotation --- app/src/main/java/to/bitkit/data/dto/price/PriceDTO.kt | 4 +++- app/src/main/java/to/bitkit/models/WidgetWithPosition.kt | 2 ++ app/src/main/java/to/bitkit/models/widget/ArticleModel.kt | 2 ++ app/src/main/java/to/bitkit/models/widget/BlockModel.kt | 2 ++ .../main/java/to/bitkit/models/widget/BlocksPreferences.kt | 2 ++ app/src/main/java/to/bitkit/models/widget/FactsPreferences.kt | 2 ++ .../main/java/to/bitkit/models/widget/HeadlinePreferences.kt | 2 ++ app/src/main/java/to/bitkit/models/widget/PricePreferences.kt | 4 +++- .../main/java/to/bitkit/models/widget/WeatherPreferences.kt | 2 ++ .../java/to/bitkit/ui/screens/widgets/blocks/WeatherModel.kt | 2 ++ 10 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/to/bitkit/data/dto/price/PriceDTO.kt b/app/src/main/java/to/bitkit/data/dto/price/PriceDTO.kt index 0d1ba1c88..22243cf7b 100644 --- a/app/src/main/java/to/bitkit/data/dto/price/PriceDTO.kt +++ b/app/src/main/java/to/bitkit/data/dto/price/PriceDTO.kt @@ -1,9 +1,11 @@ package to.bitkit.data.dto.price +import androidx.compose.runtime.Stable import kotlinx.serialization.Serializable +@Stable @Serializable data class PriceDTO( - val widgets: List, + @Stable val widgets: List, val source: String ) diff --git a/app/src/main/java/to/bitkit/models/WidgetWithPosition.kt b/app/src/main/java/to/bitkit/models/WidgetWithPosition.kt index b1ed0f51d..bb433bf17 100644 --- a/app/src/main/java/to/bitkit/models/WidgetWithPosition.kt +++ b/app/src/main/java/to/bitkit/models/WidgetWithPosition.kt @@ -1,7 +1,9 @@ package to.bitkit.models +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable +@Immutable @Serializable data class WidgetWithPosition( val type: WidgetType, diff --git a/app/src/main/java/to/bitkit/models/widget/ArticleModel.kt b/app/src/main/java/to/bitkit/models/widget/ArticleModel.kt index 66494e0f2..a96e26949 100644 --- a/app/src/main/java/to/bitkit/models/widget/ArticleModel.kt +++ b/app/src/main/java/to/bitkit/models/widget/ArticleModel.kt @@ -1,5 +1,6 @@ package to.bitkit.models.widget +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable import to.bitkit.data.dto.ArticleDTO import to.bitkit.ext.toRelativeTimeString @@ -12,6 +13,7 @@ import kotlin.time.ExperimentalTime private const val TAG = "ArticleModel" +@Immutable @Serializable data class ArticleModel( val title: String, diff --git a/app/src/main/java/to/bitkit/models/widget/BlockModel.kt b/app/src/main/java/to/bitkit/models/widget/BlockModel.kt index c5bba37c6..5d260a9d1 100644 --- a/app/src/main/java/to/bitkit/models/widget/BlockModel.kt +++ b/app/src/main/java/to/bitkit/models/widget/BlockModel.kt @@ -1,10 +1,12 @@ package to.bitkit.models.widget +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable import to.bitkit.data.dto.BlockDTO import to.bitkit.ext.toDateUTC import to.bitkit.ext.toTimeUTC +@Immutable @Serializable data class BlockModel( val height: String, diff --git a/app/src/main/java/to/bitkit/models/widget/BlocksPreferences.kt b/app/src/main/java/to/bitkit/models/widget/BlocksPreferences.kt index 34afde4d5..2ae2d943e 100644 --- a/app/src/main/java/to/bitkit/models/widget/BlocksPreferences.kt +++ b/app/src/main/java/to/bitkit/models/widget/BlocksPreferences.kt @@ -1,7 +1,9 @@ package to.bitkit.models.widget +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable +@Immutable @Serializable data class BlocksPreferences( val showBlock: Boolean = true, diff --git a/app/src/main/java/to/bitkit/models/widget/FactsPreferences.kt b/app/src/main/java/to/bitkit/models/widget/FactsPreferences.kt index 53182d31b..68adcf703 100644 --- a/app/src/main/java/to/bitkit/models/widget/FactsPreferences.kt +++ b/app/src/main/java/to/bitkit/models/widget/FactsPreferences.kt @@ -1,7 +1,9 @@ package to.bitkit.models.widget +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable +@Immutable @Serializable data class FactsPreferences( val showSource: Boolean = false diff --git a/app/src/main/java/to/bitkit/models/widget/HeadlinePreferences.kt b/app/src/main/java/to/bitkit/models/widget/HeadlinePreferences.kt index 03eded621..93723103b 100644 --- a/app/src/main/java/to/bitkit/models/widget/HeadlinePreferences.kt +++ b/app/src/main/java/to/bitkit/models/widget/HeadlinePreferences.kt @@ -1,7 +1,9 @@ package to.bitkit.models.widget +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable +@Immutable @Serializable data class HeadlinePreferences( val showTime: Boolean = true, diff --git a/app/src/main/java/to/bitkit/models/widget/PricePreferences.kt b/app/src/main/java/to/bitkit/models/widget/PricePreferences.kt index ae3f468ab..49d5fd013 100644 --- a/app/src/main/java/to/bitkit/models/widget/PricePreferences.kt +++ b/app/src/main/java/to/bitkit/models/widget/PricePreferences.kt @@ -1,12 +1,14 @@ package to.bitkit.models.widget +import androidx.compose.runtime.Stable import kotlinx.serialization.Serializable import to.bitkit.data.dto.price.GraphPeriod import to.bitkit.data.dto.price.TradingPair +@Stable @Serializable data class PricePreferences( - val enabledPairs: List = listOf( + @Stable val enabledPairs: List = listOf( TradingPair.BTC_USD ), val period: GraphPeriod? = GraphPeriod.ONE_DAY, diff --git a/app/src/main/java/to/bitkit/models/widget/WeatherPreferences.kt b/app/src/main/java/to/bitkit/models/widget/WeatherPreferences.kt index 4010cdf01..1151c37a6 100644 --- a/app/src/main/java/to/bitkit/models/widget/WeatherPreferences.kt +++ b/app/src/main/java/to/bitkit/models/widget/WeatherPreferences.kt @@ -1,7 +1,9 @@ package to.bitkit.models.widget +import androidx.compose.runtime.Immutable import kotlinx.serialization.Serializable +@Immutable @Serializable data class WeatherPreferences( val showTitle: Boolean = true, diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/WeatherModel.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/WeatherModel.kt index a6ddbd03d..e3ba8293a 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/WeatherModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/WeatherModel.kt @@ -1,10 +1,12 @@ package to.bitkit.ui.screens.widgets.blocks import androidx.annotation.StringRes +import androidx.compose.runtime.Immutable import to.bitkit.R import to.bitkit.data.dto.FeeCondition import to.bitkit.data.dto.WeatherDTO +@Immutable data class WeatherModel( @StringRes val title: Int, @StringRes val description: Int, From 40bea4caa5fe2268f6b436c71c076d2e17804d13 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 09:12:26 -0300 Subject: [PATCH 40/64] chore: add more preview cases --- .../bitkit/ui/screens/wallets/HomeScreen.kt | 163 +++++++++++++++++- 1 file changed, 155 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 1861b31ad..e3390e2e1 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -66,11 +66,19 @@ import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi import dev.chrisbanes.haze.rememberHazeState import kotlinx.coroutines.launch import to.bitkit.R +import to.bitkit.data.dto.price.Change +import to.bitkit.data.dto.price.GraphPeriod +import to.bitkit.data.dto.price.PriceDTO +import to.bitkit.data.dto.price.PriceWidgetData +import to.bitkit.data.dto.price.TradingPair import to.bitkit.env.Env import to.bitkit.models.ActivityBannerType import to.bitkit.models.BalanceState import to.bitkit.models.Suggestion import to.bitkit.models.WidgetType +import to.bitkit.models.WidgetWithPosition +import to.bitkit.models.widget.ArticleModel +import to.bitkit.models.widget.BlockModel import to.bitkit.ui.LocalBalances import to.bitkit.ui.Routes import to.bitkit.ui.components.ActivityBanner @@ -101,6 +109,7 @@ import to.bitkit.ui.screens.wallets.activity.utils.previewActivityItems import to.bitkit.ui.screens.widgets.DragAndDropWidget import to.bitkit.ui.screens.widgets.DragDropColumn import to.bitkit.ui.screens.widgets.blocks.BlockCard +import to.bitkit.ui.screens.widgets.blocks.WeatherModel import to.bitkit.ui.screens.widgets.calculator.components.CalculatorCard import to.bitkit.ui.screens.widgets.facts.FactsCard import to.bitkit.ui.screens.widgets.headlines.HeadlineCard @@ -838,9 +847,58 @@ private fun DeleteWidgetAlert( ) } -@Preview(showSystemUi = true) +private val previewBalances = BalanceState( + totalOnchainSats = 165_000u, + totalLightningSats = 45_000u, +) + +private val previewWidgets = listOf( + WidgetWithPosition(type = WidgetType.BLOCK, position = 0), + WidgetWithPosition(type = WidgetType.NEWS, position = 1), + WidgetWithPosition(type = WidgetType.PRICE, position = 2), + WidgetWithPosition(type = WidgetType.WEATHER, position = 3), +) + +private val previewBlock = BlockModel( + height = "761,405", + time = "01:31:42 UTC", + date = "01/2/2022", + transactionCount = "2,175", + size = "1,606kB", + source = "mempool.io", +) + +private val previewArticle = ArticleModel( + timeAgo = "21 minutes ago", + title = "How Bitcoin changed El Salvador in more ways", + publisher = "bitcoinmagazine.com", + link = "bitcoinmagazine.com", +) + +private val previewPrice = PriceDTO( + source = "Bitfinex.com", + widgets = listOf( + PriceWidgetData( + pair = TradingPair.BTC_USD, + change = Change(isPositive = true, formatted = "$ 20,326"), + price = "$20,326", + pastValues = listOf(1.0, 2.0, 3.0, 4.0), + period = GraphPeriod.ONE_DAY, + ), + ), +) + +private val previewWeather = WeatherModel( + title = R.string.widgets__weather__condition__good__title, + description = R.string.widgets__weather__condition__good__description, + currentFee = "15 sat/vB", + nextBlockFee = "12 sat/vB", + icon = "\u2600\uFE0F", +) + +@Preview(name = "With Activity", showSystemUi = true) @Composable -private fun Preview() { +private fun PreviewWithActivity() { AppThemeSurface { Box { Content( @@ -850,17 +908,14 @@ private fun Preview() { ), drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), latestActivities = previewActivityItems.take(3), - balances = BalanceState( - totalOnchainSats = 165_000u, - totalLightningSats = 45_000u, - ), + balances = previewBalances, ) TabBar() } } } -@Preview(showSystemUi = true) +@Preview(name = "Empty", showSystemUi = true) @Composable private fun PreviewEmpty() { AppThemeSurface { @@ -872,7 +927,99 @@ private fun PreviewEmpty() { ), drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), latestActivities = previewActivityItems.take(3), - balances = BalanceState() + balances = BalanceState(), + ) + TabBar() + } + } +} + +@Preview(name = "With Banners", showSystemUi = true) +@Composable +private fun PreviewWithBanners() { + AppThemeSurface { + Box { + Content( + isRefreshing = false, + homeUiState = HomeUiState( + showWidgets = true, + banners = ActivityBannerType.entries, + ), + drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), + latestActivities = previewActivityItems.take(3), + balances = previewBalances, + ) + TabBar() + } + } +} + +@Preview(name = "Onboarding Hint", showSystemUi = true) +@Composable +private fun PreviewWithOnboardingHint() { + AppThemeSurface { + Box { + Content( + isRefreshing = false, + homeUiState = HomeUiState( + showWidgets = true, + showWidgetsOnboardingHint = true, + ), + drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), + latestActivities = previewActivityItems.take(3), + balances = previewBalances, + ) + TabBar() + } + } +} + +@Preview(name = "Widgets Page", showSystemUi = true) +@Composable +private fun PreviewWidgetsPage() { + AppThemeSurface { + Box { + Content( + isRefreshing = false, + homeUiState = HomeUiState( + showWidgets = true, + currentPage = 1, + widgetsWithPosition = previewWidgets, + currentBlock = previewBlock, + currentArticle = previewArticle, + currentPrice = previewPrice, + currentWeather = previewWeather, + suggestions = Suggestion.entries.take(4), + ), + drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), + latestActivities = previewActivityItems.take(3), + balances = previewBalances, + ) + TabBar() + } + } +} + +@Preview(name = "Widgets Editing", showSystemUi = true) +@Composable +private fun PreviewWidgetsEditing() { + AppThemeSurface { + Box { + Content( + isRefreshing = false, + homeUiState = HomeUiState( + showWidgets = true, + currentPage = 1, + isEditingWidgets = true, + widgetsWithPosition = previewWidgets, + currentBlock = previewBlock, + currentArticle = previewArticle, + currentPrice = previewPrice, + currentWeather = previewWeather, + ), + drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), + latestActivities = previewActivityItems.take(3), + balances = previewBalances, ) TabBar() } From 86f3368bc166f7c3d0b8d83336e1be2e63182b0c Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 09:24:41 -0300 Subject: [PATCH 41/64] fix: initial page state --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index e3390e2e1..6f69a34f1 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -313,7 +313,10 @@ private fun Content( ) { val scope = rememberCoroutineScope() val pageCount = if (homeUiState.showWidgets) 2 else 1 - val pagerState = rememberPagerState(pageCount = { pageCount }) + val pagerState = rememberPagerState( + initialPage = homeUiState.currentPage, + pageCount = { pageCount }, + ) LaunchedEffect(pagerState.currentPage) { onPageChanged(pagerState.currentPage) From 4044a1eb9c050e295bb65d901b09a2efbe999987 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 09:28:17 -0300 Subject: [PATCH 42/64] chore: match preview with default widgets --- .../main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 6f69a34f1..4bd8cca0b 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -856,10 +856,10 @@ private val previewBalances = BalanceState( ) private val previewWidgets = listOf( - WidgetWithPosition(type = WidgetType.BLOCK, position = 0), - WidgetWithPosition(type = WidgetType.NEWS, position = 1), - WidgetWithPosition(type = WidgetType.PRICE, position = 2), - WidgetWithPosition(type = WidgetType.WEATHER, position = 3), + WidgetWithPosition(type = WidgetType.SUGGESTIONS, position = 0), + WidgetWithPosition(type = WidgetType.PRICE, position = 1), + WidgetWithPosition(type = WidgetType.BLOCK, position = 2), + WidgetWithPosition(type = WidgetType.NEWS, position = 3), ) private val previewBlock = BlockModel( From cb1107cc998fb49a6898a799cce274f6538d7a0b Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 09:50:51 -0300 Subject: [PATCH 43/64] fix: match home screen paddings to ios --- .../main/java/to/bitkit/ui/components/BalanceHeaderView.kt | 2 +- app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt | 4 ++-- .../main/java/to/bitkit/ui/components/WalletBalanceView.kt | 2 +- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 5 ++--- .../ui/screens/wallets/activity/components/ActivityRow.kt | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt b/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt index fe8505b24..37a6c68f1 100644 --- a/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt +++ b/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt @@ -146,7 +146,7 @@ fun BalanceHeader( modifier = smallRowModifier, ) - VerticalSpacer(12.dp) + VerticalSpacer(16.dp) Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index 46a7bfe96..347ac2b64 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -113,7 +113,7 @@ fun SuggestionCard( Column( modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp, vertical = 12.dp), + .padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { Row( @@ -127,7 +127,7 @@ fun SuggestionCard( alignment = Alignment.CenterStart, contentScale = ContentScale.FillHeight, modifier = Modifier - .defaultMinSize(minHeight = 96.dp) + .defaultMinSize(minHeight = 80.dp) .weight(1f) ) diff --git a/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt b/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt index f303de52d..a7caea83c 100644 --- a/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt +++ b/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt @@ -106,7 +106,7 @@ private fun RowScope.Content( text = title, color = Colors.White64, ) - Spacer(modifier = Modifier.height(8.dp)) + VerticalSpacer(4.dp) converted?.let { converted -> Row( diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 4bd8cca0b..00090896d 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -441,7 +441,7 @@ private fun WalletPage( verticalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier .fillMaxWidth() - .padding(top = 32.dp, bottom = 18.dp) + .padding(top = 32.dp, bottom = 16.dp) ) { homeUiState.banners.forEach { banner -> ActivityBanner( @@ -570,7 +570,7 @@ private fun WidgetsPage( ) } - VerticalSpacer(32.dp) + VerticalSpacer(16.dp) TertiaryButton( text = stringResource(R.string.widgets__add), @@ -647,7 +647,6 @@ private fun WidgetsOnboardingHint(modifier: Modifier = Modifier) { text = stringResource(R.string.widgets__onboarding_swipe).withAccent(), modifier = Modifier.weight(1f) ) - HorizontalSpacer(16.dp) Image( painter = painterResource(R.drawable.swipe_instruction), contentDescription = null, diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt index b711b4141..6d7e4e028 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt @@ -111,7 +111,7 @@ fun ActivityRow( ActivityIcon(activity = item, size = 40.dp, isCpfpChild = isCpfpChild) Spacer(modifier = Modifier.width(16.dp)) Column( - verticalArrangement = Arrangement.spacedBy(4.dp), + verticalArrangement = Arrangement.spacedBy(2.dp), modifier = Modifier.weight(1f) ) { TransactionStatusText( From 7535f59054962101bf30d7efff099d94d3ccb50a Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 09:53:09 -0300 Subject: [PATCH 44/64] fix: roolback balance header space --- app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt b/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt index 37a6c68f1..fe8505b24 100644 --- a/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt +++ b/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt @@ -146,7 +146,7 @@ fun BalanceHeader( modifier = smallRowModifier, ) - VerticalSpacer(16.dp) + VerticalSpacer(12.dp) Row( verticalAlignment = Alignment.CenterVertically, From 789344e141f41832eb93fcd547794c97f9283383 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 13:48:57 -0300 Subject: [PATCH 45/64] fix: rollback space --- app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt b/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt index a7caea83c..1183609ef 100644 --- a/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt +++ b/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt @@ -106,7 +106,7 @@ private fun RowScope.Content( text = title, color = Colors.White64, ) - VerticalSpacer(4.dp) + VerticalSpacer(8.dp) converted?.let { converted -> Row( From 08d51053e5b3f5079e753f3aa37c89fb7a8240b5 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 13:59:57 -0300 Subject: [PATCH 46/64] fix: divider color --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 00090896d..9633d37b9 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -509,7 +509,7 @@ fun BalancesSection( .padding(vertical = 4.dp) .testTag("ActivitySavings") ) - VerticalDivider() + VerticalDivider(color = Colors.Gray4) HorizontalSpacer(16.dp) WalletBalanceView( title = stringResource(R.string.wallet__spending__title), From 7691b95eced79d2c140ee0ef19be6309798759e9 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 14:13:11 -0300 Subject: [PATCH 47/64] fix: match letter spacing with ios --- app/src/main/java/to/bitkit/ui/theme/Type.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/theme/Type.kt b/app/src/main/java/to/bitkit/ui/theme/Type.kt index a2392145b..73cde025f 100644 --- a/app/src/main/java/to/bitkit/ui/theme/Type.kt +++ b/app/src/main/java/to/bitkit/ui/theme/Type.kt @@ -123,7 +123,7 @@ object AppTextStyles { fontWeight = FontWeight.Medium, fontSize = 13.sp, lineHeight = 18.sp, - letterSpacing = 0.4.sp, + letterSpacing = 0.8.sp, fontFamily = InterFontFamily, ) val CaptionB = TextStyle( From 5889531301c6584c6b3ceb7e0c7d20922fa57bb1 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 14:29:55 -0300 Subject: [PATCH 48/64] fix: prefix font weight --- .../main/java/to/bitkit/ui/components/BalanceHeaderView.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt b/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt index fe8505b24..e67ae0768 100644 --- a/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt +++ b/app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import to.bitkit.R @@ -203,6 +204,7 @@ fun LargeRow( if (!hideBalance && prefix != null) { Display( text = prefix, + fontWeight = FontWeight.ExtraBold, color = Colors.White64, modifier = Modifier .padding(end = 8.dp) @@ -212,6 +214,7 @@ fun LargeRow( if (showSymbol && !isSymbolSuffix) { Display( text = symbol, + fontWeight = FontWeight.ExtraBold, color = Colors.White64, modifier = Modifier .padding(end = 8.dp) @@ -231,6 +234,7 @@ fun LargeRow( if (showSymbol && isSymbolSuffix) { Display( text = symbol, + fontWeight = FontWeight.ExtraBold, color = Colors.White64, modifier = Modifier .padding(start = 8.dp) From 65b1ade7a1b5e6c25008ef1a00d38000e93189ee Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 14:48:31 -0300 Subject: [PATCH 49/64] fix: skip last spacer --- .../wallets/activity/components/ActivityListSimple.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt index bb5c9d4ab..0674198e7 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt @@ -31,13 +31,16 @@ fun ActivityListSimple( ) { items.forEachIndexed { index, item -> ActivityRow(item, onActivityItemClick, testTag = "ActivityShort-$index") - VerticalSpacer(16.dp) + if (index < items.lastIndex) { + VerticalSpacer(16.dp) + } } TertiaryButton( text = stringResource(R.string.wallet__activity_show_all), onClick = onAllActivityClick, modifier = Modifier .wrapContentWidth() + .padding(top = 2.dp) .testTag("ActivityShowAll") ) } From 1d49b6eb176aabb542a062362cdcb6d4227f33f8 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Wed, 4 Mar 2026 14:55:53 -0300 Subject: [PATCH 50/64] fix: reimport icons with padding --- app/src/main/res/drawable/ic_received.xml | 22 ++++++++-------- app/src/main/res/drawable/ic_sent.xml | 22 ++++++++-------- app/src/main/res/drawable/ic_timer_alt.xml | 30 +++++++++++++++++++--- app/src/main/res/drawable/ic_transfer.xml | 24 ++++++++--------- 4 files changed, 62 insertions(+), 36 deletions(-) diff --git a/app/src/main/res/drawable/ic_received.xml b/app/src/main/res/drawable/ic_received.xml index ed6a12788..b9a852e1d 100644 --- a/app/src/main/res/drawable/ic_received.xml +++ b/app/src/main/res/drawable/ic_received.xml @@ -1,12 +1,14 @@ - - - + android:width="20dp" + android:height="20dp" + android:viewportWidth="20" + android:viewportHeight="20"> + + diff --git a/app/src/main/res/drawable/ic_sent.xml b/app/src/main/res/drawable/ic_sent.xml index 45152a55d..02b516e20 100644 --- a/app/src/main/res/drawable/ic_sent.xml +++ b/app/src/main/res/drawable/ic_sent.xml @@ -1,12 +1,14 @@ - - - + android:width="20dp" + android:height="20dp" + android:viewportWidth="20" + android:viewportHeight="20"> + + diff --git a/app/src/main/res/drawable/ic_timer_alt.xml b/app/src/main/res/drawable/ic_timer_alt.xml index fd04ab152..b740006e1 100644 --- a/app/src/main/res/drawable/ic_timer_alt.xml +++ b/app/src/main/res/drawable/ic_timer_alt.xml @@ -1,5 +1,27 @@ - - - - + + + + + + diff --git a/app/src/main/res/drawable/ic_transfer.xml b/app/src/main/res/drawable/ic_transfer.xml index c2b09d853..2ebdadfdc 100644 --- a/app/src/main/res/drawable/ic_transfer.xml +++ b/app/src/main/res/drawable/ic_transfer.xml @@ -1,22 +1,22 @@ + android:width="16dp" + android:height="16dp" + android:viewportWidth="16" + android:viewportHeight="16"> From c54654ba44850b0a6a1558e347f78fc9db49611d Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 07:00:18 -0300 Subject: [PATCH 51/64] fix: suggestions order --- .../ui/screens/wallets/HomeViewModel.kt | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index f28a3e764..c736e5a93 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -253,32 +253,29 @@ class HomeViewModel @Inject constructor( transferRepo.activeTransfers, ) { balanceState, settings, transfers -> val baseSuggestions = when { - balanceState.totalLightningSats > 0uL -> { // With Lightning + balanceState.totalLightningSats > 0uL -> { // With Lightning (spending) listOfNotNull( - Suggestion.BACK_UP.takeIf { !settings.backupVerified }, - Suggestion.SECURE.takeIf { !settings.isPinEnabled }, - Suggestion.BUY, - Suggestion.SUPPORT, - Suggestion.INVITE, - Suggestion.QUICK_PAY, + Suggestion.QUICK_PAY.takeIf { !settings.isQuickPayEnabled }, Suggestion.NOTIFICATIONS.takeIf { !settings.notificationsGranted }, Suggestion.SHOP, Suggestion.PROFILE, + Suggestion.SUPPORT, + Suggestion.INVITE, + Suggestion.BUY, ) } balanceState.totalOnchainSats > 0uL -> { // Only on chain balance listOfNotNull( Suggestion.BACK_UP.takeIf { !settings.backupVerified }, + Suggestion.SECURE.takeIf { !settings.isPinEnabled }, Suggestion.LIGHTNING.takeIf { transfers.all { it.type != TransferType.TO_SPENDING } }, - Suggestion.SECURE.takeIf { !settings.isPinEnabled }, - Suggestion.BUY, Suggestion.SUPPORT, - Suggestion.INVITE, - Suggestion.SHOP, Suggestion.PROFILE, + Suggestion.INVITE, + Suggestion.BUY, ) } @@ -288,11 +285,11 @@ class HomeViewModel @Inject constructor( Suggestion.LIGHTNING.takeIf { transfers.all { it.type != TransferType.TO_SPENDING } }, + Suggestion.SUPPORT, Suggestion.BACK_UP.takeIf { !settings.backupVerified }, Suggestion.SECURE.takeIf { !settings.isPinEnabled }, - Suggestion.SUPPORT, - Suggestion.INVITE, Suggestion.PROFILE, + Suggestion.INVITE, ) } } From 9d3e1491180231bcfa4e10b7d10e92ae233130dd Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 07:12:27 -0300 Subject: [PATCH 52/64] fix: suggestion title padding --- app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index 347ac2b64..f56ff06e7 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -114,7 +114,6 @@ fun SuggestionCard( modifier = Modifier .fillMaxWidth() .padding(16.dp), - verticalArrangement = Arrangement.spacedBy(8.dp) ) { Row( modifier = Modifier @@ -150,6 +149,7 @@ fun SuggestionCard( Headline20( text = AnnotatedString(title), color = Colors.White, + modifier = Modifier.padding(top = 4.dp), ) CaptionB( From 37c0fc3340b12e7c143b109e23fa71487294b566 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 07:48:40 -0300 Subject: [PATCH 53/64] fix: card dimensions --- .../to/bitkit/ui/components/SuggestionCard.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index f56ff06e7..700226cf7 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -12,11 +12,11 @@ import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells @@ -111,11 +111,12 @@ fun SuggestionCard( .clickableAlpha { onClick() } ) { Column( + verticalArrangement = Arrangement.Bottom, modifier = Modifier .fillMaxWidth() .padding(16.dp), ) { - Row( + Box( modifier = Modifier .fillMaxWidth() .weight(1f) @@ -123,11 +124,9 @@ fun SuggestionCard( Image( painter = painterResource(icon), contentDescription = null, - alignment = Alignment.CenterStart, - contentScale = ContentScale.FillHeight, - modifier = Modifier - .defaultMinSize(minHeight = 80.dp) - .weight(1f) + alignment = Alignment.TopStart, + contentScale = ContentScale.Fit, + modifier = Modifier.defaultMinSize(minHeight = 80.dp).align(Alignment.BottomStart) ) if (onClose != null) { @@ -135,6 +134,7 @@ fun SuggestionCard( onClick = onClose, modifier = Modifier .size(16.dp) + .align(Alignment.TopEnd) .testTag("SuggestionDismiss") ) { Icon( @@ -179,7 +179,8 @@ private fun Modifier.gradientRadialBackground( @Composable private fun Preview() { LazyVerticalGrid( - verticalArrangement = Arrangement.spacedBy(4.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), columns = GridCells.Fixed(2), modifier = Modifier.fillMaxSize(), ) { From 7b5f739e24034d84a9a1a086d0151cecc4613dc5 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 07:56:50 -0300 Subject: [PATCH 54/64] fix: reimport image --- app/src/main/res/drawable-hdpi/lightbulb.png | Bin 0 -> 15855 bytes app/src/main/res/drawable-mdpi/lightbulb.png | Bin 0 -> 7872 bytes app/src/main/res/drawable-nodpi/lightbulb.png | Bin 9619 -> 0 bytes app/src/main/res/drawable-xhdpi/lightbulb.png | Bin 0 -> 26655 bytes app/src/main/res/drawable-xxhdpi/lightbulb.png | Bin 0 -> 76109 bytes .../main/res/drawable-xxxhdpi/lightbulb.png | Bin 0 -> 117974 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/lightbulb.png create mode 100644 app/src/main/res/drawable-mdpi/lightbulb.png delete mode 100644 app/src/main/res/drawable-nodpi/lightbulb.png create mode 100644 app/src/main/res/drawable-xhdpi/lightbulb.png create mode 100644 app/src/main/res/drawable-xxhdpi/lightbulb.png create mode 100644 app/src/main/res/drawable-xxxhdpi/lightbulb.png diff --git a/app/src/main/res/drawable-hdpi/lightbulb.png b/app/src/main/res/drawable-hdpi/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e402f7c776c5ded7f3a9444dffe37fc95f4cc4 GIT binary patch literal 15855 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
eYiYX3RX8&*z7_x(<{M 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 diff --git a/app/src/main/res/drawable-xhdpi/lightbulb.png b/app/src/main/res/drawable-xhdpi/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9488e458faba7ee03ee679eb51f3dc3ad969dc GIT binary patch literal 26655 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 Uu3^@H%Xh($ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/lightbulb.png b/app/src/main/res/drawable-xxhdpi/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..f90abdba2aa4fd5a2821d9bffdc154c327dd7b3f GIT binary patch literal 76109 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

;$Y$mwg#(%L$1|fYwf`cJ*lvY5eeLJD8O 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 LNkvXXu0mjfg%@3c literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/lightbulb.png b/app/src/main/res/drawable-xxxhdpi/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd4f4a8c894bb74696f9581e2e6aeed75b9e217 GIT binary patch literal 117974 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 q? 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 Date: Thu, 5 Mar 2026 08:17:09 -0300 Subject: [PATCH 55/64] fix: BlockCard.kt styles --- .../ui/screens/widgets/blocks/BlockCard.kt | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt index 4f20305d8..57aba4065 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -25,7 +26,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import to.bitkit.R import to.bitkit.ui.components.BodyMSB -import to.bitkit.ui.components.BodySB +import to.bitkit.ui.components.BodySSB import to.bitkit.ui.components.CaptionB import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors @@ -85,16 +86,18 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() + .heightIn(min = 28.dp) .testTag("block_card_block_row"), - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { - BodySB( + BodySSB( text = "Block", color = Colors.White64, modifier = Modifier.testTag("block_card_block_label") ) - BodySB( + BodyMSB( text = block, color = Colors.White, modifier = Modifier.testTag("block_card_block_text") @@ -106,16 +109,18 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() + .heightIn(min = 28.dp) .testTag("block_card_time_row"), - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { - BodySB( + BodySSB( text = "Time", color = Colors.White64, modifier = Modifier.testTag("block_card_time_label") ) - BodySB( + BodyMSB( text = time, color = Colors.White, modifier = Modifier.testTag("block_card_time_text") @@ -127,16 +132,18 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() + .heightIn(min = 28.dp) .testTag("block_card_date_row"), - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { - BodySB( + BodySSB( text = "Date", color = Colors.White64, modifier = Modifier.testTag("block_card_date_label") ) - BodySB( + BodyMSB( text = date, color = Colors.White, modifier = Modifier.testTag("block_card_date_text") @@ -148,16 +155,18 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() + .heightIn(min = 28.dp) .testTag("block_card_transactions_row"), - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { - BodySB( + BodySSB( text = "Transactions", color = Colors.White64, modifier = Modifier.testTag("block_card_transactions_label") ) - BodySB( + BodyMSB( text = transactions, color = Colors.White, modifier = Modifier.testTag("block_card_transactions_text") @@ -169,16 +178,18 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() + .heightIn(min = 28.dp) .testTag("block_card_size_row"), - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { - BodySB( + BodySSB( text = "Size", color = Colors.White64, modifier = Modifier.testTag("block_card_size_label") ) - BodySB( + BodyMSB( text = size, color = Colors.White, modifier = Modifier.testTag("block_card_size_text") @@ -194,7 +205,7 @@ fun BlockCard( .testTag("block_card_source_row"), horizontalArrangement = Arrangement.SpaceBetween ) { - BodySB( + CaptionB( text = stringResource(R.string.widgets__widget__source), color = Colors.White64, modifier = Modifier.testTag("block_card_source_label") From 8fa9f5059ea0f0b4d4e28ad98f7dee4ee7dfa631 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 08:25:16 -0300 Subject: [PATCH 56/64] fix: banner padding --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 9633d37b9..374cb8e38 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -433,6 +433,7 @@ private fun WalletPage( ) VerticalSpacer(32.dp) BalancesSection(balances, onNavigateToSavings, onNavigateToSpending) + VerticalSpacer(32.dp) if (!homeUiState.showEmptyState) { if (hasActivity) { @@ -441,7 +442,7 @@ private fun WalletPage( verticalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier .fillMaxWidth() - .padding(top = 32.dp, bottom = 16.dp) + .padding(bottom = 16.dp) ) { homeUiState.banners.forEach { banner -> ActivityBanner( @@ -460,8 +461,6 @@ private fun WalletPage( } } - VerticalSpacer(32.dp) - ActivityListSimple( items = latestActivities, onAllActivityClick = onNavigateToAllActivity, From 9f5767827eb2557f08c5818c540a5991099752f5 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 08:28:38 -0300 Subject: [PATCH 57/64] fix: banner icon size --- app/src/main/java/to/bitkit/ui/components/ActivityBanner.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/components/ActivityBanner.kt b/app/src/main/java/to/bitkit/ui/components/ActivityBanner.kt index 5d03ad156..43e3aa849 100644 --- a/app/src/main/java/to/bitkit/ui/components/ActivityBanner.kt +++ b/app/src/main/java/to/bitkit/ui/components/ActivityBanner.kt @@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredHeight +import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.Icon @@ -161,7 +162,8 @@ fun ActivityBanner( Icon( painter = painterResource(icon), contentDescription = null, - tint = gradientColor + tint = gradientColor, + modifier = Modifier.size(20.dp) ) Headline20( From bf6b9f39d130460bf3ab1103ed77f4468fa1b845 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 08:58:22 -0300 Subject: [PATCH 58/64] fix: match spacing with figma --- .../java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt index 57aba4065..61db6830d 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt @@ -86,7 +86,6 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() - .heightIn(min = 28.dp) .testTag("block_card_block_row"), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically @@ -109,7 +108,6 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() - .heightIn(min = 28.dp) .testTag("block_card_time_row"), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically @@ -132,7 +130,6 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() - .heightIn(min = 28.dp) .testTag("block_card_date_row"), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically @@ -155,7 +152,6 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() - .heightIn(min = 28.dp) .testTag("block_card_transactions_row"), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically @@ -178,7 +174,6 @@ fun BlockCard( Row( modifier = Modifier .fillMaxWidth() - .heightIn(min = 28.dp) .testTag("block_card_size_row"), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically From f013116ffb9ff1a08346c83cb42c4a59da308301 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 09:29:09 -0300 Subject: [PATCH 59/64] fix: preserve widget order during edit mode --- .../main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index e5d6a50c3..9847951c5 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -66,7 +66,11 @@ class HomeViewModel @Inject constructor( suggestions = suggestions, showWidgets = settings.showWidgets, showWidgetTitles = settings.showWidgetTitles, - widgetsWithPosition = widgetsData.widgets, + widgetsWithPosition = if (_uiState.value.isEditingWidgets) { + _uiState.value.widgetsWithPosition + } else { + widgetsData.widgets + }, headlinePreferences = widgetsData.headlinePreferences, factsPreferences = widgetsData.factsPreferences, blocksPreferences = widgetsData.blocksPreferences, From 0ccd103da11363e19394d62a11eb3ea83b38b8a7 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 09:34:05 -0300 Subject: [PATCH 60/64] chore: lint --- app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt | 5 +++-- .../java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt index 700226cf7..556197568 100644 --- a/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt +++ b/app/src/main/java/to/bitkit/ui/components/SuggestionCard.kt @@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells @@ -126,7 +125,9 @@ fun SuggestionCard( contentDescription = null, alignment = Alignment.TopStart, contentScale = ContentScale.Fit, - modifier = Modifier.defaultMinSize(minHeight = 80.dp).align(Alignment.BottomStart) + modifier = Modifier + .defaultMinSize(minHeight = 80.dp) + .align(Alignment.BottomStart) ) if (onClose != null) { diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt index 61db6830d..e5c823514 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/blocks/BlockCard.kt @@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width From 5f284a90f4cfbbd0688b65ec1804f7c93874eb04 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 10:15:23 -0300 Subject: [PATCH 61/64] fix: remove spacer --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index 63b6536c0..c61c355f1 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -73,8 +73,8 @@ import to.bitkit.data.dto.price.PriceWidgetData import to.bitkit.data.dto.price.TradingPair import to.bitkit.env.Env import to.bitkit.models.ActivityBannerType -import to.bitkit.models.BannerItem import to.bitkit.models.BalanceState +import to.bitkit.models.BannerItem import to.bitkit.models.Suggestion import to.bitkit.models.WidgetType import to.bitkit.models.WidgetWithPosition @@ -86,7 +86,6 @@ import to.bitkit.ui.components.ActivityBanner import to.bitkit.ui.components.AppStatus import to.bitkit.ui.components.BalanceHeaderView import to.bitkit.ui.components.EmptyStateView -import to.bitkit.ui.components.FillHeight import to.bitkit.ui.components.Headline24 import to.bitkit.ui.components.HorizontalSpacer import to.bitkit.ui.components.Sheet @@ -468,7 +467,7 @@ private fun WalletPage( onActivityItemClick = onNavigateToActivityItem, ) - FillHeight() + VerticalSpacer(16.dp) if (homeUiState.showWidgetsOnboardingHint) { WidgetsOnboardingHint() From 027cbac9a05934ad8c6e9d0a448f841690e08e16 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 10:15:36 -0300 Subject: [PATCH 62/64] chore: lint --- .../java/to/bitkit/ui/screens/wallets/HomeViewModel.kt | 8 ++++---- app/src/main/res/values/strings.xml | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt index 9847951c5..59eacc6f6 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeViewModel.kt @@ -41,6 +41,10 @@ class HomeViewModel @Inject constructor( private val transferRepo: TransferRepo, ) : ViewModel() { + companion object { + private const val MAX_SUGGESTIONS = 4 + } + private val _uiState = MutableStateFlow(HomeUiState()) val uiState: StateFlow = _uiState.asStateFlow() @@ -315,8 +319,4 @@ class HomeViewModel @Inject constructor( val dismissedList = settings.dismissedSuggestions.mapNotNull { it.toSuggestionOrNull() } baseSuggestions.filterNot { it in dismissedList }.take(MAX_SUGGESTIONS) } - - companion object { - private const val MAX_SUGGESTIONS = 4 - } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 12a66d289..6457680ee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -996,8 +996,11 @@ Bitcoin Headlines Enjoy decentralized feeds from your favorite web services, by adding fun and useful widgets to your Bitkit wallet. Hello,\n<accent>Widgets</accent> + Swipe to find\n<accent>your widgets</accent> Check the latest Bitcoin exchange rates for a variety of fiat currencies. Bitcoin Price + Discover everything Bitkit has to offer. + Bitkit Suggestions The next block rate is close to the monthly averages. Average Conditions All clear. Now would be a good time to transact on the blockchain. @@ -1015,7 +1018,4 @@ Widget Source Widgets - Swipe to find\n<accent>your widgets</accent> - Discover everything Bitkit has to offer. - Bitkit Suggestions From f41a2f17221ac156a37584a25143934f0310a296 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 10:21:58 -0300 Subject: [PATCH 63/64] chore: lint --- .../screens/widgets/suggestions/SuggestionsPreviewScreen.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt index 3c9e73d76..bb61fcf95 100644 --- a/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/widgets/suggestions/SuggestionsPreviewScreen.kt @@ -84,9 +84,9 @@ private fun Content( VerticalSpacer(26.dp) Row( - modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth(), ) { Headline( text = AnnotatedString(stringResource(R.string.widgets__suggestions__name)), @@ -139,10 +139,10 @@ private fun Content( } Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier .padding(vertical = 21.dp) .fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(16.dp) ) { if (isSuggestionsWidgetEnabled) { SecondaryButton( From 119a5f1fea22064b44d53249ba20f17337476d82 Mon Sep 17 00:00:00 2001 From: jvsena42 Date: Thu, 5 Mar 2026 10:30:27 -0300 Subject: [PATCH 64/64] fix: restore FillHeight --- app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt index c61c355f1..85709c3ae 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt @@ -86,6 +86,7 @@ import to.bitkit.ui.components.ActivityBanner import to.bitkit.ui.components.AppStatus import to.bitkit.ui.components.BalanceHeaderView import to.bitkit.ui.components.EmptyStateView +import to.bitkit.ui.components.FillHeight import to.bitkit.ui.components.Headline24 import to.bitkit.ui.components.HorizontalSpacer import to.bitkit.ui.components.Sheet @@ -467,7 +468,7 @@ private fun WalletPage( onActivityItemClick = onNavigateToActivityItem, ) - VerticalSpacer(16.dp) + FillHeight() if (homeUiState.showWidgetsOnboardingHint) { WidgetsOnboardingHint()