From 12ccf612300de93b0e5899b52171dd579cf24304 Mon Sep 17 00:00:00 2001 From: Colin Lee Date: Mon, 24 Jun 2019 10:10:49 -0700 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/3213: Fix multi-select bookmarks on return to fragment (https://github.com/mozilla-mobile/fenix/pull/3413) --- .../fenix/library/bookmarks/BookmarkAdapter.kt | 10 +++++----- .../fenix/library/bookmarks/BookmarkComponent.kt | 1 + .../fenix/library/bookmarks/BookmarkFragment.kt | 5 ++--- .../fenix/library/bookmarks/BookmarkUIView.kt | 13 ++++++------- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt index def569235d..77d60a5285 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapter.kt @@ -34,19 +34,19 @@ class BookmarkAdapter(val emptyView: View, val actionEmitter: Observer = listOf() private var mode: BookmarkState.Mode = BookmarkState.Mode.Normal - var selected = setOf() + val selected: Set + get() = (mode as? BookmarkState.Mode.Selecting)?.selectedItems ?: setOf() private var isFirstRun = true lateinit var job: Job fun updateData(tree: BookmarkNode?, mode: BookmarkState.Mode) { - this.tree = tree?.children?.filterNotNull() ?: listOf() + this.tree = tree?.children ?: listOf() isFirstRun = if (isFirstRun) false else { emptyView.visibility = if (this.tree.isEmpty()) View.VISIBLE else View.GONE false } this.mode = mode - this.selected = if (mode is BookmarkState.Mode.Selecting) mode.selectedItems else setOf() notifyDataSetChanged() } @@ -137,9 +137,9 @@ class BookmarkAdapter(val emptyView: View, val actionEmitter: Observer { - if ((bookmarkComponent.uiView as BookmarkUIView).mode is BookmarkState.Mode.Normal) { - getManagedEmitter().onNext(BookmarkChange.ClearSelection) - } activity?.invalidateOptionsMenu() } + is BookmarkAction.DeselectAll -> + getManagedEmitter().onNext(BookmarkChange.ClearSelection) } } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkUIView.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkUIView.kt index 85a69f922e..c5e06500df 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkUIView.kt @@ -65,20 +65,16 @@ class BookmarkUIView( mode = it.mode actionEmitter.onNext(BookmarkAction.SwitchMode) } - bookmarkAdapter.updateData(it.tree, it.mode) - when (val modeCopy = mode) { + when (val modeCopy = it.mode) { is BookmarkState.Mode.Normal -> setUIForNormalMode(it.tree) - is BookmarkState.Mode.Selecting -> setUIForSelectingMode(modeCopy) + is BookmarkState.Mode.Selecting -> setUIForSelectingMode(it.tree, modeCopy) } } override fun onBackPressed(): Boolean { return when { mode is BookmarkState.Mode.Selecting -> { - mode = BookmarkState.Mode.Normal - bookmarkAdapter.updateData(tree, mode) - setUIForNormalMode(tree) - actionEmitter.onNext(BookmarkAction.SwitchMode) + actionEmitter.onNext(BookmarkAction.DeselectAll) true } canGoBack -> { @@ -107,8 +103,10 @@ class BookmarkUIView( } private fun setUIForSelectingMode( + root: BookmarkNode?, mode: BookmarkState.Mode.Selecting ) { + bookmarkAdapter.updateData(root, mode) activity?.title = context.getString(R.string.bookmarks_multi_select_title, mode.selectedItems.size) setToolbarColors( @@ -118,6 +116,7 @@ class BookmarkUIView( } private fun setUIForNormalMode(root: BookmarkNode?) { + bookmarkAdapter.updateData(root, BookmarkState.Mode.Normal) setTitle(root) setToolbarColors( R.attr.primaryText.getColorIntFromAttr(context!!),