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 9be4a8254..022b2d2f4 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 @@ -25,7 +25,7 @@ class BookmarkAdapter(val emptyView: View, val interactor: BookmarkViewInteracto RecyclerView.Adapter(), SelectionHolder { private var tree: List = listOf() - private var mode: BookmarkFragmentState.Mode = BookmarkFragmentState.Mode.Normal + private var mode: BookmarkFragmentState.Mode = BookmarkFragmentState.Mode.Normal() override val selectedItems: Set get() = mode.selectedItems private var isFirstRun = true diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt index 3231c7b5a..0fea4c141 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt @@ -154,8 +154,10 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { when (val mode = bookmarkStore.state.mode) { - BookmarkFragmentState.Mode.Normal -> { - inflater.inflate(R.menu.bookmarks_menu, menu) + is BookmarkFragmentState.Mode.Normal -> { + if (mode.showMenu) { + inflater.inflate(R.menu.bookmarks_menu, menu) + } } is BookmarkFragmentState.Mode.Selecting -> { if (mode.selectedItems.any { it.type != BookmarkNodeType.ITEM }) { diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt index 2b5e3c887..0005323f9 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStore.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.library.bookmarks +import mozilla.appservices.places.BookmarkRoot import mozilla.components.concept.storage.BookmarkNode import mozilla.components.lib.state.Action import mozilla.components.lib.state.State @@ -22,13 +23,13 @@ class BookmarkFragmentStore( */ data class BookmarkFragmentState( val tree: BookmarkNode?, - val mode: Mode = Mode.Normal, + val mode: Mode = Mode.Normal(), val isLoading: Boolean = true ) : State { sealed class Mode { open val selectedItems = emptySet() - object Normal : Mode() + data class Normal(val showMenu: Boolean = true) : Mode() data class Selecting(override val selectedItems: Set) : Mode() } } @@ -58,8 +59,10 @@ private fun bookmarkFragmentStateReducer( val items = state.mode.selectedItems.filter { it in action.tree } state.copy( tree = action.tree, - mode = if (items.isEmpty()) { - BookmarkFragmentState.Mode.Normal + mode = if (BookmarkRoot.Root.id == action.tree.guid) { + BookmarkFragmentState.Mode.Normal(false) + } else if (items.isEmpty()) { + BookmarkFragmentState.Mode.Normal() } else { BookmarkFragmentState.Mode.Selecting(items.toSet()) }, @@ -72,14 +75,14 @@ private fun bookmarkFragmentStateReducer( val items = state.mode.selectedItems - action.item state.copy( mode = if (items.isEmpty()) { - BookmarkFragmentState.Mode.Normal + BookmarkFragmentState.Mode.Normal() } else { BookmarkFragmentState.Mode.Selecting(items) } ) } BookmarkFragmentAction.DeselectAll -> - state.copy(mode = BookmarkFragmentState.Mode.Normal) + state.copy(mode = BookmarkFragmentState.Mode.Normal()) } } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt index dbe949294..c71dcedb3 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkView.kt @@ -100,7 +100,7 @@ class BookmarkView( val view: View = LayoutInflater.from(container.context) .inflate(R.layout.component_bookmark, container, true) - private var mode: BookmarkFragmentState.Mode = BookmarkFragmentState.Mode.Normal + private var mode: BookmarkFragmentState.Mode = BookmarkFragmentState.Mode.Normal() private var tree: BookmarkNode? = null private var canGoBack = false diff --git a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapterTest.kt index 751e5a977..0606691c6 100644 --- a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkAdapterTest.kt @@ -46,12 +46,12 @@ internal class BookmarkAdapterTest { ) ) ) - bookmarkAdapter.updateData(tree, BookmarkFragmentState.Mode.Normal) - bookmarkAdapter.updateData(null, BookmarkFragmentState.Mode.Normal) + bookmarkAdapter.updateData(tree, BookmarkFragmentState.Mode.Normal()) + bookmarkAdapter.updateData(null, BookmarkFragmentState.Mode.Normal()) verifyOrder { - bookmarkAdapter.updateData(tree, BookmarkFragmentState.Mode.Normal) + bookmarkAdapter.updateData(tree, BookmarkFragmentState.Mode.Normal()) bookmarkAdapter.notifyItemRangeInserted(0, 3) - bookmarkAdapter.updateData(null, BookmarkFragmentState.Mode.Normal) + bookmarkAdapter.updateData(null, BookmarkFragmentState.Mode.Normal()) bookmarkAdapter.notifyItemRangeRemoved(0, 3) } } diff --git a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt index 2fb7a8cb2..b389f74f2 100644 --- a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorTest.kt @@ -87,7 +87,7 @@ class BookmarkFragmentInteractorTest { @Test fun `switch between bookmark selection modes`() { - interactor.onSelectionModeSwitch(BookmarkFragmentState.Mode.Normal) + interactor.onSelectionModeSwitch(BookmarkFragmentState.Mode.Normal()) verify { bookmarkController.handleSelectionModeSwitch() diff --git a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStoreTest.kt b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStoreTest.kt index 4d7eaf67c..e256a1840 100644 --- a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStoreTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentStoreTest.kt @@ -21,7 +21,7 @@ class BookmarkFragmentStoreTest { val initialState = BookmarkFragmentState(null) val store = BookmarkFragmentStore(initialState) - assertThat(BookmarkFragmentState(null, BookmarkFragmentState.Mode.Normal)).isEqualTo(store.state) + assertThat(BookmarkFragmentState(null, BookmarkFragmentState.Mode.Normal())).isEqualTo(store.state) store.dispatch(BookmarkFragmentAction.Change(tree)).join() @@ -34,7 +34,7 @@ class BookmarkFragmentStoreTest { val initialState = BookmarkFragmentState(tree) val store = BookmarkFragmentStore(initialState) - assertThat(BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal)).isEqualTo(store.state) + assertThat(BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal())).isEqualTo(store.state) store.dispatch(BookmarkFragmentAction.Change(newTree)).join() @@ -47,7 +47,7 @@ class BookmarkFragmentStoreTest { val initialState = BookmarkFragmentState(tree) val store = BookmarkFragmentStore(initialState) - assertThat(BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal)).isEqualTo(store.state) + assertThat(BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal())).isEqualTo(store.state) store.dispatch(BookmarkFragmentAction.Change(tree)).join() @@ -77,7 +77,7 @@ class BookmarkFragmentStoreTest { store.dispatch(BookmarkFragmentAction.Deselect(childItem)).join() - assertThat(BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal)).isEqualTo(store.state) + assertThat(BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal())).isEqualTo(store.state) } @Test @@ -102,7 +102,7 @@ class BookmarkFragmentStoreTest { @Test fun `deselecting while not in selecting mode does nothing`() = runBlocking { - val initialState = BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal) + val initialState = BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal()) val store = BookmarkFragmentStore(initialState) store.dispatch(BookmarkFragmentAction.Deselect(item)).join() @@ -117,12 +117,12 @@ class BookmarkFragmentStoreTest { store.dispatch(BookmarkFragmentAction.DeselectAll).join() - assertThat(initialState.copy(mode = BookmarkFragmentState.Mode.Normal)).isEqualTo(store.state) + assertThat(initialState.copy(mode = BookmarkFragmentState.Mode.Normal())).isEqualTo(store.state) } @Test fun `deselect all bookmarks when none are selected`() = runBlocking { - val initialState = BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal) + val initialState = BookmarkFragmentState(tree, BookmarkFragmentState.Mode.Normal()) val store = BookmarkFragmentStore(initialState) store.dispatch(BookmarkFragmentAction.DeselectAll) @@ -139,7 +139,7 @@ class BookmarkFragmentStoreTest { store.state.run { assertThat(newTree).isEqualTo(tree) - assertThat(BookmarkFragmentState.Mode.Normal).isEqualTo(mode) + assertThat(BookmarkFragmentState.Mode.Normal()).isEqualTo(mode) } } @@ -167,6 +167,17 @@ class BookmarkFragmentStoreTest { assertFalse(store.state.isLoading) } + @Test + fun `switching to Desktop Bookmarks folder sets showMenu state to false`() = runBlocking { + val initialState = BookmarkFragmentState(tree) + val store = BookmarkFragmentStore(initialState) + + store.dispatch(BookmarkFragmentAction.Change(rootFolder)).join() + + assertThat(rootFolder).isEqualTo(store.state.tree) + assertThat(BookmarkFragmentState.Mode.Normal(false)).isEqualTo(store.state.mode) + } + private val item = BookmarkNode(BookmarkNodeType.ITEM, "456", "123", 0, "Mozilla", "http://mozilla.org", null) private val separator = BookmarkNode(BookmarkNodeType.SEPARATOR, "789", "123", 1, null, null, null) private val subfolder = BookmarkNode(BookmarkNodeType.FOLDER, "987", "123", 0, "Subfolder", null, listOf()) @@ -191,4 +202,13 @@ class BookmarkFragmentStoreTest { null, listOf(separator, subfolder) ) + private val rootFolder = BookmarkNode( + BookmarkNodeType.FOLDER, + "root________", + null, + 0, + "Desktop Bookmarks", + null, + listOf(subfolder) + ) }