From 69fc425eda3d21f130e42777b0e0bf07a0301839 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Thu, 27 Aug 2026 17:32:02 -0400 Subject: [PATCH] feat(navbar): fill each tab's glyph only while it is selected The wallet and tip card were drawn as fills and the scanner and chat as outlines, so the weight of a glyph said nothing about which tab was active -- selection was carried by the pill and a half-alpha dim alone. Every tab now ships both weights and switches on selection, matching nodes 9442:103674 (wallet outline) and 8966:1366 / 8966:99595 / 8966:2774 (the solid twins). The unsuffixed drawable is the outline, so `ic_nav_scan` keeps pointing at the weight the Finish Your Profile card reuses. --- .../com/flipcash/app/core/ui/NavigationBar.kt | 22 +++++++++++-------- .../res/drawable/ic_nav_chat_selected.xml | 14 ++++++++++++ .../res/drawable/ic_nav_scan_selected.xml | 16 ++++++++++++++ .../res/drawable/ic_nav_tipcard_selected.xml | 11 ++++++++++ .../src/main/res/drawable/ic_nav_wallet.xml | 17 +++++++++----- .../res/drawable/ic_nav_wallet_selected.xml | 14 ++++++++++++ 6 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 apps/flipcash/core/src/main/res/drawable/ic_nav_chat_selected.xml create mode 100644 apps/flipcash/core/src/main/res/drawable/ic_nav_scan_selected.xml create mode 100644 apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard_selected.xml create mode 100644 apps/flipcash/core/src/main/res/drawable/ic_nav_wallet_selected.xml diff --git a/apps/flipcash/core-ui/src/main/kotlin/com/flipcash/app/core/ui/NavigationBar.kt b/apps/flipcash/core-ui/src/main/kotlin/com/flipcash/app/core/ui/NavigationBar.kt index ee86667fa1..828968f233 100644 --- a/apps/flipcash/core-ui/src/main/kotlin/com/flipcash/app/core/ui/NavigationBar.kt +++ b/apps/flipcash/core-ui/src/main/kotlin/com/flipcash/app/core/ui/NavigationBar.kt @@ -205,7 +205,7 @@ fun NavigationBar( modifier = Modifier .size(iconSize) .graphicsLayer { alpha = iconAlpha }, - painter = painterResource(button.icon), + painter = painterResource(button.icon(selected)), colorFilter = ColorFilter.tint(Color.White), contentDescription = null, ) @@ -240,14 +240,18 @@ internal val NavBarButton.testTag: String NavBarButton.TipCard -> "nav_tipcard" } -@get:DrawableRes -private val NavBarButton.icon: Int - get() = when (this) { - NavBarButton.Scanner -> R.drawable.ic_nav_scan - NavBarButton.Wallet -> R.drawable.ic_nav_wallet - NavBarButton.Chats -> R.drawable.ic_nav_chat - NavBarButton.TipCard -> R.drawable.ic_nav_tipcard - } +/** + * The glyph for [this] tab at the weight its selection calls for. Every tab is drawn as an outline + * until it is selected, where it fills in; the dimming on top of that is the caller's alpha. The + * unsuffixed drawable is the outline, so `ic_nav_scan` stays the outline the tutorial card reuses. + */ +@DrawableRes +private fun NavBarButton.icon(selected: Boolean): Int = when (this) { + NavBarButton.Scanner -> if (selected) R.drawable.ic_nav_scan_selected else R.drawable.ic_nav_scan + NavBarButton.Wallet -> if (selected) R.drawable.ic_nav_wallet_selected else R.drawable.ic_nav_wallet + NavBarButton.Chats -> if (selected) R.drawable.ic_nav_chat_selected else R.drawable.ic_nav_chat + NavBarButton.TipCard -> if (selected) R.drawable.ic_nav_tipcard_selected else R.drawable.ic_nav_tipcard +} @Preview @PreviewWrapper(FlipcashThemeWrapper::class) diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_chat_selected.xml b/apps/flipcash/core/src/main/res/drawable/ic_nav_chat_selected.xml new file mode 100644 index 0000000000..0b077fb2ba --- /dev/null +++ b/apps/flipcash/core/src/main/res/drawable/ic_nav_chat_selected.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_scan_selected.xml b/apps/flipcash/core/src/main/res/drawable/ic_nav_scan_selected.xml new file mode 100644 index 0000000000..030b1dde94 --- /dev/null +++ b/apps/flipcash/core/src/main/res/drawable/ic_nav_scan_selected.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard_selected.xml b/apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard_selected.xml new file mode 100644 index 0000000000..88079f3cd1 --- /dev/null +++ b/apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard_selected.xml @@ -0,0 +1,11 @@ + + + + diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet.xml b/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet.xml index 8e79a57465..9993bc951d 100644 --- a/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet.xml +++ b/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet.xml @@ -1,13 +1,20 @@ - + + android:pathData="M28.3333 12V6.33333H3.66667V25.6667H28.3333V20" + android:strokeColor="#FFFFFF" + android:strokeWidth="2" + android:strokeLineCap="round" + android:strokeLineJoin="round" /> + android:pathData="M29.6667 13H19.6667V19H29.6667V13Z" + android:strokeColor="#FFFFFF" + android:strokeWidth="2" + android:strokeLineCap="round" + android:strokeLineJoin="round" /> diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet_selected.xml b/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet_selected.xml new file mode 100644 index 0000000000..7f5ea179bc --- /dev/null +++ b/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet_selected.xml @@ -0,0 +1,14 @@ + + + + +