@@ -24,9 +24,11 @@ import android.view.View
2424import android.view.ViewGroup
2525import android.widget.ImageView
2626import android.widget.TextView
27+ import androidx.annotation.VisibleForTesting
2728import androidx.lifecycle.LifecycleOwner
2829import androidx.lifecycle.lifecycleScope
2930import androidx.recyclerview.widget.DiffUtil
31+ import androidx.recyclerview.widget.RecyclerView
3032import androidx.recyclerview.widget.RecyclerView.Adapter
3133import androidx.recyclerview.widget.RecyclerView.ViewHolder
3234import com.bumptech.glide.Glide
@@ -35,12 +37,12 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
3537import com.duckduckgo.app.browser.databinding.ItemTabGridBinding
3638import com.duckduckgo.app.browser.databinding.ItemTabListBinding
3739import com.duckduckgo.app.browser.favicon.FaviconManager
38- import com.duckduckgo.app.browser.tabpreview.TabEntityDiffCallback.Companion.DIFF_KEY_PREVIEW
39- import com.duckduckgo.app.browser.tabpreview.TabEntityDiffCallback.Companion.DIFF_KEY_TITLE
40- import com.duckduckgo.app.browser.tabpreview.TabEntityDiffCallback.Companion.DIFF_KEY_URL
41- import com.duckduckgo.app.browser.tabpreview.TabEntityDiffCallback.Companion.DIFF_KEY_VIEWED
4240import com.duckduckgo.app.browser.tabpreview.WebViewPreviewPersister
4341import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback
42+ import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_PREVIEW
43+ import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_TITLE
44+ import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_URL
45+ import com.duckduckgo.app.browser.tabs.adapter.TabSwitcherItemDiffCallback.Companion.DIFF_KEY_VIEWED
4446import com.duckduckgo.app.tabs.model.TabEntity
4547import com.duckduckgo.app.tabs.model.TabSwitcherData.LayoutType
4648import com.duckduckgo.app.tabs.ui.TabSwitcherAdapter.TabSwitcherViewHolder.Companion.GRID_TAB
@@ -115,6 +117,19 @@ class TabSwitcherAdapter(
115117 }
116118 }
117119
120+ @VisibleForTesting
121+ fun createCloseClickListener (
122+ bindingAdapterPosition : () -> Int ,
123+ tabSwitcherListener : TabSwitcherListener ,
124+ ): View .OnClickListener {
125+ return View .OnClickListener {
126+ val position = bindingAdapterPosition()
127+ if (position != RecyclerView .NO_POSITION ) {
128+ tabSwitcherListener.onTabDeleted(position = position, deletedBySwipe = false )
129+ }
130+ }
131+ }
132+
118133 private fun bindListTab (holder : TabSwitcherViewHolder .ListTabViewHolder , tab : TabEntity ) {
119134 val context = holder.binding.root.context
120135 holder.title.text = extractTabTitle(tab, context)
@@ -124,7 +139,7 @@ class TabSwitcherAdapter(
124139 loadFavicon(tab, holder.favicon)
125140 attachTabClickListeners(
126141 tabViewHolder = holder,
127- bindingAdapterPosition = holder.bindingAdapterPosition,
142+ bindingAdapterPosition = { holder.bindingAdapterPosition } ,
128143 tab = tab,
129144 )
130145 }
@@ -138,7 +153,7 @@ class TabSwitcherAdapter(
138153 loadTabPreviewImage(tab, glide, holder)
139154 attachTabClickListeners(
140155 tabViewHolder = holder,
141- bindingAdapterPosition = holder.bindingAdapterPosition,
156+ bindingAdapterPosition = { holder.bindingAdapterPosition } ,
142157 tab = tab,
143158 )
144159 }
@@ -252,15 +267,18 @@ class TabSwitcherAdapter(
252267 }
253268 }
254269
255- private fun attachTabClickListeners (tabViewHolder : TabViewHolder , bindingAdapterPosition : Int , tab : TabEntity ) {
270+ private fun attachTabClickListeners (tabViewHolder : TabViewHolder , bindingAdapterPosition : () -> Int , tab : TabEntity ) {
256271 tabViewHolder.rootView.setOnClickListener {
257272 if (! isDragging) {
258273 itemClickListener.onTabSelected(tab)
259274 }
260275 }
261- tabViewHolder.close.setOnClickListener {
262- itemClickListener.onTabDeleted(bindingAdapterPosition, false )
263- }
276+ tabViewHolder.close.setOnClickListener(
277+ createCloseClickListener(
278+ bindingAdapterPosition = bindingAdapterPosition,
279+ tabSwitcherListener = itemClickListener,
280+ ),
281+ )
264282 }
265283
266284 fun updateData (updatedList : List <TabSwitcherItem >) {
0 commit comments