From f14b6d0385b8b5a43557d33e59f3a9a34a6cb080 Mon Sep 17 00:00:00 2001 From: ekager Date: Fri, 31 Jul 2020 14:21:00 -0400 Subject: [PATCH] For #13117 - Don't show add to collections button in private tabs tray --- .../tabtray/SaveToCollectionsButtonAdapter.kt | 20 ++++++++++++++----- .../org/mozilla/fenix/tabtray/TabTrayView.kt | 13 ++++++++---- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt index 896fdea7d..03d10be28 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt @@ -20,7 +20,8 @@ import org.mozilla.fenix.tabtray.SaveToCollectionsButtonAdapter.ViewHolder * multiple [RecyclerView.Adapter] in one [RecyclerView]. */ class SaveToCollectionsButtonAdapter( - private val interactor: TabTrayInteractor + private val interactor: TabTrayInteractor, + private val isPrivate: Boolean = false ) : ListAdapter(DiffCallback) { init { @@ -38,14 +39,19 @@ class SaveToCollectionsButtonAdapter( return } - (payloads[0] as TabTrayView.TabChange).let { - holder.itemView.isVisible = it == TabTrayView.TabChange.NORMAL + when (val change = payloads[0]) { + is TabTrayView.TabChange -> { + holder.itemView.isVisible = change == TabTrayView.TabChange.NORMAL + } + is MultiselectModeChange -> { + holder.itemView.isVisible = change == MultiselectModeChange.NORMAL + } } } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.itemView.isVisible = - interactor.onModeRequested() is TabTrayDialogFragmentState.Mode.Normal + holder.itemView.isVisible = !isPrivate && + interactor.onModeRequested() is TabTrayDialogFragmentState.Mode.Normal } override fun getItemViewType(position: Int): Int { @@ -58,6 +64,10 @@ class SaveToCollectionsButtonAdapter( override fun areContentsTheSame(oldItem: Item, newItem: Item) = true } + enum class MultiselectModeChange { + MULTISELECT, NORMAL + } + /** * An object to identify the data type. */ diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index f11930604..d0d903447 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -41,6 +41,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.tabtray.SaveToCollectionsButtonAdapter.MultiselectModeChange /** * View that contains and configures the BrowserAwesomeBar @@ -72,7 +73,7 @@ class TabTrayView( private val bottomSheetCallback: BottomSheetBehavior.BottomSheetCallback private var tabsTouchHelper: TabsTouchHelper - private val collectionsButtonAdapter = SaveToCollectionsButtonAdapter(interactor) + private val collectionsButtonAdapter = SaveToCollectionsButtonAdapter(interactor, isPrivate) private var hasLoaded = false @@ -272,7 +273,7 @@ class TabTrayView( val oldMode = mode if (oldMode::class != state.mode::class) { - updateTabsForModeChanged() + updateTabsForMultiselectModeChanged(state.mode is TabTrayDialogFragmentState.Mode.MultiSelect) if (view.context.settings().accessibilityServicesEnabled) { view.announceForAccessibility( if (state.mode == TabTrayDialogFragmentState.Mode.Normal) view.context.getString( @@ -419,13 +420,17 @@ class TabTrayView( view.tab_layout.isVisible = !multiselect } - private fun updateTabsForModeChanged() { + private fun updateTabsForMultiselectModeChanged(inMultiselectMode: Boolean) { view.tabsTray.apply { val tabs = view.context.components.core.store.state.getNormalOrPrivateTabs( isPrivateModeSelected ) - collectionsButtonAdapter.notifyItemChanged(0) + collectionsButtonAdapter.notifyItemChanged( + 0, + if (inMultiselectMode) MultiselectModeChange.MULTISELECT else MultiselectModeChange.NORMAL + ) + tabsAdapter.notifyItemRangeChanged(0, tabs.size, true) } }