From 8726ee8130eaf86f935d3e17042b4aeee1add0b7 Mon Sep 17 00:00:00 2001 From: 0nko Date: Thu, 6 Nov 2025 20:55:38 +0100 Subject: [PATCH 1/8] Apply the touch ripple only to the pictograms --- .../main/res/layout/activity_appearance.xml | 37 ++++++++++--------- .../main/res/values/styles-saved-sites.xml | 4 ++ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/app/src/main/res/layout/activity_appearance.xml b/app/src/main/res/layout/activity_appearance.xml index d394dacb187d..b717cdb17f3e 100644 --- a/app/src/main/res/layout/activity_appearance.xml +++ b/app/src/main/res/layout/activity_appearance.xml @@ -123,21 +123,22 @@ android:gravity="center" android:orientation="vertical" android:padding="@dimen/keyline_2" - android:background="@drawable/selectable_rounded_ripple" - app:layout_constraintWidth_max="160dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottomOmnibarContainer" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintWidth_max="160dp"> - + android:foreground="@drawable/selectable_rounded_ripple" + android:scaleType="fitCenter" + android:src="@drawable/mobile_toolbar_top_selected_light" + app:shapeAppearanceOverlay="@style/Widget.DuckDuckGo.OmnibarTypePictogram" /> - + android:foreground="@drawable/selectable_rounded_ripple" + android:scaleType="fitCenter" + android:src="@drawable/mobile_toolbar_bottom_unselected_light" + app:shapeAppearanceOverlay="@style/Widget.DuckDuckGo.OmnibarTypePictogram" /> - + android:foreground="@drawable/selectable_rounded_ripple" + android:scaleType="fitCenter" + android:src="@drawable/mobile_toolbar_split_unselected_light" + app:shapeAppearanceOverlay="@style/Widget.DuckDuckGo.OmnibarTypePictogram" /> rounded @dimen/smallShapeCornerRadius + \ No newline at end of file From a143adddc657ec365bc8fdad425b3a41354a1225 Mon Sep 17 00:00:00 2001 From: 0nko Date: Thu, 6 Nov 2025 22:04:23 +0100 Subject: [PATCH 2/8] Enable the feature for internal users by default --- .../app/pixels/remoteconfig/AndroidBrowserConfigFeature.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/duckduckgo/app/pixels/remoteconfig/AndroidBrowserConfigFeature.kt b/app/src/main/java/com/duckduckgo/app/pixels/remoteconfig/AndroidBrowserConfigFeature.kt index c42e4503952c..441e66225000 100644 --- a/app/src/main/java/com/duckduckgo/app/pixels/remoteconfig/AndroidBrowserConfigFeature.kt +++ b/app/src/main/java/com/duckduckgo/app/pixels/remoteconfig/AndroidBrowserConfigFeature.kt @@ -193,6 +193,7 @@ interface AndroidBrowserConfigFeature { * If the remote feature is not present defaults to `false` */ @Toggle.DefaultValue(DefaultFeatureValue.FALSE) + @Toggle.InternalAlwaysEnabled fun splitOmnibar(): Toggle /** From 284517ff36d27754854c97c7f375ab6baae9a941 Mon Sep 17 00:00:00 2001 From: 0nko Date: Thu, 6 Nov 2025 22:49:05 +0100 Subject: [PATCH 3/8] Simplify the bottom bar ViewModel and add the missing unit tests --- .../include_tab_switcher_toolbar_top.xml | 5 -- .../BrowserNavigationBarViewIntegration.kt | 3 +- .../bar/view/BrowserNavigationBarView.kt | 8 +-- .../bar/view/BrowserNavigationBarViewModel.kt | 22 ++++--- .../view/BrowserNavigationBarViewModelTest.kt | 65 +++++++++++++++++++ 5 files changed, 82 insertions(+), 21 deletions(-) diff --git a/android-design-system/design-system/src/main/res/layout/include_tab_switcher_toolbar_top.xml b/android-design-system/design-system/src/main/res/layout/include_tab_switcher_toolbar_top.xml index d292bf01e56d..ddf4645da3b1 100644 --- a/android-design-system/design-system/src/main/res/layout/include_tab_switcher_toolbar_top.xml +++ b/android-design-system/design-system/src/main/res/layout/include_tab_switcher_toolbar_top.xml @@ -34,9 +34,4 @@ app:buttonGravity="center_vertical" app:popupTheme="@style/Widget.DuckDuckGo.PopUpOverflowMenu" /> - - \ No newline at end of file diff --git a/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/BrowserNavigationBarViewIntegration.kt b/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/BrowserNavigationBarViewIntegration.kt index 306f50380954..d719132d2b0c 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/BrowserNavigationBarViewIntegration.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/navigation/bar/BrowserNavigationBarViewIntegration.kt @@ -21,6 +21,7 @@ import com.duckduckgo.app.browser.databinding.FragmentBrowserTabBinding import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarObserver import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode.Browser +import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode.CustomTab import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode.NewTab import com.duckduckgo.app.browser.omnibar.Omnibar import com.duckduckgo.common.ui.view.gone @@ -61,7 +62,7 @@ class BrowserNavigationBarViewIntegration( } fun configureCustomTab() { - navigationBarView.setCustomTab(isCustomTab = true) + navigationBarView.setViewMode(CustomTab) } fun configureBrowserViewMode() { 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 d6a6ccd448f3..6e156c97ac3c 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 @@ -110,12 +110,6 @@ class BrowserNavigationBarView @JvmOverloads constructor( var browserNavigationBarObserver: BrowserNavigationBarObserver? = null - fun setCustomTab(isCustomTab: Boolean) { - doOnAttach { - viewModel.setCustomTab(isCustomTab) - } - } - fun setViewMode(viewMode: ViewMode) { doOnAttach { viewModel.setViewMode(viewMode) @@ -196,6 +190,7 @@ class BrowserNavigationBarView @JvmOverloads constructor( binding.tabsButton.count = viewState.tabsCount binding.tabsButton.hasUnread = viewState.hasUnreadTabs binding.browserMenuHighlight?.isVisible = viewState.showBrowserMenuHighlight + binding.shadowView.isVisible = viewState.showShadow renderFireButtonPulseAnimation(enabled = viewState.fireButtonHighlighted) } @@ -225,6 +220,7 @@ class BrowserNavigationBarView @JvmOverloads constructor( } enum class ViewMode { + CustomTab, NewTab, Browser, TabManager, 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 afafb56ce181..090f4fa9fe1e 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 @@ -24,7 +24,9 @@ import com.duckduckgo.anvil.annotations.ContributesViewModel import com.duckduckgo.app.browser.defaultbrowsing.prompts.AdditionalDefaultBrowserPrompts import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode.Browser +import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode.CustomTab import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode.NewTab +import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarView.ViewMode.TabManager import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarViewModel.Command.NotifyAutofillButtonClicked import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarViewModel.Command.NotifyBookmarksButtonClicked import com.duckduckgo.app.browser.navigation.bar.view.BrowserNavigationBarViewModel.Command.NotifyFireButtonClicked @@ -61,16 +63,13 @@ class BrowserNavigationBarViewModel @Inject constructor( private val _commands = Channel(capacity = Channel.CONFLATED) val commands: Flow = _commands.receiveAsFlow() - private val isCustomTab = MutableStateFlow(false) private val _viewState = MutableStateFlow(ViewState()) val viewState = combine( _viewState.asStateFlow(), - isCustomTab, tabRepository.flowTabs, additionalDefaultBrowserPrompts.highlightPopupMenu, - ) { state, isCustomTab, tabs, highlightOverflowMenu -> + ) { state, tabs, highlightOverflowMenu -> state.copy( - isVisible = !isCustomTab, tabsCount = tabs.size, hasUnreadTabs = tabs.firstOrNull { !it.viewed } != null, showBrowserMenuHighlight = highlightOverflowMenu, @@ -115,10 +114,6 @@ class BrowserNavigationBarViewModel @Inject constructor( _commands.trySend(NotifyBookmarksButtonClicked) } - fun setCustomTab(customTab: Boolean) { - isCustomTab.update { customTab } - } - fun setViewMode(viewMode: ViewMode) { when (viewMode) { NewTab -> { @@ -139,13 +134,21 @@ class BrowserNavigationBarViewModel @Inject constructor( } } - ViewMode.TabManager -> { + TabManager -> { _viewState.update { it.copy( newTabButtonVisible = true, autofillButtonVisible = false, tabsButtonVisible = false, bookmarksButtonVisible = false, + showShadow = false, + ) + } + } + CustomTab -> { + _viewState.update { + it.copy( + isVisible = false, ) } } @@ -181,5 +184,6 @@ class BrowserNavigationBarViewModel @Inject constructor( val tabsCount: Int = 0, val hasUnreadTabs: Boolean = false, val showBrowserMenuHighlight: Boolean = false, + val showShadow: Boolean = true, ) } diff --git a/app/src/test/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModelTest.kt b/app/src/test/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModelTest.kt index 25eea6776d8a..d223ac34be14 100644 --- a/app/src/test/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModelTest.kt +++ b/app/src/test/java/com/duckduckgo/app/browser/navigation/bar/view/BrowserNavigationBarViewModelTest.kt @@ -156,4 +156,69 @@ class BrowserNavigationBarViewModelTest { cancelAndIgnoreRemainingEvents() } } + + @Test + fun `when setViewMode NewTab then viewState reflects NewTab configuration`() = runTest { + testee.viewState.test { + val initial = awaitItem() + // sanity check defaults + Assert.assertTrue(initial.newTabButtonVisible) + Assert.assertFalse(initial.autofillButtonVisible) + + testee.setViewMode(BrowserNavigationBarView.ViewMode.NewTab) + + val updated = awaitItem() + Assert.assertFalse(updated.newTabButtonVisible) + Assert.assertTrue(updated.autofillButtonVisible) + // unchanged flags + Assert.assertTrue(updated.tabsButtonVisible) + Assert.assertTrue(updated.bookmarksButtonVisible) + Assert.assertTrue(updated.showShadow) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `when setViewMode TabManager then viewState reflects TabManager configuration`() = runTest { + testee.viewState.test { + awaitItem() // initial + testee.setViewMode(BrowserNavigationBarView.ViewMode.TabManager) + val updated = awaitItem() + Assert.assertTrue(updated.newTabButtonVisible) + Assert.assertFalse(updated.autofillButtonVisible) + Assert.assertFalse(updated.tabsButtonVisible) + Assert.assertFalse(updated.bookmarksButtonVisible) + Assert.assertFalse(updated.showShadow) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `when switching NewTab then Browser then viewState reflects Browser configuration`() = runTest { + testee.viewState.test { + awaitItem() // initial + testee.setViewMode(BrowserNavigationBarView.ViewMode.NewTab) + awaitItem() // NewTab state + testee.setViewMode(BrowserNavigationBarView.ViewMode.Browser) + val browserState = awaitItem() + Assert.assertTrue(browserState.newTabButtonVisible) + Assert.assertFalse(browserState.autofillButtonVisible) + Assert.assertTrue(browserState.tabsButtonVisible) + Assert.assertTrue(browserState.bookmarksButtonVisible) + Assert.assertTrue(browserState.showShadow) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `when setViewMode CustomTab then navigation bar becomes hidden`() = runTest { + testee.viewState.test { + val initial = awaitItem() + Assert.assertTrue(initial.isVisible) + + testee.setViewMode(BrowserNavigationBarView.ViewMode.CustomTab) + val hidden = awaitItem() + Assert.assertFalse(hidden.isVisible) + } + } } From 5140e6cc5b61ca4fa0d890579a5f296193e77128 Mon Sep 17 00:00:00 2001 From: 0nko Date: Fri, 7 Nov 2025 10:48:57 +0100 Subject: [PATCH 4/8] Revert "Only show the keyboard when opening a tab for the first time" This reverts commit cca06974179b5fa2f242718aac5ef6e9f7bc134e. --- .../main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt index 45a28c322a6b..92fe472364ef 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt @@ -573,7 +573,6 @@ class BrowserTabViewModel @Inject constructor( @VisibleForTesting internal val autoCompleteStateFlow = MutableStateFlow("") private val fireproofWebsiteState: LiveData> = fireproofWebsiteRepository.getFireproofWebsites() - private var alreadyShownKeyboard = false @ExperimentalCoroutinesApi @FlowPreview From 78e40d44b742896537b61853007e594208a967df Mon Sep 17 00:00:00 2001 From: 0nko Date: Fri, 7 Nov 2025 15:43:00 +0100 Subject: [PATCH 5/8] Reduce the height of the omnibar --- .../src/main/res/values/design-system-dimensions.xml | 4 ++-- .../java/com/duckduckgo/app/browser/BrowserTabViewModel.kt | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/android-design-system/design-system/src/main/res/values/design-system-dimensions.xml b/android-design-system/design-system/src/main/res/values/design-system-dimensions.xml index 1298c7add800..73b49e00336d 100644 --- a/android-design-system/design-system/src/main/res/values/design-system-dimensions.xml +++ b/android-design-system/design-system/src/main/res/values/design-system-dimensions.xml @@ -46,8 +46,8 @@ 60dp - 12dp - 8dp + 8dp + 4dp 18dp 24dp diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt index 92fe472364ef..96de0b8ec038 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt @@ -602,6 +602,7 @@ class BrowserTabViewModel @Inject constructor( private var isLinkOpenedInNewTab = false private var allowlistRefreshTriggerJob: Job? = null private var isCustomTabScreen: Boolean = false + private var alreadyShownKeyboard: Boolean = false private val fireproofWebsitesObserver = Observer> { From 8c95cc4e4df24422f0b135ea19b97ed62ba3e227 Mon Sep 17 00:00:00 2001 From: 0nko Date: Fri, 7 Nov 2025 20:53:32 +0100 Subject: [PATCH 6/8] Remove landscape version of the bottom bar layout --- .../bar/view/BrowserNavigationBarView.kt | 2 +- .../view_browser_navigation_bar.xml | 184 ------------------ .../view_browser_navigation_bar_mockup.xml | 158 --------------- 3 files changed, 1 insertion(+), 343 deletions(-) delete mode 100644 app/src/main/res/layout-w600dp/view_browser_navigation_bar.xml delete mode 100644 app/src/main/res/layout-w600dp/view_browser_navigation_bar_mockup.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 6e156c97ac3c..6d02ab487185 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 @@ -189,7 +189,7 @@ class BrowserNavigationBarView @JvmOverloads constructor( binding.tabsButton.isVisible = viewState.tabsButtonVisible binding.tabsButton.count = viewState.tabsCount binding.tabsButton.hasUnread = viewState.hasUnreadTabs - binding.browserMenuHighlight?.isVisible = viewState.showBrowserMenuHighlight + binding.browserMenuHighlight.isVisible = viewState.showBrowserMenuHighlight binding.shadowView.isVisible = viewState.showShadow renderFireButtonPulseAnimation(enabled = viewState.fireButtonHighlighted) diff --git a/app/src/main/res/layout-w600dp/view_browser_navigation_bar.xml b/app/src/main/res/layout-w600dp/view_browser_navigation_bar.xml deleted file mode 100644 index 728887f3a06f..000000000000 --- a/app/src/main/res/layout-w600dp/view_browser_navigation_bar.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-w600dp/view_browser_navigation_bar_mockup.xml b/app/src/main/res/layout-w600dp/view_browser_navigation_bar_mockup.xml deleted file mode 100644 index 33a0b6bee3ca..000000000000 --- a/app/src/main/res/layout-w600dp/view_browser_navigation_bar_mockup.xml +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 33e2e2aff768237d58e4274d5cf16fe8ede94acc Mon Sep 17 00:00:00 2001 From: 0nko Date: Fri, 7 Nov 2025 21:06:18 +0100 Subject: [PATCH 7/8] Hide or show the navigation bar when activity is created --- .../app/tabs/ui/TabSwitcherActivity.kt | 33 ++++++++++++------- .../main/res/layout/activity_tab_switcher.xml | 1 + 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherActivity.kt b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherActivity.kt index ca23378d3d2d..bbbb34658884 100644 --- a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherActivity.kt +++ b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherActivity.kt @@ -39,6 +39,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.OnScrollListener import com.duckduckgo.anvil.annotations.InjectWith import com.duckduckgo.app.browser.R +import com.duckduckgo.app.browser.api.OmnibarRepository import com.duckduckgo.app.browser.databinding.ActivityTabSwitcherBinding import com.duckduckgo.app.browser.databinding.PopupTabsMenuBinding import com.duckduckgo.app.browser.favicon.FaviconManager @@ -165,6 +166,9 @@ class TabSwitcherActivity : @Inject lateinit var onboardingExperimentFireAnimationHelper: OnboardingExperimentFireAnimationHelper + @Inject + lateinit var omnibarRepository: OmnibarRepository + private val viewModel: TabSwitcherViewModel by bindViewModel() private val tabsAdapter: TabSwitcherAdapter by lazy { @@ -253,21 +257,26 @@ class TabSwitcherActivity : } private fun configureNavigationBar() { - binding.navigationBar.browserNavigationBarObserver = - object : BrowserNavigationBarObserver { - override fun onMenuButtonClicked() { - showPopupMenu(binding.navigationBar.popupMenuAnchor.id) - } + if (omnibarRepository.omnibarType == OmnibarType.SPLIT) { + binding.navigationBar.browserNavigationBarObserver = + object : BrowserNavigationBarObserver { + override fun onMenuButtonClicked() { + showPopupMenu(binding.navigationBar.popupMenuAnchor.id) + } - override fun onNewTabButtonClicked() { - viewModel.onNewTabRequested() - } + override fun onNewTabButtonClicked() { + viewModel.onNewTabRequested() + } - override fun onFireButtonClicked() { - viewModel.onFireButtonTapped() + override fun onFireButtonClicked() { + viewModel.onFireButtonTapped() + } } - } - binding.navigationBar.setViewMode(BrowserNavigationBarView.ViewMode.TabManager) + binding.navigationBar.setViewMode(BrowserNavigationBarView.ViewMode.TabManager) + binding.navigationBar.show() + } else { + binding.navigationBar.gone() + } } override fun onSaveInstanceState(outState: Bundle) { diff --git a/app/src/main/res/layout/activity_tab_switcher.xml b/app/src/main/res/layout/activity_tab_switcher.xml index a536acbb8697..4bc91562dea6 100644 --- a/app/src/main/res/layout/activity_tab_switcher.xml +++ b/app/src/main/res/layout/activity_tab_switcher.xml @@ -72,6 +72,7 @@ From 43a0ef768a3aded4d56314b6b135393ede2e29dd Mon Sep 17 00:00:00 2001 From: 0nko Date: Fri, 7 Nov 2025 22:58:41 +0100 Subject: [PATCH 8/8] Simplify pictogram ripple effect --- .../main/res/layout/activity_appearance.xml | 27 +++++++++---------- .../main/res/values/styles-saved-sites.xml | 4 --- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/layout/activity_appearance.xml b/app/src/main/res/layout/activity_appearance.xml index b717cdb17f3e..21df8722d5ca 100644 --- a/app/src/main/res/layout/activity_appearance.xml +++ b/app/src/main/res/layout/activity_appearance.xml @@ -130,15 +130,14 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_max="160dp"> - + android:foreground="@drawable/selectable_rounded_ripple" + android:contentDescription="@string/settingsAddressBarPositionTop" + android:src="@drawable/mobile_toolbar_top_selected_light" /> - + android:foreground="@drawable/selectable_rounded_ripple" + android:contentDescription="@string/settingsAddressBarPositionBottom" + android:src="@drawable/mobile_toolbar_bottom_unselected_light" /> - + android:foreground="@drawable/selectable_rounded_ripple" + android:contentDescription="@string/settingsAddressBarPositionSplit" + android:src="@drawable/mobile_toolbar_split_unselected_light" /> rounded @dimen/smallShapeCornerRadius - \ No newline at end of file