From bbbc354c416f23cd4101364248ee9d902dccf68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Wed, 30 Apr 2025 12:32:20 +0200 Subject: [PATCH 1/2] add tab count to bottom nav bar --- .../bar/view/BrowserNavigationBarView.kt | 2 + .../bar/view/BrowserNavigationBarViewModel.kt | 4 +- .../ExperimentalTabSwitcherButton.kt | 27 ++++++++- .../layout/view_browser_navigation_bar.xml | 15 +---- .../view_experimental_tab_switcher_button.xml | 59 +++++++++++++++---- .../res/drawable/ic_tab_24_highlighted.xml | 16 +++++ 6 files changed, 94 insertions(+), 29 deletions(-) create mode 100644 common/common-ui/src/main/res/drawable/ic_tab_24_highlighted.xml diff --git a/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarView.kt b/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarView.kt index 06faa0593b38..819d68b6819c 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarView.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarView.kt @@ -192,6 +192,8 @@ class BrowserNavigationBarView @JvmOverloads constructor( binding.bookmarksButton.isVisible = viewState.bookmarksButtonVisible binding.fireButton.isVisible = viewState.fireButtonVisible binding.tabsButton.isVisible = viewState.tabsButtonVisible + binding.tabsButton.count = viewState.tabsCount + binding.tabsButton.hasUnread = viewState.hasUnreadTabs renderFireButtonPulseAnimation(enabled = viewState.fireButtonHighlighted) } diff --git a/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModel.kt index 3d3a205a617b..4e3f1c4ded03 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModel.kt @@ -68,7 +68,7 @@ class BrowserNavigationBarViewModel @Inject constructor( state.copy( isVisible = navigationBarState.isEnabled && !isCustomTab, tabsCount = tabs.size, - shouldUpdateTabsCount = tabs.size != state.tabsCount && tabs.isNotEmpty(), + hasUnreadTabs = tabs.firstOrNull { !it.viewed } != null, ) }.flowOn(dispatcherProvider.io()).stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000L), ViewState()) @@ -160,6 +160,6 @@ class BrowserNavigationBarViewModel @Inject constructor( val fireButtonHighlighted: Boolean = false, val tabsButtonVisible: Boolean = true, val tabsCount: Int = 0, - val shouldUpdateTabsCount: Boolean = false, + val hasUnreadTabs: Boolean = false, ) } diff --git a/app/src/main/java/com/duckduckgo/app/browser/tabswitcher/ExperimentalTabSwitcherButton.kt b/app/src/main/java/com/duckduckgo/app/browser/tabswitcher/ExperimentalTabSwitcherButton.kt index b6174fe827cf..cc9c4cfa922b 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/tabswitcher/ExperimentalTabSwitcherButton.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/tabswitcher/ExperimentalTabSwitcherButton.kt @@ -19,7 +19,10 @@ package com.duckduckgo.app.browser.tabswitcher import android.content.Context import android.util.AttributeSet import com.duckduckgo.app.browser.databinding.ViewExperimentalTabSwitcherButtonBinding +import com.duckduckgo.common.ui.view.gone +import com.duckduckgo.common.ui.view.show import com.duckduckgo.common.ui.viewbinding.viewBinding +import com.duckduckgo.mobile.android.R as CommonR class ExperimentalTabSwitcherButton @JvmOverloads constructor( context: Context, @@ -29,10 +32,30 @@ class ExperimentalTabSwitcherButton @JvmOverloads constructor( private val binding: ViewExperimentalTabSwitcherButtonBinding by viewBinding() + override var hasUnread: Boolean = false + set(value) { + if (field != value) { + if (value) { + binding.tabsImageView.setImageResource(CommonR.drawable.ic_tab_24_highlighted) + } else { + binding.tabsImageView.setImageResource(CommonR.drawable.ic_tab_24) + } + } + field = value + } + override var count = 0 set(value) { + if (field != value) { + if (value < 100) { + binding.tabCount.text = "$value" + binding.tabCount.show() + binding.tabCountInfinite.gone() + } else { + binding.tabCount.gone() + binding.tabCountInfinite.show() + } + } field = value - val text = if (count < 100) "$count" else "~" - binding.tabCount.text = text } } diff --git a/app/src/main/res/layout/view_browser_navigation_bar.xml b/app/src/main/res/layout/view_browser_navigation_bar.xml index 7f78b094eeab..d112fdb8d29b 100644 --- a/app/src/main/res/layout/view_browser_navigation_bar.xml +++ b/app/src/main/res/layout/view_browser_navigation_bar.xml @@ -118,21 +118,10 @@ android:layout_height="match_parent" android:layout_weight="1" /> - - - - + android:layout_height="@dimen/bottomNavIconContainer" /> - + android:id="@+id/tabsButton" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/selectable_item_experimental_background" + tools:layout_height="@dimen/bottomNavIconContainer" + tools:layout_width="@dimen/bottomNavIconContainer"> + + + - + + + android:text="∞" + android:textColor="?attr/daxColorPrimaryIcon" + android:textSize="11dp" + android:textStyle="bold" + android:visibility="gone" + tools:ignore="DeprecatedWidgetInXml,HardcodedText,SpUsage" /> - \ No newline at end of file + \ No newline at end of file diff --git a/common/common-ui/src/main/res/drawable/ic_tab_24_highlighted.xml b/common/common-ui/src/main/res/drawable/ic_tab_24_highlighted.xml new file mode 100644 index 000000000000..8fb7d11c560f --- /dev/null +++ b/common/common-ui/src/main/res/drawable/ic_tab_24_highlighted.xml @@ -0,0 +1,16 @@ + + + + + + From 6142adc0361b68472abc0975eb525e2f3970e840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Mon, 5 May 2025 13:40:10 +0200 Subject: [PATCH 2/2] update count's text size to 9dp --- .../main/res/layout/view_experimental_tab_switcher_button.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/view_experimental_tab_switcher_button.xml b/app/src/main/res/layout/view_experimental_tab_switcher_button.xml index 56a7a2663c2e..d04bff7a3d58 100644 --- a/app/src/main/res/layout/view_experimental_tab_switcher_button.xml +++ b/app/src/main/res/layout/view_experimental_tab_switcher_button.xml @@ -49,7 +49,7 @@ android:fontFamily="sans-serif-condensed" android:gravity="center" android:textColor="?attr/daxColorPrimaryIcon" - android:textSize="11dp" + android:textSize="9dp" android:textStyle="bold" tools:ignore="DeprecatedWidgetInXml,SpUsage" tools:text="99" />