Skip to content

Commit c59d4de

Browse files
committed
Remove the feature flag
1 parent 70f5f06 commit c59d4de

File tree

4 files changed

+37
-152
lines changed

4 files changed

+37
-152
lines changed

app/src/main/java/com/duckduckgo/app/tabs/TabFeatureFlags.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,4 @@ interface TabManagerFeatureFlags {
3232

3333
@Toggle.DefaultValue(DefaultFeatureValue.TRUE)
3434
fun tabInsertionFixes(): Toggle
35-
36-
@Toggle.InternalAlwaysEnabled
37-
@Toggle.DefaultValue(DefaultFeatureValue.FALSE)
38-
fun newToolbarFeature(): Toggle
3935
}

app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherActivity.kt

Lines changed: 31 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import android.widget.FrameLayout
2828
import androidx.activity.OnBackPressedCallback
2929
import androidx.appcompat.app.AppCompatDelegate.FEATURE_SUPPORT_ACTION_BAR
3030
import androidx.appcompat.widget.Toolbar
31-
import androidx.coordinatorlayout.widget.CoordinatorLayout
32-
import androidx.core.view.updateLayoutParams
3331
import androidx.lifecycle.Lifecycle
3432
import androidx.lifecycle.flowWithLifecycle
3533
import androidx.lifecycle.lifecycleScope
@@ -89,8 +87,6 @@ import com.duckduckgo.common.ui.view.dialog.TextAlertDialogBuilder
8987
import com.duckduckgo.common.ui.view.gone
9088
import com.duckduckgo.common.ui.view.hide
9189
import com.duckduckgo.common.ui.view.show
92-
import com.duckduckgo.common.ui.view.toDp
93-
import com.duckduckgo.common.ui.view.toPx
9490
import com.duckduckgo.common.ui.viewbinding.viewBinding
9591
import com.duckduckgo.common.utils.DispatcherProvider
9692
import com.duckduckgo.di.scopes.ActivityScope
@@ -211,18 +207,26 @@ class TabSwitcherActivity :
211207

