From ee96af1b9a356f7e42c0c9bd92a2d82134a569c1 Mon Sep 17 00:00:00 2001 From: Mugurell Date: Wed, 4 Nov 2020 17:53:23 +0200 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/13427 - Disable the "selected tab" decoration when in Multiselect Selecting a tab while in Multiselect would add a different decoration to the one already set for the last tab opened and this would confuse users. Let's avoid this. --- .../mozilla/fenix/tabtray/FenixTabsAdapter.kt | 16 +++++++++++++++- .../mozilla/fenix/tabtray/TabTrayViewHolder.kt | 7 +++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt index 711adaeed6..4f1bb4d016 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt @@ -59,13 +59,22 @@ class FenixTabsAdapter( override fun onBindViewHolder( holder: TabViewHolder, position: Int, - payloads: MutableList + payloads: List ) { 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) diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt index 1b811b21a9..1965f32b1b 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt @@ -227,10 +227,9 @@ class TabTrayViewHolder( .take(MAX_URI_LENGTH) } - @VisibleForTesting - internal fun updateSelectedTabIndicator(isSelected: Boolean) { + override fun updateSelectedTabIndicator(showAsSelected: Boolean) { if (itemView.context.settings().gridTabView) { - itemView.tab_tray_grid_item.background = if (isSelected) { + itemView.tab_tray_grid_item.background = if (showAsSelected) { AppCompatResources.getDrawable(itemView.context, R.drawable.tab_tray_grid_item_selected_border) } else { null @@ -238,7 +237,7 @@ class TabTrayViewHolder( return } - val color = if (isSelected) { + val color = if (showAsSelected) { R.color.tab_tray_item_selected_background_normal_theme } else { R.color.tab_tray_item_background_normal_theme