From 958474f9fb709a4308d4c53d84bd629beb14e306 Mon Sep 17 00:00:00 2001 From: Grisha Kruglov Date: Fri, 18 Sep 2020 16:37:03 -0700 Subject: [PATCH] For #13157: Filter out folder being edited from 'select folder' dialog --- .../library/bookmarks/edit/EditBookmarkFragment.kt | 7 ++++++- .../selectfolder/SelectBookmarkFolderAdapter.kt | 11 +++++++++-- .../selectfolder/SelectBookmarkFolderFragment.kt | 4 +++- app/src/main/res/navigation/nav_graph.xml | 5 +++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/edit/EditBookmarkFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/edit/EditBookmarkFragment.kt index bf07a482c..72960d3cf 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/edit/EditBookmarkFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/edit/EditBookmarkFragment.kt @@ -107,7 +107,12 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) { R.id.bookmarkEditFragment, EditBookmarkFragmentDirections .actionBookmarkEditFragmentToBookmarkSelectFolderFragment( - allowCreatingNewFolder = false + allowCreatingNewFolder = false, + // Don't allow moving folders into themselves. + hideFolderGuid = when (bookmarkNode!!.type) { + BookmarkNodeType.FOLDER -> bookmarkNode!!.guid + else -> null + } ) ) } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderAdapter.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderAdapter.kt index 168af409f..7eb347bd3 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderAdapter.kt @@ -24,12 +24,19 @@ import org.mozilla.fenix.library.bookmarks.selectfolder.SelectBookmarkFolderAdap class SelectBookmarkFolderAdapter(private val sharedViewModel: BookmarksSharedViewModel) : ListAdapter(DiffCallback) { - fun updateData(tree: BookmarkNode?) { + fun updateData(tree: BookmarkNode?, hideFolderGuid: String?) { val updatedData = tree ?.convertToFolderDepthTree() ?.drop(1) .orEmpty() - submitList(updatedData) + + val filteredData = if (hideFolderGuid != null && updatedData.isNotEmpty()) { + updatedData.filter { it.node.guid != hideFolderGuid } + } else { + updatedData + } + + submitList(filteredData) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookmarkFolderViewHolder { diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderFragment.kt index 9a825e968..e5022c4dc 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/selectfolder/SelectBookmarkFolderFragment.kt @@ -50,6 +50,8 @@ class SelectBookmarkFolderFragment : Fragment() { super.onResume() showToolbar(getString(R.string.bookmark_select_folder_fragment_label)) + val args: SelectBookmarkFolderFragmentArgs by navArgs() + viewLifecycleOwner.lifecycleScope.launch(Main) { bookmarkNode = withContext(IO) { val context = requireContext() @@ -59,7 +61,7 @@ class SelectBookmarkFolderFragment : Fragment() { } val adapter = SelectBookmarkFolderAdapter(sharedViewModel) recylerViewBookmarkFolders.adapter = adapter - adapter.updateData(bookmarkNode) + adapter.updateData(bookmarkNode, args.hideFolderGuid) } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index a4a49d251..c3c5abb3e 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -308,6 +308,11 @@ android:name="allowCreatingNewFolder" android:defaultValue="false" app:argType="boolean" /> +