Skip to content

Commit c71a9c5

Browse files
committed
Fix the tab selection after rebase
1 parent 74a6ad7 commit c71a9c5

File tree

5 files changed

+23
-24
lines changed

5 files changed

+23
-24
lines changed

app/src/main/java/com/duckduckgo/app/browser/tabs/adapter/TabSwitcherItemDiffCallback.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ package com.duckduckgo.app.browser.tabs.adapter
1919
import android.os.Bundle
2020
import androidx.recyclerview.widget.DiffUtil
2121
import com.duckduckgo.app.tabs.ui.TabSwitcherItem
22-
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel
22+
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.SelectionViewState.Mode
2323

2424
class TabSwitcherItemDiffCallback(
2525
old: List<TabSwitcherItem>,
2626
new: List<TabSwitcherItem>,
27-
private val oldMode: TabSwitcherViewModel.SelectionViewState.Mode = TabSwitcherViewModel.SelectionViewState.Mode.Normal,
28-
private val newMode: TabSwitcherViewModel.SelectionViewState.Mode = TabSwitcherViewModel.SelectionViewState.Mode.Normal,
27+
private val oldMode: Mode = Mode.Normal,
28+
private val newMode: Mode = Mode.Normal,
2929
) : DiffUtil.Callback() {
3030

3131
// keep a local copy of the lists to avoid any changes to the lists during the diffing process
@@ -49,7 +49,8 @@ class TabSwitcherItemDiffCallback(
4949
oldItem.tabEntity.viewed == newItem.tabEntity.viewed &&
5050
oldItem.tabEntity.title == newItem.tabEntity.title &&
5151
oldItem.tabEntity.url == newItem.tabEntity.url &&
52-
oldItem.isSelected == newItem.isSelected
52+
oldItem.isSelected == newItem.isSelected &&
53+
oldMode == newMode
5354
}
5455
else -> false
5556
}

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,18 @@ import android.view.View
2525
import androidx.core.content.ContextCompat
2626
import androidx.core.view.children
2727
import androidx.recyclerview.widget.RecyclerView
28+
import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.SelectionViewState.Mode
2829
import com.duckduckgo.common.ui.view.toPx
2930
import com.duckduckgo.mobile.android.R as CommonR
3031