212208
private val binding: ActivityTabSwitcherBinding by viewBinding()
213209
private val popupMenu by lazy {
214-
if (settingsDataStore.omnibarType == OmnibarType.SINGLE_BOTTOM && viewModel.isNewToolbarEnabled) {
215-
PopupMenu(layoutInflater, R.layout.popup_tabs_menu_bottom)
216-
} else {
210+
if (settingsDataStore.omnibarType == OmnibarType.SINGLE_TOP) {
217211
PopupMenu(layoutInflater, R.layout.popup_tabs_menu)
212+
} else {
213+
PopupMenu(layoutInflater, R.layout.popup_tabs_menu_bottom)
218214
}
219215
}
220216

221217
private val snackbarAnchorView by lazy {
222-
if (settingsDataStore.omnibarType == OmnibarType.SINGLE_BOTTOM) {
223-
toolbar
224-
} else {
225-
null
218+
when (settingsDataStore.omnibarType) {
219+
OmnibarType.SINGLE_BOTTOM -> {
220+
toolbar
221+
}
222+
223+
OmnibarType.SINGLE_TOP -> {
224+
null
225+
}
226+
OmnibarType.SPLIT -> {
227+
null
228+
// TODO: add bottom bar
229+
}
226230
}
227231
}
228232

@@ -241,28 +245,12 @@ class TabSwitcherActivity :
241245
setupToolbar(toolbar)
242246
configureRecycler()
243247

244-
if (!viewModel.isNewToolbarEnabled) {
245-
configureFabs()
246-
}
247-
248248
configureObservers()
249249
configureOnBackPressedListener()
250250

251251
initMenuClickListeners()
252252
}
253253

254-
private fun configureFabs() {
255-
binding.mainFab.apply {
256-
setOnClickListener {
257-
viewModel.onFabClicked()
258-
}
259-
}
260-
261-
binding.aiChatFab.setOnClickListener {
262-
viewModel.onDuckAIFabClicked()
263-
}
264-
}
265-
266254
override fun onSaveInstanceState(outState: Bundle) {
267255
super.onSaveInstanceState(outState)
268256

@@ -276,19 +264,18 @@ class TabSwitcherActivity :
276264
private fun configureViewReferences() {
277265
tabsRecycler = findViewById(R.id.tabsRecycler)
278266

279-
if (viewModel.isNewToolbarEnabled) {
280-
when (settingsDataStore.omnibarType) {
281-
OmnibarType.SINGLE_TOP, OmnibarType.SPLIT -> {
282-
binding.root.removeView(binding.tabSwitcherToolbarBottom.root)
283-
}
284-
OmnibarType.SINGLE_BOTTOM -> {
285-
binding.root.removeView(binding.tabSwitcherExperimentToolbarTop.root)
286-
}
267+
when (settingsDataStore.omnibarType) {
268+
OmnibarType.SINGLE_TOP -> {
269+
binding.root.removeView(binding.tabSwitcherToolbarBottom.root)
270+
// TODO: remove bottom bar
271+
}
272+
OmnibarType.SINGLE_BOTTOM -> {
273+
binding.root.removeView(binding.tabSwitcherToolbarTop.root)
274+
// TODO: remove bottom bar
275+
}
276+
OmnibarType.SPLIT -> {
277+
binding.root.removeView(binding.tabSwitcherToolbarBottom.root)
287278
}
288-
binding.root.removeView(binding.tabSwitcherToolbarTop.root)
289-
} else {
290-
binding.root.removeView(binding.tabSwitcherExperimentToolbarTop.root)
291-
binding.root.removeView(binding.tabSwitcherToolbarBottom.root)
292279
}
293280

294281
toolbar = findViewById(R.id.toolbar)
@@ -320,27 +307,7 @@ class TabSwitcherActivity :
320307

321308
tabsRecycler.setHasFixedSize(true)
322309

323-
if (viewModel.isNewToolbarEnabled) {
324-
handleFabStateUpdates()
325-
}
326-
327310
handleSelectionModeCancellation()
328-
329-
if (viewModel.isNewToolbarEnabled) {
330-
// Set the layout params for the tabs recycler view based on omnibar position
331-
tabsContainer.updateLayoutParams {
332-
this as CoordinatorLayout.LayoutParams
333-
this.behavior = null
334-
when (settingsDataStore.omnibarType) {
335-
OmnibarType.SINGLE_TOP, OmnibarType.SPLIT -> {
336-
this.topMargin = TABS_CONTENT_PADDING_DP.toPx()
337-
}
338-
OmnibarType.SINGLE_BOTTOM -> {
339-
this.bottomMargin = TABS_CONTENT_PADDING_DP.toPx()
340-
}
341-
}
342-
}
343-
}
344311
}
345312

346313
private fun handleSelectionModeCancellation() {
@@ -379,25 +346,6 @@ class TabSwitcherActivity :
379346
)
380347
}
381348

382-
private fun handleFabStateUpdates() {
383-
tabsRecycler.addOnScrollListener(
384-
object : OnScrollListener() {
385-
override fun onScrolled(
386-
recyclerView: RecyclerView,
387-
dx: Int,
388-
dy: Int,
389-
) {
390-
super.onScrolled(recyclerView, dx, dy)
391-
if (dy.toDp(recyclerView.context) > FAB_SCROLL_THRESHOLD) {
392-
binding.mainFab.shrink()
393-
} else if (dy.toDp(recyclerView.context) < -FAB_SCROLL_THRESHOLD) {
394-
binding.mainFab.extend()
395-
}
396-
}
397-
},
398-
)
399-
}
400-
401349
private fun updateToolbarTitle(
402350
mode: Mode,
403351
tabCount: Int,
@@ -615,27 +563,23 @@ class TabSwitcherActivity :
615563
}
616564

617565
override fun onCreateOptionsMenu(menu: Menu): Boolean {
618-
menuInflater.inflate(R.menu.menu_tab_switcher_activity_with_selection, menu)
566+
menuInflater.inflate(R.menu.menu_tab_switcher_activity, menu)
619567

620568
val popupBinding = PopupTabsMenuBinding.bind(popupMenu.contentView)
621569
val viewState = viewModel.selectionViewState.value
622570

623571
val numSelectedTabs = viewModel.selectionViewState.value.numSelectedTabs
624572
menu.createDynamicInterface(
625-
numSelectedTabs,
626-
popupBinding,
627-
binding.mainFab,
628-
binding.aiChatFab,
629-
tabsRecycler,
630-
toolbar,
631-
viewState.dynamicInterface,
573+
numSelectedTabs = numSelectedTabs,
574+
popupMenu = popupBinding,
575+
toolbar = toolbar,
576+
dynamicMenu = viewState.dynamicInterface,
632577
)
633578

634579
return true
635580
}
636581

637582
private fun initMenuClickListeners() {
638-
popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.newTabMenuItem)) { onNewTabRequested(fromOverflowMenu = true) }
639583
popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.gridLayoutMenuItem)) { viewModel.onGridLayoutSelected() }
640584
popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.listLayoutMenuItem)) { viewModel.onListLayoutSelected() }
641585
popupMenu.onMenuItemClicked(popupMenu.contentView.findViewById(R.id.selectAllMenuItem)) { viewModel.onSelectAllTabs() }
@@ -654,7 +598,6 @@ class TabSwitcherActivity :
654598

