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 e3838e044..d3a67c8a1 100644 --- a/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt +++ b/app/src/main/java/to/bitkit/ui/components/WalletBalanceView.kt @@ -12,15 +12,14 @@ import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.unit.dp import to.bitkit.models.ConvertedAmount +import to.bitkit.models.PrimaryDisplay import to.bitkit.ui.LocalCurrencies import to.bitkit.ui.currencyViewModel import to.bitkit.ui.theme.Colors -import to.bitkit.models.PrimaryDisplay @Composable fun RowScope.WalletBalanceView( @@ -30,8 +29,8 @@ fun RowScope.WalletBalanceView( modifier: Modifier, ) { val currency = currencyViewModel ?: return - val (rates, _, _, _, displayUnit, primaryDisplay) = LocalCurrencies.current - val converted: ConvertedAmount? = if (rates.isNotEmpty()) currency.convert(sats = sats) else null + val (_, _, _, _, displayUnit, primaryDisplay) = LocalCurrencies.current + val converted: ConvertedAmount? = currency.convert(sats = sats) Column( modifier = Modifier @@ -43,6 +42,7 @@ fun RowScope.WalletBalanceView( color = Colors.White64, ) Spacer(modifier = Modifier.height(8.dp)) + converted?.let { converted -> if (primaryDisplay == PrimaryDisplay.BITCOIN) { val btcComponents = converted.bitcoinDisplay(displayUnit) @@ -73,10 +73,7 @@ fun RowScope.WalletBalanceView( .padding(end = 4.dp) .size(24.dp) ) - BodyMSB( - text = converted.symbol, - modifier = Modifier.alpha(0.6f) - ) + BodyMSB(text = converted.symbol) BodyMSB(text = converted.formatted) } } 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 c4801e3ef..48ade891f 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 @@ -20,11 +20,9 @@ import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.pullrefresh.PullRefreshIndicator import androidx.compose.material.pullrefresh.pullRefresh import androidx.compose.material.pullrefresh.rememberPullRefreshState -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -37,6 +35,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -78,7 +77,6 @@ import to.bitkit.viewmodels.AppViewModel import to.bitkit.viewmodels.MainUiState import to.bitkit.viewmodels.WalletViewModel -@OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen( walletViewModel: WalletViewModel, @@ -86,7 +84,7 @@ fun HomeScreen( activityListViewModel: ActivityListViewModel, rootNavController: NavController, ) { - val uiState: MainUiState by walletViewModel.uiState.collectAsState() + val uiState: MainUiState by walletViewModel.uiState.collectAsStateWithLifecycle() val currentSheet by appViewModel.currentSheet SheetHost( @@ -143,10 +141,11 @@ fun HomeScreen( enterTransition = { screenSlideIn }, exitTransition = { screenSlideOut }, ) { - val hasSeenSpendingIntro by appViewModel.hasSeenSpendingIntro.collectAsState() + val hasSeenSpendingIntro by appViewModel.hasSeenSpendingIntro.collectAsStateWithLifecycle() SavingsWalletScreen( onAllActivityButtonClick = { walletNavController.navigate(HomeRoutes.AllActivity) }, onActivityItemClick = { rootNavController.navigateToActivityItem(it) }, + onEmptyActivityRowClick = { appViewModel.showSheet(BottomSheetType.Receive) }, onTransferToSpendingClick = { if (!hasSeenSpendingIntro) { rootNavController.navigateToTransferSpendingIntro() @@ -161,11 +160,12 @@ fun HomeScreen( enterTransition = { screenSlideIn }, exitTransition = { screenSlideOut }, ) { - val hasSeenSavingsIntro by appViewModel.hasSeenSavingsIntro.collectAsState() + val hasSeenSavingsIntro by appViewModel.hasSeenSavingsIntro.collectAsStateWithLifecycle() SpendingWalletScreen( uiState = uiState, onAllActivityButtonClick = { walletNavController.navigate(HomeRoutes.AllActivity) }, onActivityItemClick = { rootNavController.navigateToActivityItem(it) }, + onEmptyActivityRowClick = { appViewModel.showSheet(BottomSheetType.Receive) }, onTransferToSavingsClick = { if (!hasSeenSavingsIntro) { rootNavController.navigateToTransferSavingsIntro() @@ -173,7 +173,7 @@ fun HomeScreen( rootNavController.navigateToTransferSavingsAvailability() } }, - onBackCLick = { walletNavController.popBackStack() }, + onBackClick = { walletNavController.popBackStack() }, ) } composable( @@ -182,7 +182,7 @@ fun HomeScreen( ) { AllActivityScreen( viewModel = activityListViewModel, - onBackCLick = { walletNavController.popBackStack() }, + onBackClick = { walletNavController.popBackStack() }, onActivityItemClick = { rootNavController.navigateToActivityItem(it) }, ) } @@ -215,7 +215,7 @@ private fun HomeContentView( RequestNotificationPermissions() val balances = LocalBalances.current val app = appViewModel ?: return@AppScaffold - val showEmptyStateSetting by app.showEmptyState.collectAsState() + val showEmptyStateSetting by app.showEmptyState.collectAsStateWithLifecycle() val showEmptyState by remember(balances.totalSats, showEmptyStateSetting) { derivedStateOf { showEmptyStateSetting && balances.totalSats == 0uL @@ -265,11 +265,12 @@ private fun HomeContentView( Text13Up(stringResource(R.string.wallet__activity), color = Colors.White64) Spacer(modifier = Modifier.height(16.dp)) val activity = activityListViewModel ?: return@Column - val latestActivities by activity.latestActivities.collectAsState() + val latestActivities by activity.latestActivities.collectAsStateWithLifecycle() ActivityList( items = latestActivities, onAllActivityClick = { walletNavController.navigate(HomeRoutes.AllActivity) }, onActivityItemClick = { rootNavController.navigateToActivityItem(it) }, + onEmptyActivityRowClick = { app.showSheet(BottomSheetType.Receive) }, ) } } diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/SavingsWalletScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/SavingsWalletScreen.kt index 1550b1587..a32b21cda 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/SavingsWalletScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/SavingsWalletScreen.kt @@ -41,6 +41,7 @@ import to.bitkit.ui.utils.withAccent @Composable fun SavingsWalletScreen( onAllActivityButtonClick: () -> Unit, + onEmptyActivityRowClick: () -> Unit, onActivityItemClick: (String) -> Unit, onTransferToSpendingClick: () -> Unit, onBackClick: () -> Unit, @@ -95,6 +96,7 @@ fun SavingsWalletScreen( showFooter = true, onAllActivityButtonClick = onAllActivityButtonClick, onActivityItemClick = onActivityItemClick, + onEmptyActivityRowClick = onEmptyActivityRowClick, ) } } @@ -117,8 +119,9 @@ private fun SavingsWalletScreenPreview() { SavingsWalletScreen( onAllActivityButtonClick = {}, onActivityItemClick = {}, + onEmptyActivityRowClick = {}, onTransferToSpendingClick = {}, - onBackClick = { }, + onBackClick = {}, ) } } diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/SpendingWalletScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/SpendingWalletScreen.kt index ef4590c5b..5e636fe58 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/SpendingWalletScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/SpendingWalletScreen.kt @@ -44,8 +44,9 @@ fun SpendingWalletScreen( uiState: MainUiState, onAllActivityButtonClick: () -> Unit, onActivityItemClick: (String) -> Unit, + onEmptyActivityRowClick: () -> Unit, onTransferToSavingsClick: () -> Unit, - onBackCLick: () -> Unit, + onBackClick: () -> Unit, ) { val balances = LocalBalances.current val showEmptyState by remember(balances.totalLightningSats) { @@ -77,7 +78,7 @@ fun SpendingWalletScreen( AppTopBar( titleText = stringResource(R.string.wallet__spending__title), icon = painterResource(R.drawable.ic_ln_circle), - onBackClick = onBackCLick, + onBackClick = onBackClick, ) Column( modifier = Modifier.padding(horizontal = 16.dp) @@ -109,6 +110,7 @@ fun SpendingWalletScreen( showFooter = true, onAllActivityButtonClick = onAllActivityButtonClick, onActivityItemClick = onActivityItemClick, + onEmptyActivityRowClick = onEmptyActivityRowClick, ) } } @@ -132,8 +134,9 @@ private fun SpendingWalletScreenPreview() { uiState = MainUiState(), onAllActivityButtonClick = {}, onActivityItemClick = {}, + onEmptyActivityRowClick = {}, onTransferToSavingsClick = {}, - onBackCLick = {}, + onBackClick = {}, ) } } diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityItemScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityItemScreen.kt index 6e5947261..518e00d6a 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityItemScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityItemScreen.kt @@ -31,7 +31,7 @@ import to.bitkit.R import to.bitkit.ext.toActivityItemDate import to.bitkit.ext.toActivityItemTime import to.bitkit.ui.Routes -import to.bitkit.ui.components.ActivityIcon +import to.bitkit.ui.screens.wallets.activity.components.ActivityIcon import to.bitkit.ui.components.BalanceHeaderView import to.bitkit.ui.components.BodySSB import to.bitkit.ui.components.ButtonSize diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/AllActivityScreen.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/AllActivityScreen.kt index 89b9a0ce4..955367155 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/AllActivityScreen.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/AllActivityScreen.kt @@ -19,15 +19,17 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import to.bitkit.R import to.bitkit.ui.appViewModel -import to.bitkit.ui.components.BodyMSB import to.bitkit.ui.components.BottomSheetType import to.bitkit.ui.components.TertiaryButton import to.bitkit.ui.scaffold.AppTopBar import to.bitkit.ui.scaffold.ScreenColumn -import to.bitkit.ui.shared.util.DarkModePreview +import to.bitkit.ui.screens.wallets.activity.components.ActivityListFilter +import to.bitkit.ui.screens.wallets.activity.components.ActivityRow +import to.bitkit.ui.screens.wallets.activity.components.EmptyActivityRow import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors import to.bitkit.viewmodels.ActivityListViewModel @@ -48,13 +50,13 @@ import java.util.Locale @Composable fun AllActivityScreen( viewModel: ActivityListViewModel, - onBackCLick: () -> Unit, + onBackClick: () -> Unit, onActivityItemClick: (String) -> Unit, ) { val app = appViewModel ?: return ScreenColumn { - AppTopBar(stringResource(R.string.wallet__activity_all), onBackCLick) + AppTopBar(stringResource(R.string.wallet__activity_all), onBackClick) Column(modifier = Modifier.padding(horizontal = 16.dp)) { ActivityListFilter( @@ -67,6 +69,7 @@ fun AllActivityScreen( ActivityListWithHeaders( items = filteredActivities, onActivityItemClick = onActivityItemClick, + onEmptyActivityRowClick = { app.showSheet(BottomSheetType.Receive) }, ) } } @@ -78,12 +81,13 @@ fun ActivityListWithHeaders( showFooter: Boolean = false, onAllActivityButtonClick: () -> Unit = { }, onActivityItemClick: (String) -> Unit, + onEmptyActivityRowClick: () -> Unit, ) { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.fillMaxSize() ) { - if (items != null) { + if (items != null && items.isNotEmpty()) { val groupedItems = groupActivityItems(items) LazyColumn( @@ -105,30 +109,27 @@ fun ActivityListWithHeaders( is Activity -> { ActivityRow(item, onActivityItemClick) - if (index < groupedItems.size - 1 && groupedItems[index + 1] !is String) { - HorizontalDivider(color = Colors.White10) + val hasNextItem = index < groupedItems.size - 1 && groupedItems[index + 1] !is String + if (hasNextItem) { + HorizontalDivider() } } } } if (showFooter) { item { - if (items.isEmpty()) { - BodyMSB(stringResource(R.string.wallet__activity_no), Modifier.padding(16.dp)) - } else { - TertiaryButton( - text = stringResource(R.string.wallet__activity_show_all), - onClick = onAllActivityButtonClick, - modifier = Modifier - .wrapContentWidth() - .padding(top = 8.dp) - ) - } + TertiaryButton( + text = stringResource(R.string.wallet__activity_show_all), + onClick = onAllActivityButtonClick, + modifier = Modifier + .wrapContentWidth() + .padding(top = 8.dp) + ) } } } } else { - BodyMSB(stringResource(R.string.wallet__activity_no), Modifier.padding(16.dp)) + EmptyActivityRow(onClick = onEmptyActivityRowClick) } } } @@ -138,34 +139,26 @@ fun ActivityList( items: List?, onAllActivityClick: () -> Unit, onActivityItemClick: (String) -> Unit, + onEmptyActivityRowClick: () -> Unit, ) { - if (items != null) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth() + ) { + if (items != null && items.isNotEmpty()) { items.forEach { item -> ActivityRow(item, onActivityItemClick) - HorizontalDivider(color = Colors.White10) - } - if (items.isEmpty()) { - BodyMSB(stringResource(R.string.wallet__activity_no), Modifier.padding(16.dp)) - } else { - TertiaryButton( - text = stringResource(R.string.wallet__activity_show_all), - onClick = onAllActivityClick, - modifier = Modifier - .wrapContentWidth() - .padding(top = 8.dp) - ) + HorizontalDivider() } - } - } else { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxWidth() - ) { - BodyMSB(stringResource(R.string.wallet__activity_no), Modifier.padding(16.dp)) + TertiaryButton( + text = stringResource(R.string.wallet__activity_show_all), + onClick = onAllActivityClick, + modifier = Modifier + .wrapContentWidth() + .padding(top = 8.dp) + ) + } else { + EmptyActivityRow(onClick = onEmptyActivityRowClick) } } } @@ -178,7 +171,8 @@ private fun groupActivityItems(activityItems: List): List { val startOfDay = today.toInstant().epochSecond val startOfYesterday = today.minusDays(1).toInstant().epochSecond - val startOfWeek = today.with(TemporalAdjusters.previousOrSame(WeekFields.of(Locale.getDefault()).firstDayOfWeek)).toInstant().epochSecond + val startOfWeek = today.with(TemporalAdjusters.previousOrSame(WeekFields.of(Locale.getDefault()).firstDayOfWeek)) + .toInstant().epochSecond val startOfMonth = today.withDayOfMonth(1).toInstant().epochSecond val startOfYear = today.withDayOfYear(1).toInstant().epochSecond @@ -234,52 +228,43 @@ private fun groupActivityItems(activityItems: List): List { // endregion // region preview -@DarkModePreview +@Preview @Composable private fun PreviewActivityListWithHeadersView() { AppThemeSurface { Column(modifier = Modifier.padding(horizontal = 16.dp)) { ActivityListWithHeaders( testActivityItems, - onAllActivityButtonClick = { }, - onActivityItemClick = { }, + onAllActivityButtonClick = {}, + onActivityItemClick = {}, + onEmptyActivityRowClick = {}, ) } } } -@DarkModePreview +@Preview @Composable private fun PreviewActivityListItems() { AppThemeSurface { ActivityList( testActivityItems, - onAllActivityClick = { }, - onActivityItemClick = { }, + onAllActivityClick = {}, + onActivityItemClick = {}, + onEmptyActivityRowClick = {}, ) } } -@DarkModePreview +@Preview @Composable private fun PreviewActivityListEmpty() { AppThemeSurface { ActivityList( items = emptyList(), - onAllActivityClick = { }, - onActivityItemClick = { }, - ) - } -} - -@DarkModePreview -@Composable -private fun PreviewActivityListNull() { - AppThemeSurface { - ActivityList( - items = null, - onAllActivityClick = { }, - onActivityItemClick = { }, + onAllActivityClick = {}, + onActivityItemClick = {}, + onEmptyActivityRowClick = {}, ) } } diff --git a/app/src/main/java/to/bitkit/ui/components/ActivityIcon.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityIcon.kt similarity index 99% rename from app/src/main/java/to/bitkit/ui/components/ActivityIcon.kt rename to app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityIcon.kt index 0bfde056f..4caa3b534 100644 --- a/app/src/main/java/to/bitkit/ui/components/ActivityIcon.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityIcon.kt @@ -1,4 +1,4 @@ -package to.bitkit.ui.components +package to.bitkit.ui.screens.wallets.activity.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityListFilter.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListFilter.kt similarity index 98% rename from app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityListFilter.kt rename to app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListFilter.kt index 3e83474bf..1241e8c1a 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityListFilter.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListFilter.kt @@ -1,4 +1,4 @@ -package to.bitkit.ui.screens.wallets.activity +package to.bitkit.ui.screens.wallets.activity.components import androidx.compose.foundation.background import androidx.compose.foundation.clickable diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityRow.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt similarity index 94% rename from app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityRow.kt rename to app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt index 40bdb59d2..e7c70da50 100644 --- a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityRow.kt +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt @@ -1,4 +1,4 @@ -package to.bitkit.ui.screens.wallets.activity +package to.bitkit.ui.screens.wallets.activity.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -20,10 +20,10 @@ import to.bitkit.ext.DatePattern import to.bitkit.ext.formatted import to.bitkit.models.PrimaryDisplay import to.bitkit.ui.LocalCurrencies -import to.bitkit.ui.components.ActivityIcon import to.bitkit.ui.components.BodyMSB import to.bitkit.ui.components.CaptionB import to.bitkit.ui.currencyViewModel +import to.bitkit.ui.screens.wallets.activity.testActivityItems import to.bitkit.ui.shared.util.clickableAlpha import to.bitkit.ui.theme.AppThemeSurface import to.bitkit.ui.theme.Colors @@ -43,17 +43,7 @@ fun ActivityRow( is Activity.Onchain -> item.v1.id is Activity.Lightning -> item.v1.id } - ActivityRowContent( - item = item, - onClick = { onClick(id) }, - ) -} -@Composable -private fun ActivityRowContent( - item: Activity, - onClick: () -> Unit, -) { val status: PaymentState? = when (item) { is Activity.Lightning -> item.v1.status is Activity.Onchain -> null @@ -77,7 +67,7 @@ private fun ActivityRowContent( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() - .clickableAlpha { onClick() } + .clickableAlpha { onClick(id) } .padding(vertical = 16.dp) ) { ActivityIcon(activity = item, size = 32.dp) @@ -129,14 +119,14 @@ private fun TransactionStatusText( PaymentState.FAILED -> BodyMSB(text = stringResource(R.string.wallet__activity_failed)) PaymentState.PENDING -> BodyMSB(text = stringResource(R.string.wallet__activity_pending)) PaymentState.SUCCEEDED -> BodyMSB(text = stringResource(R.string.wallet__activity_sent)) - else -> {} + else -> Unit } else -> when (status) { PaymentState.FAILED -> BodyMSB(text = stringResource(R.string.wallet__activity_failed)) PaymentState.PENDING -> BodyMSB(text = stringResource(R.string.wallet__activity_pending)) PaymentState.SUCCEEDED -> BodyMSB(text = stringResource(R.string.wallet__activity_received)) - else -> {} + else -> Unit } } } @@ -221,7 +211,7 @@ private class ActivityItemsPreviewProvider : PreviewParameterProvider @Composable private fun Preview(@PreviewParameter(ActivityItemsPreviewProvider::class) item: Activity) { AppThemeSurface { - ActivityRowContent( + ActivityRow( item = item, onClick = {}, ) diff --git a/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/EmptyActivityRow.kt b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/EmptyActivityRow.kt new file mode 100644 index 000000000..9ee9493f5 --- /dev/null +++ b/app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/EmptyActivityRow.kt @@ -0,0 +1,63 @@ +package to.bitkit.ui.screens.wallets.activity.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +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.CaptionB +import to.bitkit.ui.shared.util.clickableAlpha +import to.bitkit.ui.theme.AppThemeSurface +import to.bitkit.ui.theme.Colors + +@Composable +fun EmptyActivityRow( + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Row( + verticalAlignment = Alignment.Companion.CenterVertically, + modifier = modifier + .fillMaxWidth() + .padding(vertical = 16.dp) + .clickableAlpha(onClick = onClick) + ) { + CircularIcon( + icon = painterResource(R.drawable.ic_heartbeat), + iconColor = Colors.Yellow, + backgroundColor = Colors.Yellow16, + size = 32.dp, + ) + Spacer(modifier = Modifier.width(16.dp)) + Column( + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { + BodyMSB(text = stringResource(R.string.wallet__activity_no)) + CaptionB( + text = stringResource(R.string.wallet__activity_no_explain), + color = Colors.White64 + ) + } + } +} + +@Preview +@Composable +private fun Preview() { + AppThemeSurface { + EmptyActivityRow( + onClick = {}, + ) + } +} diff --git a/app/src/main/res/drawable/ic_heartbeat.xml b/app/src/main/res/drawable/ic_heartbeat.xml new file mode 100644 index 000000000..399c2ff46 --- /dev/null +++ b/app/src/main/res/drawable/ic_heartbeat.xml @@ -0,0 +1,13 @@ + + + + +