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