3132
class TabItemDecorator(
3233
context: Context,
33-
var tabSwitcherItemId: String?,
34+
tabSwitcherItemId: String?,
35+
mode: Mode,
3436
) : RecyclerView.ItemDecoration() {
3537

3638
var highlightedTabId: String? = tabSwitcherItemId
37-
private set
39+
var selectionMode: Mode = mode
3840

3941
private val activeTabBorderStroke: Paint = Paint().apply {
4042
isAntiAlias = true
@@ -65,8 +67,10 @@ class TabItemDecorator(
6567
recyclerView.children.forEach { child ->
6668
val positionInAdapter = recyclerView.getChildAdapterPosition(child)
6769
adapter.getTabSwitcherItem(positionInAdapter)?.let { tabSwitcherItem ->
68-
if ((tabSwitcherItem as? TabSwitcherItem.Tab)?.isSelected == true) {
69-
drawTabDecoration(child, canvas, selectionBorderStroke)
70+
if (selectionMode is Mode.Selection) {
71+
if (tabSwitcherItem is TabSwitcherItem.Tab && tabSwitcherItem.isSelected) {
72+
drawTabDecoration(child, canvas, selectionBorderStroke)
73+
}
7074
} else if (tabSwitcherItem.id == highlightedTabId) {
7175
drawTabDecoration(child, canvas, activeTabBorderStroke)
7276
}
@@ -78,7 +82,7 @@ class TabItemDecorator(
7882

7983
private fun drawTabDecoration(child: View, c: Canvas, paint: Paint) {
8084
selectionBorderStroke.alpha = (child.alpha * 255).toInt()
81-
c.drawRoundRect(child.getBounds(), SELECTION_BORDER_WIDTH, SELECTION_BORDER_WIDTH, selectionBorderStroke)
85+
c.drawRoundRect(child.getBounds(), BORDER_RADIUS, BORDER_RADIUS, paint)
8286
}
8387

8488
private fun View.getBounds(): RectF {

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
222222
val swipeListener = ItemTouchHelper(tabTouchHelper)
223223
swipeListener.attachToRecyclerView(tabsRecycler)
224224

225-
tabItemDecorator = TabItemDecorator(this, selectedTabId)
225+
tabItemDecorator = TabItemDecorator(this, selectedTabId, viewModel.selectionViewState.value.mode)
226226
tabsRecycler.addItemDecoration(tabItemDecorator)
227227

228228
tabsRecycler.setHasFixedSize(true)
@@ -312,7 +312,7 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
312312
}
313313
} else {
314314
viewModel.activeTab.observe(this) { tab ->
315-
if (tab != null && tab.tabId != tabItemDecorator.tabSwitcherItemId && !tab.deletable) {
315+
if (tab != null && tab.tabId != tabItemDecorator.highlightedTabId && !tab.deletable) {
316316
updateTabGridItemDecorator(tab.tabId)
317317
}
318318
}
@@ -321,7 +321,7 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
321321
viewModel.tabSwitcherItems.observe(this) { tabSwitcherItems ->
322322
tabsAdapter.updateData(tabSwitcherItems)
323323

324-
val noTabSelected = tabSwitcherItems.none { it.id == tabItemDecorator.tabSwitcherItemId }
324+
val noTabSelected = tabSwitcherItems.none { it.id == tabItemDecorator.highlightedTabId }
325325
if (noTabSelected && tabSwitcherItems.isNotEmpty()) {
326326
updateTabGridItemDecorator(tabSwitcherItems.last().id)
327327
}
@@ -454,11 +454,11 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
454454

455455
val mode = viewModel.selectionViewState.value.mode
456456
when (mode) {
457-
Normal -> {
457+
Mode.Normal -> {
458458
createNormalModeMenu(menu)
459459
}
460460
is Mode.Selection -> {
461-
createSelectionModeMenu(menu, mode.selectedTabs.size, viewModel.tabs.value?.size ?: 0)
461+
createSelectionModeMenu(menu, mode.selectedTabs.size, viewModel.tabSwitcherItems.value?.size ?: 0)
462462
}
463463
}
464464
} else {
@@ -639,7 +639,8 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
639639
}
640640

641641
private fun updateTabGridItemDecorator(tabId: String?) {
642-
tabItemDecorator.tabSwitcherItemId = tabId
642+
tabItemDecorator.highlightedTabId = tabId
643+
tabItemDecorator.selectionMode = viewModel.selectionViewState.value.mode
643644
tabsRecycler.invalidateItemDecorations()
644645
}
645646

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ import com.duckduckgo.app.browser.favicon.FaviconManager
4040
import com.duckduckgo.app.browser.tabpreview.WebViewPreviewPersister
4141
import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback
4242
import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_PREVIEW
43+
import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_SELECTION
4344
import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_TITLE
4445
import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_URL
4546
import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_VIEWED
46-
import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_SELECTION
4747
import com.duckduckgo.app.tabs.model.TabEntity
4848
import com.duckduckgo.app.tabs.model.TabSwitcherData.LayoutType
4949
import com.duckduckgo.app.tabs.ui.TabSwitcherAdapter.TabSwitcherViewHolder.Companion.GRID_TAB

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,10 @@ package com.duckduckgo.app.tabs.ui
1919
import androidx.lifecycle.LiveData
2020
import androidx.lifecycle.ViewModel
2121
import androidx.lifecycle.asLiveData
22-
import androidx.lifecycle.map
2322
import androidx.lifecycle.viewModelScope
2423
import com.duckduckgo.adclick.api.AdClickManager
2524
import com.duckduckgo.anvil.annotations.ContributesViewModel
2625
import com.duckduckgo.app.browser.SwipingTabsFeatureProvider
27-
import com.duckduckgo.app.browser.di.BrowserModule_WebViewSessionStorageFactory.webViewSessionStorage
2826
import com.duckduckgo.app.browser.session.WebViewSessionStorage
2927
import com.duckduckgo.app.pixels.AppPixelName
3028
import com.duckduckgo.app.statistics.pixels.Pixel
@@ -84,11 +82,6 @@ class TabSwitcherViewModel @Inject constructor(
8482
activeTab = activeTab,
8583
fabType = fabType,
8684
)
87-
if (viewState.mode is SelectionViewState.Mode.Selection) {
88-
viewState.copy(fabType = SelectionViewState.FabType.CLOSE_TABS)
89-
} else {
90-
viewState.copy(fabType = SelectionViewState.FabType.NEW_TAB)
91-
}
9285
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), SelectionViewState())
9386

9487
val tabSwitcherItems: LiveData<List<TabSwitcherItem>> = tabRepository.flowTabs.combine(_selectionViewState) { tabEntities, viewState ->
@@ -188,7 +181,7 @@ class TabSwitcherViewModel @Inject constructor(
188181
}
189182

190183
fun onSelectAllTabs() {
191-
_selectionViewState.update { it.copy(mode = SelectionViewState.Mode.Selection(tabs.value?.map { it.tabId } ?: emptyList())) }
184+
_selectionViewState.update { it.copy(mode = SelectionViewState.Mode.Selection(tabSwitcherItems.value?.map { it.id } ?: emptyList())) }
192185
}
193186

194187
fun onShareSelectedTabs() {

0 commit comments

Comments
 (0)