From 94d790658ae2e9ebe2b9c9638155c5638837bab9 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Mon, 4 May 2026 16:27:52 -0400 Subject: [PATCH] feat(scanner): add Discover tab to scanner navigation bar Signed-off-by: Brandon McAnsh --- .../ui/navigation/AppScreenContent.kt | 2 ++ .../kotlin/com/flipcash/app/core/AppRoute.kt | 4 +++ .../core/src/main/res/drawable/ic_coins.xml | 27 ++++++++++++++++ .../core/src/main/res/values/strings.xml | 2 ++ .../app/discovery/TokenDiscoveryScreen.kt | 31 +++++++++++++++++++ .../app/scanner/internal/ScannerDecorItem.kt | 1 + .../ui/components/ScannerNavigationBar.kt | 8 +++++ 7 files changed, 75 insertions(+) create mode 100644 apps/flipcash/core/src/main/res/drawable/ic_coins.xml diff --git a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppScreenContent.kt b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppScreenContent.kt index e5d0d5ad1..5e24cec9f 100644 --- a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppScreenContent.kt +++ b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppScreenContent.kt @@ -30,6 +30,7 @@ import com.flipcash.app.core.AppRoute import com.flipcash.app.currency.RegionSelectionScreen import com.flipcash.app.deposit.DepositScreen import com.flipcash.app.discovery.TokenDiscoveryScreen +import com.flipcash.app.discovery.TokenDiscoverySheet import com.flipcash.app.internal.ui.navigation.decorators.rememberNavMessagingEntryDecorator import com.flipcash.app.lab.LabsScreen import com.flipcash.app.lab.StandaloneLabsScreen @@ -99,6 +100,7 @@ fun appEntryProvider( annotatedEntry { ShareAppScreen() } annotatedEntry { MenuScreen() } annotatedEntry { StandaloneLabsScreen() } + annotatedEntry { TokenDiscoverySheet() } // Tokens annotatedEntry { key -> diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/AppRoute.kt b/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/AppRoute.kt index 1daf573d5..d4cac512e 100644 --- a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/AppRoute.kt +++ b/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/AppRoute.kt @@ -111,6 +111,10 @@ sealed interface AppRoute : NavKey, Parcelable { data object Menu : Sheets @Serializable data object Lab : Sheets + + @Serializable + data object TokenDiscovery: Sheets + @Serializable data object ShareApp : Sheets } diff --git a/apps/flipcash/core/src/main/res/drawable/ic_coins.xml b/apps/flipcash/core/src/main/res/drawable/ic_coins.xml new file mode 100644 index 000000000..91825c199 --- /dev/null +++ b/apps/flipcash/core/src/main/res/drawable/ic_coins.xml @@ -0,0 +1,27 @@ + + + + diff --git a/apps/flipcash/core/src/main/res/values/strings.xml b/apps/flipcash/core/src/main/res/values/strings.xml index af3c0de19..df5d46ead 100644 --- a/apps/flipcash/core/src/main/res/values/strings.xml +++ b/apps/flipcash/core/src/main/res/values/strings.xml @@ -635,4 +635,6 @@ Amount in %1$s Leaderboard + + Discover \ No newline at end of file diff --git a/apps/flipcash/features/discovery/src/main/kotlin/com/flipcash/app/discovery/TokenDiscoveryScreen.kt b/apps/flipcash/features/discovery/src/main/kotlin/com/flipcash/app/discovery/TokenDiscoveryScreen.kt index a7039b05a..c9b6376a0 100644 --- a/apps/flipcash/features/discovery/src/main/kotlin/com/flipcash/app/discovery/TokenDiscoveryScreen.kt +++ b/apps/flipcash/features/discovery/src/main/kotlin/com/flipcash/app/discovery/TokenDiscoveryScreen.kt @@ -12,14 +12,40 @@ import com.flipcash.app.core.AppRoute import com.flipcash.app.discovery.internal.TokenDiscoveryScreen import com.flipcash.app.discovery.internal.TokenDiscoveryViewModel import com.flipcash.core.R +import com.getcode.navigation.core.CodeNavigator import com.getcode.navigation.core.LocalCodeNavigator import com.getcode.opencode.model.ui.DiscoverCategory +import com.getcode.ui.components.AppBarDefaults import com.getcode.ui.components.AppBarWithTitle import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach + +@Composable +fun TokenDiscoverySheet() { + val navigator = LocalCodeNavigator.current + val viewModel = hiltViewModel() + + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + AppBarWithTitle( + title = stringResource(R.string.title_discoverCurrencies), + isInModal = true, + titleAlignment = Alignment.CenterHorizontally, + endContent = { + AppBarDefaults.Close { navigator.hide() } + }, + ) + TokenDiscoveryScreen(viewModel) + } + + TokenDiscoveryEventHandler(viewModel, navigator) +} + @Composable fun TokenDiscoveryScreen() { val navigator = LocalCodeNavigator.current @@ -39,6 +65,11 @@ fun TokenDiscoveryScreen() { TokenDiscoveryScreen(viewModel) } + TokenDiscoveryEventHandler(viewModel, navigator) +} + +@Composable +private fun TokenDiscoveryEventHandler(viewModel: TokenDiscoveryViewModel, navigator: CodeNavigator) { LaunchedEffect(Unit) { if (viewModel.stateFlow.value.category == null) { viewModel.dispatchEvent(TokenDiscoveryViewModel.Event.OnCategorySelected(DiscoverCategory.Popular)) diff --git a/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ScannerDecorItem.kt b/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ScannerDecorItem.kt index 834be11db..b4cfd30d6 100644 --- a/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ScannerDecorItem.kt +++ b/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ScannerDecorItem.kt @@ -9,4 +9,5 @@ sealed class ScannerDecorItem(val screen: AppRoute) { data object Wallet : ScannerDecorItem(AppRoute.Sheets.Wallet) data object Menu : ScannerDecorItem(AppRoute.Sheets.Menu) data object Logo: ScannerDecorItem(AppRoute.Sheets.ShareApp) + data object Discover: ScannerDecorItem(AppRoute.Sheets.TokenDiscovery) } \ No newline at end of file diff --git a/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ui/components/ScannerNavigationBar.kt b/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ui/components/ScannerNavigationBar.kt index f0558e805..4d748fc28 100644 --- a/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ui/components/ScannerNavigationBar.kt +++ b/apps/flipcash/features/scanner/src/main/kotlin/com/flipcash/app/scanner/internal/ui/components/ScannerNavigationBar.kt @@ -101,6 +101,14 @@ internal fun ScannerNavigationBar( } } ) + + BottomBarAction( + modifier = Modifier.weight(1f), + label = stringResource(R.string.action_discover), + painter = painterResource(R.drawable.ic_coins), + badgeCount = 0, + onClick = { onAction(ScannerDecorItem.Discover) } + ) } }