diff --git a/app/src/main/java/com/duckduckgo/app/browser/tabpreview/TabEntityDiffCallback.kt b/app/src/main/java/com/duckduckgo/app/browser/tabpreview/TabEntityDiffCallback.kt index 3a711d373ce0..d55e692dafd7 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/tabpreview/TabEntityDiffCallback.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/tabpreview/TabEntityDiffCallback.kt @@ -22,7 +22,7 @@ import com.duckduckgo.app.tabs.model.TabEntity class TabEntityDiffCallback( private val oldList: List, - var newList: List, + private val newList: List, ) : DiffUtil.Callback() { private fun areItemsTheSame( diff --git a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabGridItemDecorator.kt b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabGridItemDecorator.kt index b636479a1a39..332f647a47f4 100644 --- a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabGridItemDecorator.kt +++ b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabGridItemDecorator.kt @@ -53,14 +53,10 @@ class TabGridItemDecorator( val child = recyclerView.getChildAt(i) val positionInAdapter = recyclerView.getChildAdapterPosition(child) - if (positionInAdapter < 0) { - continue - } - - val tab = adapter.getTab(positionInAdapter) - - if (tab.tabId == selectedTabId) { - drawSelectedTabDecoration(child, canvas) + adapter.getTab(positionInAdapter)?.let { tab -> + if (tab.tabId == selectedTabId) { + drawSelectedTabDecoration(child, canvas) + } } } 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 27d97d34057e..16bce4bb3723 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 @@ -220,7 +220,9 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine private fun scrollToShowCurrentTab() { val index = tabsAdapter.adapterPositionForTab(selectedTabId) - tabsRecycler.post { tabsRecycler.scrollToPosition(index) } + if (index != -1) { + tabsRecycler.post { tabsRecycler.scrollToPosition(index) } + } } private fun processCommand(command: Command) { @@ -297,8 +299,9 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine } override fun onTabDeleted(position: Int, deletedBySwipe: Boolean) { - val tab = tabsAdapter.getTab(position) - launch { viewModel.onMarkTabAsDeletable(tab, deletedBySwipe) } + tabsAdapter.getTab(position)?.let { tab -> + launch { viewModel.onMarkTabAsDeletable(tab, deletedBySwipe) } + } } override fun onTabMoved(from: Int, to: Int) { diff --git a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherAdapter.kt b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherAdapter.kt index bc78018226ce..fdca4510edcb 100644 --- a/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherAdapter.kt +++ b/app/src/main/java/com/duckduckgo/app/tabs/ui/TabSwitcherAdapter.kt @@ -54,7 +54,6 @@ class TabSwitcherAdapter( ) : Adapter() { private val list = mutableListOf() - private val diffCallback = TabEntityDiffCallback(list, listOf()) private var isDragging: Boolean = false @@ -201,15 +200,14 @@ class TabSwitcherAdapter( } private fun submitList(updatedList: List) { - diffCallback.newList = updatedList - val diffResult = DiffUtil.calculateDiff(diffCallback) + val diffResult = DiffUtil.calculateDiff(TabEntityDiffCallback(list, updatedList)) list.clear() list.addAll(updatedList) diffResult.dispatchUpdatesTo(this) } - fun getTab(position: Int): TabEntity = list[position] + fun getTab(position: Int): TabEntity? = list.getOrNull(position) fun adapterPositionForTab(tabId: String?): Int { if (tabId == null) return -1 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 1ba0146656f8..dd74718b393b 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 @@ -55,9 +55,9 @@ class TabSwitcherViewModel @Inject constructor( const val REINSTALL_VARIANT = "ru" } - var tabs: LiveData> = tabRepository.liveTabs + val tabs: LiveData> = tabRepository.liveTabs val activeTab = tabRepository.liveSelectedTab - var deletableTabs: LiveData> = tabRepository.flowDeletableTabs.asLiveData( + val deletableTabs: LiveData> = tabRepository.flowDeletableTabs.asLiveData( context = viewModelScope.coroutineContext, )