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 @@ + + + + + +