From d9d01db7cc7a9bd66472d2c2dc6b86d6d1a2cc34 Mon Sep 17 00:00:00 2001 From: mcarare Date: Tue, 12 Jul 2022 15:14:07 +0300 Subject: [PATCH] For #25980: Replace deprecated setHasOptionsMenu with MenuProvider. --- .../library/bookmarks/BookmarkFragment.kt | 19 +++++++------- .../addfolder/AddBookmarkFolderFragment.kt | 18 ++++++------- .../bookmarks/edit/EditBookmarkFragment.kt | 17 ++++++------- .../SelectBookmarkFolderFragment.kt | 21 +++++++++------- .../library/downloads/DownloadFragment.kt | 14 +++++++---- .../fenix/library/history/HistoryFragment.kt | 14 ++++++----- .../HistoryMetadataGroupFragment.kt | 18 ++++++------- .../recentlyclosed/RecentlyClosedFragment.kt | 17 +++++++++---- .../settings/address/AddressEditorFragment.kt | 10 +++++--- .../advanced/LocaleSettingsFragment.kt | 12 ++++++--- .../creditcards/CreditCardEditorFragment.kt | 12 ++++++--- .../logins/fragment/AddLoginFragment.kt | 10 +++++--- .../logins/fragment/EditLoginFragment.kt | 10 +++++--- .../logins/fragment/LoginDetailFragment.kt | 14 +++++------ .../logins/fragment/SavedLoginsFragment.kt | 11 +++++--- .../search/AddSearchEngineFragment.kt | 15 +++++++---- .../search/EditCustomSearchEngineFragment.kt | 13 ++++++---- detekt-baseline.xml | 25 ++++++++++--------- 18 files changed, 157 insertions(+), 113 deletions(-) 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 34e15347c..5eb7f3898 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 @@ -16,8 +16,10 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AlertDialog import androidx.core.content.getSystemService +import androidx.core.view.MenuProvider import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.NavDirections import androidx.navigation.fragment.findNavController @@ -61,7 +63,7 @@ import org.mozilla.fenix.utils.allowUndo * The screen that displays the user's bookmark list in their Library. */ @Suppress("TooManyFunctions", "LargeClass") -class BookmarkFragment : LibraryPageFragment(), UserInteractionHandler { +class BookmarkFragment : LibraryPageFragment(), UserInteractionHandler, MenuProvider { private lateinit var bookmarkStore: BookmarkFragmentStore private lateinit var bookmarkView: BookmarkView @@ -134,6 +136,9 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + val accountManager = requireComponents.backgroundServices.accountManager consumeFrom(bookmarkStore) { bookmarkView.update(it) @@ -147,11 +152,6 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan } } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - override fun onResume() { super.onResume() @@ -176,7 +176,7 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan } } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { when (val mode = bookmarkStore.state.mode) { is BookmarkFragmentState.Mode.Normal -> { if (mode.showMenu) { @@ -205,7 +205,7 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan } } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.bookmark_search -> { bookmarkInteractor.onSearch() @@ -251,7 +251,8 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan deleteMulti(bookmarkStore.state.mode.selectedItems) true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/addfolder/AddBookmarkFolderFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/addfolder/AddBookmarkFolderFragment.kt index f8d671d64..d2e38e771 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/addfolder/AddBookmarkFolderFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/addfolder/AddBookmarkFolderFragment.kt @@ -10,8 +10,10 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.View.GONE +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.Navigation import kotlinx.coroutines.Dispatchers.IO @@ -34,21 +36,18 @@ import org.mozilla.fenix.library.bookmarks.friendlyRootTitle /** * Menu to create a new bookmark folder. */ -class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) { +class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark), MenuProvider { private var _binding: FragmentEditBookmarkBinding? = null private val binding get() = _binding!! private val sharedViewModel: BookmarksSharedViewModel by activityViewModels() - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - /** * Hides fields for bookmark items present in the shared layout file. */ override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + _binding = FragmentEditBookmarkBinding.bind(view) binding.bookmarkUrlLabel.visibility = GONE @@ -87,11 +86,11 @@ class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) { binding.bookmarkNameEdit.hideKeyboard() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.bookmarks_add_folder, menu) } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.confirm_add_folder_button -> { if (binding.bookmarkNameEdit.text.isNullOrBlank()) { @@ -116,7 +115,8 @@ class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) { } true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } 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 443b10f4c..cc085b975 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 @@ -17,8 +17,10 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.Navigation import androidx.navigation.fragment.findNavController @@ -53,7 +55,7 @@ import org.mozilla.fenix.library.bookmarks.friendlyRootTitle /** * Menu to edit the name, URL, and location of a bookmark item. */ -class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) { +class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark), MenuProvider { private var _binding: FragmentEditBookmarkBinding? = null private val binding get() = _binding!! @@ -63,13 +65,9 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) { private var bookmarkParent: BookmarkNode? = null private var initialParentGuid: String? = null - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) _binding = FragmentEditBookmarkBinding.bind(view) @@ -191,11 +189,11 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) { binding.progressBarBookmark.visibility = View.GONE } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.bookmarks_edit, menu) } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.delete_bookmark_button -> { displayDeleteBookmarkDialog() @@ -206,7 +204,8 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) { true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } 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 20a67c191..92acd0c8f 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 @@ -11,8 +11,10 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.navArgs import kotlinx.coroutines.Dispatchers.IO @@ -29,24 +31,24 @@ import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.library.bookmarks.BookmarksSharedViewModel import org.mozilla.fenix.library.bookmarks.DesktopFolders -class SelectBookmarkFolderFragment : Fragment() { +class SelectBookmarkFolderFragment : Fragment(), MenuProvider { private var _binding: FragmentSelectBookmarkFolderBinding? = null private val binding get() = _binding!! private val sharedViewModel: BookmarksSharedViewModel by activityViewModels() private var bookmarkNode: BookmarkNode? = null - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { _binding = FragmentSelectBookmarkFolderBinding.inflate(inflater, container, false) return binding.root } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + } + override fun onDestroyView() { super.onDestroyView() @@ -72,14 +74,14 @@ class SelectBookmarkFolderFragment : Fragment() { } } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { val args: SelectBookmarkFolderFragmentArgs by navArgs() if (!args.allowCreatingNewFolder) { inflater.inflate(R.menu.bookmarks_select_folder, menu) } } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.add_folder_button -> { viewLifecycleOwner.lifecycleScope.launch(Main) { @@ -91,7 +93,8 @@ class SelectBookmarkFolderFragment : Fragment() { } true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } } diff --git a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt index 40db18a01..8509c67af 100644 --- a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt @@ -14,6 +14,8 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.annotation.VisibleForTesting +import androidx.core.view.MenuProvider +import androidx.lifecycle.Lifecycle import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.MainScope @@ -38,7 +40,7 @@ import org.mozilla.fenix.library.LibraryPageFragment import org.mozilla.fenix.utils.allowUndo @SuppressWarnings("TooManyFunctions", "LargeClass") -class DownloadFragment : LibraryPageFragment(), UserInteractionHandler { +class DownloadFragment : LibraryPageFragment(), UserInteractionHandler, MenuProvider { private lateinit var downloadStore: DownloadFragmentStore private lateinit var downloadView: DownloadView private lateinit var downloadInteractor: DownloadInteractor @@ -116,7 +118,6 @@ class DownloadFragment : LibraryPageFragment(), UserInteractionHan override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setHasOptionsMenu(true) } /** @@ -140,6 +141,8 @@ class DownloadFragment : LibraryPageFragment(), UserInteractionHan override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + consumeFrom(downloadStore) { downloadView.update(it) } @@ -150,7 +153,7 @@ class DownloadFragment : LibraryPageFragment(), UserInteractionHan showToolbar(getString(R.string.library_downloads)) } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { val menuRes = when (downloadStore.state.mode) { is DownloadFragmentState.Mode.Normal -> R.menu.library_menu is DownloadFragmentState.Mode.Editing -> R.menu.download_select_multi @@ -163,7 +166,7 @@ class DownloadFragment : LibraryPageFragment(), UserInteractionHan } } - override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) { R.id.close_history -> { close() true @@ -181,7 +184,8 @@ class DownloadFragment : LibraryPageFragment(), UserInteractionHan } true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } /** diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt index e82761c38..ecdb54868 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt @@ -17,7 +17,9 @@ import android.view.View import android.view.ViewGroup import android.widget.RadioGroup import androidx.appcompat.app.AlertDialog +import androidx.core.view.MenuProvider import androidx.fragment.app.DialogFragment +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.NavDirections import androidx.navigation.fragment.findNavController @@ -57,7 +59,7 @@ import org.mozilla.fenix.utils.allowUndo import org.mozilla.fenix.GleanMetrics.History as GleanHistory @SuppressWarnings("TooManyFunctions", "LargeClass") -class HistoryFragment : LibraryPageFragment(), UserInteractionHandler { +class HistoryFragment : LibraryPageFragment(), UserInteractionHandler, MenuProvider { private lateinit var historyStore: HistoryFragmentStore private lateinit var historyInteractor: HistoryInteractor private lateinit var historyProvider: DefaultPagedHistoryProvider @@ -154,8 +156,6 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandler { historyProvider = DefaultPagedHistoryProvider(requireComponents.core.historyStorage) GleanHistory.opened.record(NoExtras()) - - setHasOptionsMenu(true) } private fun deleteSnackbar( @@ -186,6 +186,7 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandler { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) consumeFrom(historyStore) { historyView.update(it) @@ -212,7 +213,7 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandler { (activity as NavHostActivity).getSupportActionBarAndInflateIfNecessary().show() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { if (historyStore.state.mode is HistoryFragmentState.Mode.Editing) { inflater.inflate(R.menu.history_select_multi, menu) menu.findItem(R.id.share_history_multi_select)?.isVisible = true @@ -229,7 +230,7 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandler { } } - override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) { R.id.share_history_multi_select -> { val selectedHistory = historyStore.state.mode.selectedItems val shareTabs = mutableListOf() @@ -294,7 +295,8 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandler { historyInteractor.onDeleteTimeRange() true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } private fun showTabTray() { diff --git a/app/src/main/java/org/mozilla/fenix/library/historymetadata/HistoryMetadataGroupFragment.kt b/app/src/main/java/org/mozilla/fenix/library/historymetadata/HistoryMetadataGroupFragment.kt index 624057e37..637df1314 100644 --- a/app/src/main/java/org/mozilla/fenix/library/historymetadata/HistoryMetadataGroupFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/historymetadata/HistoryMetadataGroupFragment.kt @@ -16,7 +16,9 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AlertDialog +import androidx.core.view.MenuProvider import androidx.fragment.app.DialogFragment +import androidx.lifecycle.Lifecycle import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import kotlinx.coroutines.CoroutineScope @@ -51,7 +53,7 @@ import org.mozilla.fenix.utils.allowUndo */ @SuppressWarnings("TooManyFunctions") class HistoryMetadataGroupFragment : - LibraryPageFragment(), UserInteractionHandler { + LibraryPageFragment(), UserInteractionHandler, MenuProvider { private lateinit var historyMetadataGroupStore: HistoryMetadataGroupFragmentStore private lateinit var interactor: HistoryMetadataGroupInteractor @@ -67,11 +69,6 @@ class HistoryMetadataGroupFragment : override val selectedItems: Set get() = historyMetadataGroupStore.state.items.filter { it.selected }.toSet() - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -121,6 +118,8 @@ class HistoryMetadataGroupFragment : } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + consumeFrom(historyMetadataGroupStore) { state -> historyMetadataGroupView.update(state) activity?.invalidateOptionsMenu() @@ -150,7 +149,7 @@ class HistoryMetadataGroupFragment : override fun onBackPressed(): Boolean = interactor.onBackPressed(selectedItems) - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { if (selectedItems.isNotEmpty()) { inflater.inflate(R.menu.history_select_multi, menu) @@ -164,7 +163,7 @@ class HistoryMetadataGroupFragment : } } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.share_history_multi_select -> { interactor.onShareMenuItem(selectedItems) @@ -199,7 +198,8 @@ class HistoryMetadataGroupFragment : interactor.onDeleteAll() true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } diff --git a/app/src/main/java/org/mozilla/fenix/library/recentlyclosed/RecentlyClosedFragment.kt b/app/src/main/java/org/mozilla/fenix/library/recentlyclosed/RecentlyClosedFragment.kt index 44c6661b8..14abd9837 100644 --- a/app/src/main/java/org/mozilla/fenix/library/recentlyclosed/RecentlyClosedFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/recentlyclosed/RecentlyClosedFragment.kt @@ -12,6 +12,8 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.core.view.MenuProvider +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import kotlinx.coroutines.flow.collect @@ -35,7 +37,10 @@ import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.library.LibraryPageFragment @Suppress("TooManyFunctions") -class RecentlyClosedFragment : LibraryPageFragment(), UserInteractionHandler { +class RecentlyClosedFragment : + LibraryPageFragment(), + UserInteractionHandler, + MenuProvider { private lateinit var recentlyClosedFragmentStore: RecentlyClosedFragmentStore private var _recentlyClosedFragmentView: RecentlyClosedFragmentView? = null private val recentlyClosedFragmentView: RecentlyClosedFragmentView @@ -49,7 +54,7 @@ class RecentlyClosedFragment : LibraryPageFragment(), UserIntera showToolbar(getString(R.string.library_recently_closed_tabs)) } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { if (recentlyClosedFragmentStore.state.selectedTabs.isNotEmpty()) { inflater.inflate(R.menu.history_select_multi, menu) menu.findItem(R.id.delete_history_multi_select)?.let { deleteItem -> @@ -61,7 +66,7 @@ class RecentlyClosedFragment : LibraryPageFragment(), UserIntera } } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { val selectedTabs = recentlyClosedFragmentStore.state.selectedTabs return when (item.itemId) { @@ -86,13 +91,13 @@ class RecentlyClosedFragment : LibraryPageFragment(), UserIntera recentlyClosedController.handleOpen(selectedTabs, BrowsingMode.Private) true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setHasOptionsMenu(true) RecentlyClosedTabs.opened.record(NoExtras()) } @@ -144,6 +149,8 @@ class RecentlyClosedFragment : LibraryPageFragment(), UserIntera } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + consumeFrom(recentlyClosedFragmentStore) { state -> recentlyClosedFragmentView.update(state) activity?.invalidateOptionsMenu() diff --git a/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt index 251477135..542028ef6 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt @@ -9,6 +9,8 @@ import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View +import androidx.core.view.MenuProvider +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -27,7 +29,7 @@ import org.mozilla.fenix.settings.address.view.AddressEditorView /** * Displays an address editor for adding and editing an address. */ -class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) { +class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor), MenuProvider { private lateinit var addressEditorView: AddressEditorView private lateinit var interactor: AddressEditorInteractor @@ -44,6 +46,7 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) val storage = requireContext().components.core.autofillStorage @@ -56,7 +59,6 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) { ) val binding = FragmentAddressEditorBinding.bind(view) - setHasOptionsMenu(true) val searchRegion = requireComponents.core.store.state.search.region addressEditorView = AddressEditorView(binding, interactor, searchRegion, args.address) @@ -82,14 +84,14 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) { this.view?.hideKeyboard() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.address_editor, menu) this.menu = menu menu.findItem(R.id.delete_address_button).isVisible = isEditing } - override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) { R.id.delete_address_button -> { args.address?.let { addressEditorView.showConfirmDeleteAddressDialog(requireContext(), it.guid) diff --git a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt index d453eb834..fa1efc95f 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt @@ -8,11 +8,14 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater +import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo import androidx.appcompat.widget.SearchView +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.support.ktx.android.view.hideKeyboard import mozilla.components.support.locale.LocaleUseCases @@ -22,7 +25,7 @@ import org.mozilla.fenix.databinding.FragmentLocaleSettingsBinding import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.showToolbar -class LocaleSettingsFragment : Fragment() { +class LocaleSettingsFragment : Fragment(), MenuProvider { private lateinit var localeSettingsStore: LocaleSettingsStore private lateinit var interactor: LocaleSettingsInteractor @@ -33,7 +36,6 @@ class LocaleSettingsFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setHasOptionsMenu(true) } override fun onCreateView( @@ -63,7 +65,7 @@ class LocaleSettingsFragment : Fragment() { return view } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.languages_list, menu) val searchItem = menu.findItem(R.id.search) val searchView: SearchView = searchItem.actionView as SearchView @@ -85,6 +87,8 @@ class LocaleSettingsFragment : Fragment() { ) } + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = false + override fun onResume() { super.onResume() localeView.onResume() @@ -98,6 +102,8 @@ class LocaleSettingsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + consumeFrom(localeSettingsStore) { localeView.update(it) } diff --git a/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardEditorFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardEditorFragment.kt index 3fe41720c..36b5da0a6 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardEditorFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/creditcards/CreditCardEditorFragment.kt @@ -11,6 +11,8 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import androidx.appcompat.app.AlertDialog +import androidx.core.view.MenuProvider +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -34,7 +36,9 @@ import org.mozilla.fenix.settings.creditcards.view.CreditCardEditorView /** * Display a credit card editor for adding and editing a credit card. */ -class CreditCardEditorFragment : SecureFragment(R.layout.fragment_credit_card_editor) { +class CreditCardEditorFragment : + SecureFragment(R.layout.fragment_credit_card_editor), + MenuProvider { private lateinit var creditCardEditorState: CreditCardEditorState private lateinit var creditCardEditorView: CreditCardEditorView @@ -55,7 +59,7 @@ class CreditCardEditorFragment : SecureFragment(R.layout.fragment_credit_card_ed override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setHasOptionsMenu(true) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) val storage = requireContext().components.core.autofillStorage interactor = DefaultCreditCardEditorInteractor( @@ -112,7 +116,7 @@ class CreditCardEditorFragment : SecureFragment(R.layout.fragment_credit_card_ed super.onPause() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.credit_card_editor, menu) this.menu = menu @@ -120,7 +124,7 @@ class CreditCardEditorFragment : SecureFragment(R.layout.fragment_credit_card_ed } @Suppress("MagicNumber") - override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) { R.id.delete_credit_card_button -> { args.creditCard?.let { interactor.onDeleteCardButtonClicked(it.guid) } true diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt index 11eba29d7..c84583afc 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt @@ -15,8 +15,10 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import androidx.core.content.ContextCompat +import androidx.core.view.MenuProvider import androidx.core.view.isVisible import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import mozilla.components.lib.state.ext.consumeFrom @@ -40,7 +42,7 @@ import org.mozilla.fenix.settings.logins.interactor.AddLoginInteractor * Displays the editable new login information for a single website */ @Suppress("TooManyFunctions", "NestedBlockDepth", "ForbiddenComment") -class AddLoginFragment : Fragment(R.layout.fragment_add_login) { +class AddLoginFragment : Fragment(R.layout.fragment_add_login), MenuProvider { private lateinit var loginsFragmentStore: LoginsFragmentStore private lateinit var interactor: AddLoginInteractor @@ -57,7 +59,7 @@ class AddLoginFragment : Fragment(R.layout.fragment_add_login) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setHasOptionsMenu(true) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) _binding = FragmentAddLoginBinding.bind(view) @@ -332,7 +334,7 @@ class AddLoginFragment : Fragment(R.layout.fragment_add_login) { activity?.invalidateOptionsMenu() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.login_save, menu) } @@ -356,7 +358,7 @@ class AddLoginFragment : Fragment(R.layout.fragment_add_login) { showToolbar(getString(R.string.add_login)) } - override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) { R.id.save_login_button -> { view?.hideKeyboard() interactor.onAddLogin( diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/EditLoginFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/EditLoginFragment.kt index ae058e5d8..6f6d45537 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/EditLoginFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/EditLoginFragment.kt @@ -14,8 +14,10 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import androidx.core.content.ContextCompat +import androidx.core.view.MenuProvider import androidx.core.view.isVisible import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -42,7 +44,7 @@ import org.mozilla.fenix.settings.logins.togglePasswordReveal * Displays the editable saved login information for a single website */ @Suppress("TooManyFunctions", "NestedBlockDepth", "ForbiddenComment") -class EditLoginFragment : Fragment(R.layout.fragment_edit_login) { +class EditLoginFragment : Fragment(R.layout.fragment_edit_login), MenuProvider { private val args by navArgs() private lateinit var loginsFragmentStore: LoginsFragmentStore @@ -62,7 +64,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setHasOptionsMenu(true) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) _binding = FragmentEditLoginBinding.bind(view) @@ -278,7 +280,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) { activity?.invalidateOptionsMenu() } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.login_save, menu) } @@ -299,7 +301,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) { super.onPause() } - override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) { R.id.save_login_button -> { view?.hideKeyboard() interactor.onSaveLogin( diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt index 01e3c8b1f..5d2245c87 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt @@ -15,6 +15,8 @@ import android.view.View import android.view.ViewGroup import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog +import androidx.core.view.MenuProvider +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -47,7 +49,7 @@ import org.mozilla.fenix.settings.logins.view.LoginDetailsBindingDelegate * Displays saved login information for a single website. */ @Suppress("TooManyFunctions", "ForbiddenComment") -class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail) { +class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail), MenuProvider { private val args by navArgs() private var login: SavedLogin? = null @@ -79,6 +81,7 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) interactor = LoginDetailInteractor( SavedLoginsStorageController( @@ -103,11 +106,6 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail) { togglePasswordReveal(binding.passwordText, binding.revealPasswordButton) } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - /** * As described in #10727, the User should re-auth if the fragment is paused and the user is not * navigating to SavedLoginsFragment or EditLoginFragment @@ -157,12 +155,12 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail) { ) } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.login_options_menu, menu) this.menu = menu } - override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { + override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) { R.id.delete_login_button -> { displayDeleteLoginDialog() true diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt index 9291fd976..2d02903a9 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater +import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo @@ -16,6 +17,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.MenuProvider +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import mozilla.components.concept.menu.MenuController @@ -42,7 +45,7 @@ import org.mozilla.fenix.settings.logins.interactor.SavedLoginsInteractor import org.mozilla.fenix.settings.logins.view.SavedLoginsListView @SuppressWarnings("TooManyFunctions") -class SavedLoginsFragment : SecureFragment() { +class SavedLoginsFragment : SecureFragment(), MenuProvider { private lateinit var savedLoginsStore: LoginsFragmentStore private lateinit var savedLoginsListView: SavedLoginsListView private lateinit var savedLoginsInteractor: SavedLoginsInteractor @@ -108,7 +111,7 @@ class SavedLoginsFragment : SecureFragment() { } } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.login_list, menu) val searchItem = menu.findItem(R.id.search) val searchView: SearchView = searchItem.actionView as SearchView @@ -134,6 +137,8 @@ class SavedLoginsFragment : SecureFragment() { ) } + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = false + /** * If we pause this fragment, we want to pop users back to reauth */ @@ -160,7 +165,7 @@ class SavedLoginsFragment : SecureFragment() { ) = (activity as HomeActivity).openToBrowserAndLoad(searchTermOrURL, newTab, from) private fun initToolbar() { - setHasOptionsMenu(true) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) showToolbar(getString(R.string.preferences_passwords_saved_logins)) (activity as HomeActivity).getSupportActionBarAndInflateIfNecessary() .setDisplayShowTitleEnabled(false) diff --git a/app/src/main/java/org/mozilla/fenix/settings/search/AddSearchEngineFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/search/AddSearchEngineFragment.kt index 97528cba7..da6831ba1 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/search/AddSearchEngineFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/search/AddSearchEngineFragment.kt @@ -18,7 +18,9 @@ import android.widget.CompoundButton import android.widget.LinearLayout import android.widget.RadioButton import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import kotlinx.coroutines.Dispatchers.IO @@ -45,7 +47,8 @@ import org.mozilla.fenix.settings.SupportUtils @SuppressWarnings("LargeClass", "TooManyFunctions") class AddSearchEngineFragment : Fragment(R.layout.fragment_add_search_engine), - CompoundButton.OnCheckedChangeListener { + CompoundButton.OnCheckedChangeListener, + MenuProvider { private var availableEngines: List = listOf() private var selectedIndex: Int = -1 private val engineViews = mutableListOf() @@ -56,7 +59,6 @@ class AddSearchEngineFragment : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setHasOptionsMenu(true) availableEngines = requireContext() .components @@ -71,6 +73,8 @@ class AddSearchEngineFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) + val layoutInflater = LayoutInflater.from(context) val layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, @@ -125,11 +129,11 @@ class AddSearchEngineFragment : _binding = null } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.add_custom_searchengine_menu, menu) } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.add_search_engine -> { when (selectedIndex) { @@ -143,7 +147,8 @@ class AddSearchEngineFragment : true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt index 9be8f75ed..054016960 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt @@ -9,7 +9,9 @@ import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View +import androidx.core.view.MenuProvider import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -32,7 +34,7 @@ import org.mozilla.fenix.settings.SupportUtils /** * Fragment to enter a custom search engine name and URL template. */ -class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_engine) { +class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_engine), MenuProvider { private val args by navArgs() private lateinit var searchEngine: SearchEngine @@ -43,7 +45,6 @@ class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_eng override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setHasOptionsMenu(true) searchEngine = requireNotNull( requireComponents.core.store.state.search.customSearchEngines.find { engine -> @@ -54,6 +55,7 @@ class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_eng override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED) val url = searchEngine.resultUrls[0] @@ -85,17 +87,18 @@ class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_eng _binding = null } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.edit_custom_searchengine_menu, menu) } - override fun onOptionsItemSelected(item: MenuItem): Boolean { + override fun onMenuItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.save_button -> { saveCustomEngine() true } - else -> super.onOptionsItemSelected(item) + // other options are not handled by this menu provider + else -> false } } diff --git a/detekt-baseline.xml b/detekt-baseline.xml index 7117a6d97..1016bfd23 100644 --- a/detekt-baseline.xml +++ b/detekt-baseline.xml @@ -6,11 +6,12 @@ FunctionOnlyReturningConstant:MetricsUtils.kt$MetricsUtils$ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal fun getHashingSalt(): String FunctionOnlyReturningConstant:SupportUtils.kt$SupportUtils$fun getFirefoxAccountSumoUrl(): String FunctionParameterNaming:FenixSnackbar.kt$FenixSnackbar.Companion$_view: View? - LongParameterList:BrowserToolbarController.kt$DefaultBrowserToolbarController$( private val store: BrowserStore, private val tabsUseCases: TabsUseCases, private val activity: HomeActivity, private val navController: NavController, private val readerModeController: ReaderModeController, private val engineView: EngineView, private val homeViewModel: HomeScreenViewModel, private val customTabSessionId: String?, private val browserAnimator: BrowserAnimator, private val onTabCounterClicked: () -> Unit, private val onCloseTab: (SessionState) -> Unit, ) - LongParameterList:BrowserToolbarMenuController.kt$DefaultBrowserToolbarMenuController$( private val store: BrowserStore, private val activity: HomeActivity, private val navController: NavController, private val settings: Settings, private val readerModeController: ReaderModeController, private val sessionFeature: ViewBoundFeatureWrapper<SessionFeature>, private val findInPageLauncher: () -> Unit, private val browserAnimator: BrowserAnimator, private val swipeRefresh: SwipeRefreshLayout, private val customTabSessionId: String?, private val openInFenixIntent: Intent, private val bookmarkTapped: (String, String) -> Unit, private val scope: CoroutineScope, private val tabCollectionStorage: TabCollectionStorage, private val topSitesStorage: DefaultTopSitesStorage, private val pinnedSiteStorage: PinnedSiteStorage, private val browserStore: BrowserStore, ) - LongParameterList:CrashContentIntegration.kt$CrashContentIntegration$( private val browserStore: BrowserStore, private val appStore: AppStore, private val toolbar: BrowserToolbar, private val isToolbarPlacedAtTop: Boolean, private val crashReporterView: CrashContentView, private val components: Components, private val settings: Settings, private val navController: NavController, private val sessionId: String?, ) - LongParameterList:CustomTabsIntegration.kt$CustomTabsIntegration$( store: BrowserStore, useCases: CustomTabsUseCases, toolbar: BrowserToolbar, sessionId: String, activity: Activity, onItemTapped: (ToolbarMenu.Item) -> Unit = {}, shouldReverseItems: Boolean, isPrivate: Boolean, ) - LongParameterList:DeleteBrowsingDataController.kt$DefaultDeleteBrowsingDataController$( private val removeAllTabs: TabsUseCases.RemoveAllTabsUseCase, private val removeAllDownloads: DownloadsUseCases.RemoveAllDownloadsUseCase, private val historyStorage: HistoryStorage, private val permissionStorage: PermissionStorage, private val store: BrowserStore, private val iconsStorage: BrowserIcons, private val engine: Engine, private val coroutineContext: CoroutineContext = Dispatchers.Main, ) + LongParameterList:BrowserToolbarController.kt$DefaultBrowserToolbarController$( private val store: BrowserStore, private val tabsUseCases: TabsUseCases, private val activity: HomeActivity, private val navController: NavController, private val readerModeController: ReaderModeController, private val engineView: EngineView, private val homeViewModel: HomeScreenViewModel, private val customTabSessionId: String?, private val browserAnimator: BrowserAnimator, private val onTabCounterClicked: () -> Unit, private val onCloseTab: (SessionState) -> Unit ) + LongParameterList:BrowserToolbarMenuController.kt$DefaultBrowserToolbarMenuController$( private val store: BrowserStore, private val activity: HomeActivity, private val navController: NavController, private val settings: Settings, private val readerModeController: ReaderModeController, private val sessionFeature: ViewBoundFeatureWrapper<SessionFeature>, private val findInPageLauncher: () -> Unit, private val browserAnimator: BrowserAnimator, private val swipeRefresh: SwipeRefreshLayout, private val customTabSessionId: String?, private val openInFenixIntent: Intent, private val bookmarkTapped: (String, String) -> Unit, private val scope: CoroutineScope, private val tabCollectionStorage: TabCollectionStorage, private val topSitesStorage: DefaultTopSitesStorage, private val pinnedSiteStorage: PinnedSiteStorage, private val browserStore: BrowserStore ) + LongParameterList:CrashContentIntegration.kt$CrashContentIntegration$( private val browserStore: BrowserStore, private val appStore: AppStore, private val toolbar: BrowserToolbar, private val isToolbarPlacedAtTop: Boolean, private val crashReporterView: CrashContentView, private val components: Components, private val settings: Settings, private val navController: NavController, private val sessionId: String? ) + LongParameterList:CustomTabsIntegration.kt$CustomTabsIntegration$( store: BrowserStore, useCases: CustomTabsUseCases, toolbar: BrowserToolbar, sessionId: String, activity: Activity, onItemTapped: (ToolbarMenu.Item) -> Unit = {}, shouldReverseItems: Boolean, isPrivate: Boolean ) + LongParameterList:DeleteBrowsingDataController.kt$DefaultDeleteBrowsingDataController$( private val removeAllTabs: TabsUseCases.RemoveAllTabsUseCase, private val removeAllDownloads: DownloadsUseCases.RemoveAllDownloadsUseCase, private val historyStorage: HistoryStorage, private val permissionStorage: PermissionStorage, private val store: BrowserStore, private val iconsStorage: BrowserIcons, private val engine: Engine, private val coroutineContext: CoroutineContext = Dispatchers.Main ) + LongParameterList:HistoryController.kt$DefaultHistoryController$( private val store: HistoryFragmentStore, private val navController: NavController, private val scope: CoroutineScope, private val openToBrowser: (item: History.Regular) -> Unit, private val displayDeleteAll: () -> Unit, private val invalidateOptionsMenu: () -> Unit, private val deleteHistoryItems: (Set<History>) -> Unit, private val syncHistory: suspend () -> Unit, private val metrics: MetricController ) LongParameterList:QuickSettingsController.kt$DefaultQuickSettingsController$( private val context: Context, private val quickSettingsStore: QuickSettingsFragmentStore, private val browserStore: BrowserStore, private val ioScope: CoroutineScope, private val navController: NavController, @VisibleForTesting internal val sessionId: String, @VisibleForTesting internal var sitePermissions: SitePermissions?, private val settings: Settings, private val permissionStorage: PermissionStorage, private val reload: ReloadUrlUseCase, private val requestRuntimePermissions: OnNeedToRequestPermissions = { }, private val displayPermissions: () -> Unit, private val engine: Engine = context.components.core.engine, ) LongParameterList:ShareController.kt$DefaultShareController$( private val context: Context, private val shareSubject: String?, private val shareData: List<ShareData>, private val sendTabUseCases: SendTabUseCases, private val snackbar: FenixSnackbar, private val navController: NavController, private val recentAppsStorage: RecentAppsStorage, private val viewLifecycleScope: CoroutineScope, private val dispatcher: CoroutineDispatcher = Dispatchers.IO, private val dismiss: (ShareController.Result) -> Unit, ) LongParameterList:TabsTrayController.kt$DefaultTabsTrayController$( private val trayStore: TabsTrayStore, private val browserStore: BrowserStore, private val browsingModeManager: BrowsingModeManager, private val navController: NavController, private val navigateToHomeAndDeleteSession: (String) -> Unit, private val profiler: Profiler?, private val navigationInteractor: NavigationInteractor, private val tabsUseCases: TabsUseCases, private val selectTabPosition: (Int, Boolean) -> Unit, private val dismissTray: () -> Unit, private val showUndoSnackbarForTab: (Boolean) -> Unit, @VisibleForTesting internal val showCancelledDownloadWarning: (downloadCount: Int, tabId: String?, source: String?) -> Unit, ) @@ -46,7 +47,7 @@ UndocumentedPublicClass:AccountSettingsInteractor.kt$AccountSettingsUserActions UndocumentedPublicClass:AccountUiView.kt$AccountUiView UndocumentedPublicClass:ActivationPing.kt$ActivationPing - UndocumentedPublicClass:AddSearchEngineFragment.kt$AddSearchEngineFragment : FragmentOnCheckedChangeListener + UndocumentedPublicClass:AddSearchEngineFragment.kt$AddSearchEngineFragment : FragmentOnCheckedChangeListenerMenuProvider UndocumentedPublicClass:AddonDetailsBindingDelegate.kt$AddonDetailsInteractor UndocumentedPublicClass:AddonPermissionDetailsBindingDelegate.kt$AddonPermissionsDetailsInteractor UndocumentedPublicClass:AdjustMetricsService.kt$AdjustMetricsService : MetricsService @@ -145,7 +146,7 @@ UndocumentedPublicClass:DownloadAdapter.kt$DownloadAdapter : AdapterSelectionHolder UndocumentedPublicClass:DownloadController.kt$DefaultDownloadController : DownloadController UndocumentedPublicClass:DownloadController.kt$DownloadController - UndocumentedPublicClass:DownloadFragment.kt$DownloadFragment : LibraryPageFragmentUserInteractionHandler + UndocumentedPublicClass:DownloadFragment.kt$DownloadFragment : LibraryPageFragmentUserInteractionHandlerMenuProvider UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$AddItemForRemoval : DownloadFragmentAction UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$AddPendingDeletionSet : DownloadFragmentAction UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$EnterDeletionMode : DownloadFragmentAction @@ -180,7 +181,7 @@ UndocumentedPublicClass:GroupableRadioButton.kt$GroupableRadioButton UndocumentedPublicClass:HistoryController.kt$DefaultHistoryController : HistoryController UndocumentedPublicClass:HistoryController.kt$HistoryController - UndocumentedPublicClass:HistoryFragment.kt$HistoryFragment : LibraryPageFragmentUserInteractionHandler + UndocumentedPublicClass:HistoryFragment.kt$HistoryFragment : LibraryPageFragmentUserInteractionHandlerMenuProvider UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$AddItemForRemoval : HistoryFragmentAction UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$EnterDeletionMode : HistoryFragmentAction UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$ExitDeletionMode : HistoryFragmentAction @@ -229,7 +230,7 @@ UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter : Adapter UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter$ItemType UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter$LocaleDiffUtil : Callback - UndocumentedPublicClass:LocaleSettingsFragment.kt$LocaleSettingsFragment : Fragment + UndocumentedPublicClass:LocaleSettingsFragment.kt$LocaleSettingsFragment : FragmentMenuProvider UndocumentedPublicClass:LocaleSettingsInteractor.kt$LocaleSettingsInteractor : LocaleSettingsViewInteractor UndocumentedPublicClass:LocaleSettingsStore.kt$LocaleSettingsAction$Search : LocaleSettingsAction UndocumentedPublicClass:LocaleSettingsStore.kt$LocaleSettingsAction$Select : LocaleSettingsAction @@ -309,7 +310,7 @@ UndocumentedPublicClass:RecentlyClosedAdapter.kt$RecentlyClosedAdapter : ListAdapterSelectionHolder UndocumentedPublicClass:RecentlyClosedController.kt$DefaultRecentlyClosedController : RecentlyClosedController UndocumentedPublicClass:RecentlyClosedController.kt$RecentlyClosedController - UndocumentedPublicClass:RecentlyClosedFragment.kt$RecentlyClosedFragment : LibraryPageFragmentUserInteractionHandler + UndocumentedPublicClass:RecentlyClosedFragment.kt$RecentlyClosedFragment : LibraryPageFragmentUserInteractionHandlerMenuProvider UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$Change : RecentlyClosedFragmentAction UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$Deselect : RecentlyClosedFragmentAction UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$DeselectAll : RecentlyClosedFragmentAction @@ -319,7 +320,7 @@ UndocumentedPublicClass:SaveCollectionListAdapter.kt$CollectionViewHolder : ViewHolder UndocumentedPublicClass:SaveCollectionListAdapter.kt$SaveCollectionListAdapter : Adapter UndocumentedPublicClass:SavedLoginsAuthFragment.kt$SavedLoginsAuthFragment : PreferenceFragmentCompat - UndocumentedPublicClass:SavedLoginsFragment.kt$SavedLoginsFragment : SecureFragment + UndocumentedPublicClass:SavedLoginsFragment.kt$SavedLoginsFragment : SecureFragmentMenuProvider UndocumentedPublicClass:SavedLoginsSettingFragment.kt$SavedLoginsSettingFragment : PreferenceFragmentCompat UndocumentedPublicClass:SavedLoginsSortingStrategyMenu.kt$SavedLoginsSortingStrategyMenu UndocumentedPublicClass:SavedLoginsSortingStrategyMenu.kt$SavedLoginsSortingStrategyMenu$Item @@ -338,7 +339,7 @@ UndocumentedPublicClass:SecretSettingsFragment.kt$SecretSettingsFragment : PreferenceFragmentCompat UndocumentedPublicClass:SelectBookmarkFolderAdapter.kt$SelectBookmarkFolderAdapter : ListAdapter UndocumentedPublicClass:SelectBookmarkFolderAdapter.kt$SelectBookmarkFolderAdapter$BookmarkFolderViewHolder : ViewHolder - UndocumentedPublicClass:SelectBookmarkFolderFragment.kt$SelectBookmarkFolderFragment : Fragment + UndocumentedPublicClass:SelectBookmarkFolderFragment.kt$SelectBookmarkFolderFragment : FragmentMenuProvider UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu$Item UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu.Item$BookmarkTabs : Item