From f7913d80cee10460c6a24f63d8c5a55fd1ce8926 Mon Sep 17 00:00:00 2001 From: 0nko Date: Thu, 10 Jul 2025 21:52:45 +0200 Subject: [PATCH 1/4] Remove the FABs From 64a1e0315367f14ed92d80286c047ba34b606f1f Mon Sep 17 00:00:00 2001 From: 0nko Date: Mon, 21 Jul 2025 12:45:40 +0200 Subject: [PATCH 2/4] Hide the keyboard when launching a tab switcher --- .../main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index 24605a09f5a2..ab8b2248f320 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -1387,6 +1387,7 @@ class BrowserTabFragment : val activity = activity ?: return val intent = TabSwitcherActivity.intent(activity, tabId) tabSwitcherActivityResult.launch(intent) + hideKeyboard() } override fun onResume() { From d24f6262ac2068a842c0e2815bfefd387b669757 Mon Sep 17 00:00:00 2001 From: 0nko Date: Mon, 21 Jul 2025 15:18:34 +0200 Subject: [PATCH 3/4] Hide the keyboard when launching duck.ai --- .../main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index ab8b2248f320..24605a09f5a2 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -1387,7 +1387,6 @@ class BrowserTabFragment : val activity = activity ?: return val intent = TabSwitcherActivity.intent(activity, tabId) tabSwitcherActivityResult.launch(intent) - hideKeyboard() } override fun onResume() { From 40cb62876de70e1bda418bf87ef1b43624c0fc90 Mon Sep 17 00:00:00 2001 From: 0nko Date: Mon, 14 Jul 2025 11:31:54 +0200 Subject: [PATCH 4/4] Add new layout type menu items --- .../app/tabs/ui/TabSwitcherActivity.kt | 2 ++ .../app/tabs/ui/TabSwitcherMenuExt.kt | 28 +++++++++++++++++ .../app/tabs/ui/TabSwitcherViewModel.kt | 30 ++++++++++++------- app/src/main/res/layout/popup_tabs_menu.xml | 14 +++++++++ app/src/main/res/values/strings.xml | 4 +-- 5 files changed, 65 insertions(+), 13 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 ac35e8cbb69b..0f79550fdeca 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 @@ -668,6 +668,8 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine private fun initMenuClickListeners() { popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.newTabMenuItem)) { onNewTabRequested(fromOverflowMenu = true) } + popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.gridLayoutMenuItem)) { viewModel.onGridLayoutSelected() } + popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.listLayoutMenuItem)) { viewModel.onListLayoutSelected() } popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.selectAllMenuItem)) { viewModel.onSelectAllTabs() } popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.deselectAllMenuItem)) { viewModel.onDeselectAllTabs() } popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.shareSelectedLinksMenuItem)) { viewModel.onShareSelectedTabs() } diff --git a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherMenuExt.kt b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherMenuExt.kt index b3844fe8075e..75b7f80ea268 100644 --- a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherMenuExt.kt +++ b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherMenuExt.kt @@ -66,6 +66,34 @@ fun Menu.createDynamicInterface( setPrimaryText(resources.getQuantityString(R.plurals.closeTabsMenuItem, numSelectedTabs, numSelectedTabs)) } + popupMenu.gridLayoutMenuItem.apply { + when (dynamicMenu.layoutMenuMode) { + GRID -> { + setTrailingIconVisibility(false) + isVisible = true + } + LIST -> { + setTrailingIconVisibility(true) + isVisible = true + } + HIDDEN -> isVisible = false + } + } + + popupMenu.listLayoutMenuItem.apply { + when (dynamicMenu.layoutMenuMode) { + GRID -> { + setTrailingIconVisibility(true) + isVisible = true + } + LIST -> { + setTrailingIconVisibility(false) + isVisible = true + } + HIDDEN -> isVisible = false + } + } + mainFab.apply { if (dynamicMenu.isMainFabVisible) { when (dynamicMenu.mainFabType) { diff --git a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherViewModel.kt b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherViewModel.kt index 73c7cfe1b49c..05cc29bf23ae 100644 --- a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherViewModel.kt @@ -530,19 +530,27 @@ class TabSwitcherViewModel @Inject constructor( } fun onLayoutTypeToggled() { - viewModelScope.launch(dispatcherProvider.io()) { - when (layoutType.value) { - GRID -> { - pixel.fire(TAB_MANAGER_LIST_VIEW_BUTTON_CLICKED) - tabRepository.setTabLayoutType(LIST) - } + when (layoutType.value) { + GRID -> onListLayoutSelected() + LIST -> onGridLayoutSelected() + else -> Unit + } + } - LIST -> { - pixel.fire(TAB_MANAGER_GRID_VIEW_BUTTON_CLICKED) - tabRepository.setTabLayoutType(GRID) - } + fun onListLayoutSelected() { + viewModelScope.launch(dispatcherProvider.io()) { + if (layoutType.value != LIST) { + pixel.fire(TAB_MANAGER_LIST_VIEW_BUTTON_CLICKED) + tabRepository.setTabLayoutType(LIST) + } + } + } - else -> Unit + fun onGridLayoutSelected() { + viewModelScope.launch(dispatcherProvider.io()) { + if (layoutType.value != GRID) { + pixel.fire(TAB_MANAGER_GRID_VIEW_BUTTON_CLICKED) + tabRepository.setTabLayoutType(GRID) } } } diff --git a/app/src/main/res/layout/popup_tabs_menu.xml b/app/src/main/res/layout/popup_tabs_menu.xml index 3f47f8d4553a..ac48b178b2a5 100644 --- a/app/src/main/res/layout/popup_tabs_menu.xml +++ b/app/src/main/res/layout/popup_tabs_menu.xml @@ -27,6 +27,20 @@ android:layout_height="wrap_content" app:primaryText="@string/newTabMenuItem" /> + + + + Tab closed Undo Downloads - List view - Grid view + List View + Grid View <b>%1$s trackers blocked </b> in the last 7 days