@ -59,13 +59,22 @@ class FenixTabsAdapter(
override fun onBindViewHolder (
holder : TabViewHolder ,
position : Int ,
payloads : Mutable List< Any >
payloads : List< Any >
) {
if ( payloads . isNullOrEmpty ( ) ) {
onBindViewHolder ( holder , position )
return
}
// Having non-empty payloads means we have to make a partial update.
// This currently only happens when changing between the Normal and MultiSelect modes
// when we want to either show the last opened tab as selected (default) or hide this ui decorator.
if ( mode is TabTrayDialogFragmentState . Mode . Normal ) {
super . onBindViewHolder ( holder , position , listOf ( PAYLOAD _HIGHLIGHT _SELECTED _ITEM ) )
} else {
super . onBindViewHolder ( holder , position , listOf ( PAYLOAD _DONT _HIGHLIGHT _SELECTED _ITEM ) )
}
holder . tab ?. let { showCheckedIfSelected ( it , holder . itemView ) }
}
@ -133,6 +142,11 @@ class FenixTabsAdapter(
tabsList = recyclerView
}
override fun isTabSelected ( tabs : Tabs , position : Int ) : Boolean {
return mode is TabTrayDialogFragmentState . Mode . Normal &&
tabs . selectedIndex == position
}
private fun showCheckedIfSelected ( tab : Tab , view : View ) {
val shouldBeChecked =
mode is TabTrayDialogFragmentState . Mode . MultiSelect && selectedItems . contains ( tab )