655599
override fun onOptionsItemSelected(item: MenuItem): Boolean {
656600
when (item.itemId) {
657-
R.id.layoutTypeToolbarButton -> onLayoutTypeToggled()
658601
R.id.fireToolbarButton -> onFireButtonClicked()
659602
R.id.popupMenuToolbarButton -> showPopupMenu(item.itemId)
660603
R.id.newTabToolbarButton -> onNewTabRequested(fromOverflowMenu = false)
@@ -702,10 +645,6 @@ class TabSwitcherActivity :
702645
dialog.show()
703646
}
704647

705-
private fun onLayoutTypeToggled() {
706-
viewModel.onLayoutTypeToggled()
707-
}
708-
709648
override fun onNewTabRequested(fromOverflowMenu: Boolean) {
710649
// clear observers early to stop view updates
711650
removeObservers()

app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherViewModel.kt

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.ShareLink
4646
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.ShareLinks
4747
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.ShowAnimatedTileDismissalDialog
4848
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.ShowUndoBookmarkMessage
49-
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.SelectionViewState.FabType
5049
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.SelectionViewState.Mode
5150
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.SelectionViewState.Mode.Normal
5251
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.SelectionViewState.Mode.Selection
@@ -117,11 +116,7 @@ class TabSwitcherViewModel @Inject constructor(
117116

118117
val tabSwitcherItemsLiveData: LiveData<List<TabSwitcherItem>> = tabSwitcherItemsFlow.asLiveData()
119118

120-
val isNewToolbarEnabled: Boolean by lazy {
121-
tabManagerFeatureFlags.newToolbarFeature().isEnabled()
122-
}
123-
124-
private val _selectionViewState = MutableStateFlow(SelectionViewState(isNewToolbarEnabled = isNewToolbarEnabled))
119+
private val _selectionViewState = MutableStateFlow(SelectionViewState())
125120
val selectionViewState = combine(
126121
_selectionViewState,
127122
tabSwitcherItemsFlow,
@@ -133,7 +128,7 @@ class TabSwitcherViewModel @Inject constructor(
133128
layoutType = tabSwitcherData.layoutType,
134129
isDuckAIButtonVisible = showDuckAiButton,
135130
)
136-
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), SelectionViewState(isNewToolbarEnabled = isNewToolbarEnabled))
131+
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), SelectionViewState())
137132

138133
val layoutType = tabRepository.tabSwitcherData
139134
.map { it.layoutType }
@@ -525,13 +520,6 @@ class TabSwitcherViewModel @Inject constructor(
525520
}
526521
}
527522

