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 5697315e1..31f4cea46 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 @@ -203,7 +203,6 @@ class BookmarkAdapter(val emptyView: View, val interactor: BookmarkViewInteracto if (!item.inRoots()) { setupMenu(item) - view.setOnLongClickListener(null) } else { view.overflowView.visibility = View.GONE } 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 083aec15d..6b0a0345b 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 @@ -28,6 +28,7 @@ import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import mozilla.appservices.places.BookmarkRoot import mozilla.components.concept.storage.BookmarkNode +import mozilla.components.concept.storage.BookmarkNodeType import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.OAuthAccount import mozilla.components.concept.sync.Profile @@ -158,7 +159,11 @@ class BookmarkFragment : LibraryPageFragment(), BackHandler, Accou inflater.inflate(R.menu.bookmarks_menu, menu) } is BookmarkState.Mode.Selecting -> { - inflater.inflate(R.menu.bookmarks_select_multi, menu) + if (mode.selectedItems.any { it.type != BookmarkNodeType.ITEM }) { + inflater.inflate(R.menu.bookmarks_select_multi_not_item, menu) + } else { + inflater.inflate(R.menu.bookmarks_select_multi, menu) + } menu.findItem(R.id.edit_bookmark_multi_select)?.run { isVisible = mode.selectedItems.size == 1 icon.colorFilter = PorterDuffColorFilter( diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractor.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractor.kt index ad91c7aeb..57da3da32 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractor.kt @@ -84,6 +84,10 @@ class BookmarkFragmentInteractor( } override fun select(node: BookmarkNode) { + if (node.inRoots()) { + snackbarPresenter.present(context.getString(R.string.bookmark_cannot_edit_root)) + return + } bookmarkStore.dispatch(BookmarkAction.Select(node)) } diff --git a/app/src/main/res/menu/bookmarks_select_multi_not_item.xml b/app/src/main/res/menu/bookmarks_select_multi_not_item.xml new file mode 100644 index 000000000..5da61f16d --- /dev/null +++ b/app/src/main/res/menu/bookmarks_select_multi_not_item.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b7356bbe..d9f644f55 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -709,4 +709,6 @@ Disconnect Cancel + + Can’t edit default folders 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 4f18ce8dc..d50d65adf 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 @@ -10,12 +10,14 @@ import android.content.Context import androidx.core.content.getSystemService import androidx.navigation.NavController import androidx.navigation.NavDestination +import io.mockk.called import io.mockk.every import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.spyk import io.mockk.verify import io.mockk.verifyOrder +import mozilla.appservices.places.BookmarkRoot import mozilla.components.concept.storage.BookmarkNode import mozilla.components.concept.storage.BookmarkNodeType import org.junit.Before @@ -61,6 +63,9 @@ class BookmarkFragmentInteractorTest { private val tree = BookmarkNode( BookmarkNodeType.FOLDER, "123", null, 0, "Mobile", null, listOf(item, separator, childItem, subfolder) ) + private val root = BookmarkNode( + BookmarkNodeType.FOLDER, BookmarkRoot.Root.id, null, 0, BookmarkRoot.Root.name, null, null + ) @Before fun setup() { @@ -164,6 +169,13 @@ class BookmarkFragmentInteractorTest { } } + @Test + fun `cannot select bookmark roots`() { + interactor.select(root) + + verify { bookmarkStore wasNot called } + } + @Test fun `copy a bookmark item`() { val clipboardManager: ClipboardManager = mockk(relaxed = true)