528-
fun onFabClicked() {
529-
when (selectionViewState.value.dynamicInterface.mainFabType) {
530-
FabType.NEW_TAB -> onNewTabRequested()
531-
FabType.CLOSE_TABS -> onCloseSelectedTabsRequested()
532-
}
533-
}
534-
535523
private suspend fun saveSiteBookmark(tabId: String) = withContext(dispatcherProvider.io()) {
536524
val targetTab = tabs.firstOrNull { it.id == tabId }
537525
val targetTabUrl = targetTab?.tabEntity?.url
@@ -547,15 +535,6 @@ class TabSwitcherViewModel @Inject constructor(
547535
return@withContext null
548536
}
549537

550-
fun onDuckAIFabClicked() {
551-
viewModelScope.launch {
552-
val params = duckChat.createWasUsedBeforePixelParams()
553-
pixel.fire(DuckChatPixelName.DUCK_CHAT_OPEN_TAB_SWITCHER_FAB, parameters = params)
554-
555-
duckChat.openDuckChat()
556-
}
557-
}
558-
559538
fun onDuckAIButtonClicked() {
560539
viewModelScope.launch {
561540
val params = duckChat.createWasUsedBeforePixelParams()
@@ -621,7 +600,6 @@ class TabSwitcherViewModel @Inject constructor(
621600
val mode: Mode = Normal,
622601
val layoutType: LayoutType? = null,
623602
val isDuckAIButtonVisible: Boolean = false,
624-
val isNewToolbarEnabled: Boolean = false,
625603
) {
626604
val tabs: List<Tab> = tabSwitcherItems.filterIsInstance<Tab>()
627605
val numSelectedTabs: Int = (mode as? Selection)?.selectedTabs?.size ?: 0
@@ -630,9 +608,8 @@ class TabSwitcherViewModel @Inject constructor(
630608
is Normal -> {
631609
DynamicInterface(
632610
isFireButtonVisible = true,
633-
isNewTabButtonVisible = isNewToolbarEnabled,
634-
isNewTabMenuVisible = !isNewToolbarEnabled,
635-
isDuckAIButtonVisible = isDuckAIButtonVisible && isNewToolbarEnabled,
611+
isNewTabButtonVisible = true,
612+
isDuckAIButtonVisible = isDuckAIButtonVisible,
636613
isSelectAllVisible = false,
637614
isDeselectAllVisible = false,
638615
isSelectionActionsDividerVisible = false,
@@ -644,19 +621,10 @@ class TabSwitcherViewModel @Inject constructor(
644621
isCloseOtherTabsVisible = false,
645622
isCloseAllTabsDividerVisible = true,
646623
isCloseAllTabsVisible = true,
647-
isMenuButtonEnabled = true,
648-
isMainFabVisible = !isNewToolbarEnabled,
649-
isAIFabVisible = isDuckAIButtonVisible && !isNewToolbarEnabled,
650-
mainFabType = FabType.NEW_TAB,
651624
backButtonType = BackButtonType.ARROW,
652-
layoutButtonMode = when {
653-
layoutType == GRID && !isNewToolbarEnabled -> LayoutMode.LIST
654-
layoutType == LIST && !isNewToolbarEnabled -> LayoutMode.GRID
655-
else -> LayoutMode.HIDDEN
656-
},
657625
layoutMenuMode = when {
658-
layoutType == GRID && isNewToolbarEnabled -> LayoutMode.LIST
659-
layoutType == LIST && isNewToolbarEnabled -> LayoutMode.GRID
626+
layoutType == GRID -> LayoutMode.LIST
627+
layoutType == LIST -> LayoutMode.GRID
660628
else -> LayoutMode.HIDDEN
661629
},
662630
)
@@ -671,7 +639,6 @@ class TabSwitcherViewModel @Inject constructor(
671639
DynamicInterface(
672640
isFireButtonVisible = false,
673641
isNewTabButtonVisible = false,
674-
isNewTabMenuVisible = false,
675642
isDuckAIButtonVisible = false,
676643
isSelectAllVisible = !areAllTabsSelected,
677644
isDeselectAllVisible = areAllTabsSelected,
@@ -684,12 +651,7 @@ class TabSwitcherViewModel @Inject constructor(
684651
isCloseOtherTabsVisible = isSomethingSelected && !areAllTabsSelected,
685652
isCloseAllTabsDividerVisible = isSomethingSelected,
686653
isCloseAllTabsVisible = false,
687-
isMenuButtonEnabled = true,
688-
isMainFabVisible = isSomethingSelected && !isNewToolbarEnabled,
689-
isAIFabVisible = false,
690-
mainFabType = FabType.CLOSE_TABS,
691654
backButtonType = BackButtonType.CLOSE,
692-
layoutButtonMode = LayoutMode.HIDDEN,
693655
layoutMenuMode = LayoutMode.HIDDEN,
694656
)
695657
}
@@ -698,7 +660,6 @@ class TabSwitcherViewModel @Inject constructor(
698660
data class DynamicInterface(
699661
val isFireButtonVisible: Boolean,
700662
val isNewTabButtonVisible: Boolean,
701-
val isNewTabMenuVisible: Boolean,
702663
val isDuckAIButtonVisible: Boolean,
703664
val isSelectAllVisible: Boolean,
704665
val isDeselectAllVisible: Boolean,
@@ -711,20 +672,10 @@ class TabSwitcherViewModel @Inject constructor(
711672
val isCloseOtherTabsVisible: Boolean,
712673
val isCloseAllTabsDividerVisible: Boolean,
713674
val isCloseAllTabsVisible: Boolean,
714-
val isMenuButtonEnabled: Boolean,
715-
val isMainFabVisible: Boolean,
716-
val isAIFabVisible: Boolean,
717-
val mainFabType: FabType,
718675
val backButtonType: BackButtonType,
719-
val layoutButtonMode: LayoutMode,
720676
val layoutMenuMode: LayoutMode,
721677
)
722678

723-
enum class FabType {
724-
NEW_TAB,
725-
CLOSE_TABS,
726-
}
727-
728679
enum class BackButtonType {
729680
ARROW,
730681
CLOSE,

app/src/test/java/com/duckduckgo/app/tabs/ui/TabSwitcherViewModelTest.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ class TabSwitcherViewModelTest {
151151
MockitoAnnotations.openMocks(this)
152152

153153
swipingTabsFeature.self().setRawStoredState(State(enable = false))
154-
tabManagerFeatureFlags.newToolbarFeature().setRawStoredState(State(enable = false))
155154
swipingTabsFeature.enabledForUsers().setRawStoredState(State(enable = true))
156155

157156
whenever(mockTabSwitcherPrefsDataStore.isTrackersAnimationInfoTileHidden()).thenReturn(flowOf(false))

0 commit comments

Comments
 (0)