For #25980: Replace deprecated setHasOptionsMenu with MenuProvider.

pull/543/head
mcarare 2 years ago committed by mergify[bot]
parent 2b8b6a9aca
commit d9d01db7cc

@ -16,8 +16,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.core.view.MenuProvider
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavDirections import androidx.navigation.NavDirections
import androidx.navigation.fragment.findNavController 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. * The screen that displays the user's bookmark list in their Library.
*/ */
@Suppress("TooManyFunctions", "LargeClass") @Suppress("TooManyFunctions", "LargeClass")
class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHandler { class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHandler, MenuProvider {
private lateinit var bookmarkStore: BookmarkFragmentStore private lateinit var bookmarkStore: BookmarkFragmentStore
private lateinit var bookmarkView: BookmarkView private lateinit var bookmarkView: BookmarkView
@ -134,6 +136,9 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
val accountManager = requireComponents.backgroundServices.accountManager val accountManager = requireComponents.backgroundServices.accountManager
consumeFrom(bookmarkStore) { consumeFrom(bookmarkStore) {
bookmarkView.update(it) bookmarkView.update(it)
@ -147,11 +152,6 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
} }
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
@ -176,7 +176,7 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
} }
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
when (val mode = bookmarkStore.state.mode) { when (val mode = bookmarkStore.state.mode) {
is BookmarkFragmentState.Mode.Normal -> { is BookmarkFragmentState.Mode.Normal -> {
if (mode.showMenu) { if (mode.showMenu) {
@ -205,7 +205,7 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
R.id.bookmark_search -> { R.id.bookmark_search -> {
bookmarkInteractor.onSearch() bookmarkInteractor.onSearch()
@ -251,7 +251,8 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
deleteMulti(bookmarkStore.state.mode.selectedItems) deleteMulti(bookmarkStore.state.mode.selectedItems)
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }

@ -10,8 +10,10 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.View.GONE import android.view.View.GONE
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.Navigation import androidx.navigation.Navigation
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@ -34,21 +36,18 @@ import org.mozilla.fenix.library.bookmarks.friendlyRootTitle
/** /**
* Menu to create a new bookmark folder. * 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 var _binding: FragmentEditBookmarkBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private val sharedViewModel: BookmarksSharedViewModel by activityViewModels() 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. * Hides fields for bookmark items present in the shared layout file.
*/ */
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
_binding = FragmentEditBookmarkBinding.bind(view) _binding = FragmentEditBookmarkBinding.bind(view)
binding.bookmarkUrlLabel.visibility = GONE binding.bookmarkUrlLabel.visibility = GONE
@ -87,11 +86,11 @@ class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) {
binding.bookmarkNameEdit.hideKeyboard() 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) inflater.inflate(R.menu.bookmarks_add_folder, menu)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
R.id.confirm_add_folder_button -> { R.id.confirm_add_folder_button -> {
if (binding.bookmarkNameEdit.text.isNullOrBlank()) { if (binding.bookmarkNameEdit.text.isNullOrBlank()) {
@ -116,7 +115,8 @@ class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) {
} }
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }

@ -17,8 +17,10 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.Navigation import androidx.navigation.Navigation
import androidx.navigation.fragment.findNavController 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. * 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 var _binding: FragmentEditBookmarkBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
@ -63,13 +65,9 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
private var bookmarkParent: BookmarkNode? = null private var bookmarkParent: BookmarkNode? = null
private var initialParentGuid: String? = null private var initialParentGuid: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
_binding = FragmentEditBookmarkBinding.bind(view) _binding = FragmentEditBookmarkBinding.bind(view)
@ -191,11 +189,11 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
binding.progressBarBookmark.visibility = View.GONE 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) inflater.inflate(R.menu.bookmarks_edit, menu)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
R.id.delete_bookmark_button -> { R.id.delete_bookmark_button -> {
displayDeleteBookmarkDialog() displayDeleteBookmarkDialog()
@ -206,7 +204,8 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }

@ -11,8 +11,10 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import kotlinx.coroutines.Dispatchers.IO 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.BookmarksSharedViewModel
import org.mozilla.fenix.library.bookmarks.DesktopFolders import org.mozilla.fenix.library.bookmarks.DesktopFolders
class SelectBookmarkFolderFragment : Fragment() { class SelectBookmarkFolderFragment : Fragment(), MenuProvider {
private var _binding: FragmentSelectBookmarkFolderBinding? = null private var _binding: FragmentSelectBookmarkFolderBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private val sharedViewModel: BookmarksSharedViewModel by activityViewModels() private val sharedViewModel: BookmarksSharedViewModel by activityViewModels()
private var bookmarkNode: BookmarkNode? = null 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? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentSelectBookmarkFolderBinding.inflate(inflater, container, false) _binding = FragmentSelectBookmarkFolderBinding.inflate(inflater, container, false)
return binding.root return binding.root
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
}
override fun onDestroyView() { override fun onDestroyView() {
super.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() val args: SelectBookmarkFolderFragmentArgs by navArgs()
if (!args.allowCreatingNewFolder) { if (!args.allowCreatingNewFolder) {
inflater.inflate(R.menu.bookmarks_select_folder, menu) inflater.inflate(R.menu.bookmarks_select_folder, menu)
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
R.id.add_folder_button -> { R.id.add_folder_button -> {
viewLifecycleOwner.lifecycleScope.launch(Main) { viewLifecycleOwner.lifecycleScope.launch(Main) {
@ -91,7 +93,8 @@ class SelectBookmarkFolderFragment : Fragment() {
} }
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }
} }

@ -14,6 +14,8 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
@ -38,7 +40,7 @@ import org.mozilla.fenix.library.LibraryPageFragment
import org.mozilla.fenix.utils.allowUndo import org.mozilla.fenix.utils.allowUndo
@SuppressWarnings("TooManyFunctions", "LargeClass") @SuppressWarnings("TooManyFunctions", "LargeClass")
class DownloadFragment : LibraryPageFragment<DownloadItem>(), UserInteractionHandler { class DownloadFragment : LibraryPageFragment<DownloadItem>(), UserInteractionHandler, MenuProvider {
private lateinit var downloadStore: DownloadFragmentStore private lateinit var downloadStore: DownloadFragmentStore
private lateinit var downloadView: DownloadView private lateinit var downloadView: DownloadView
private lateinit var downloadInteractor: DownloadInteractor private lateinit var downloadInteractor: DownloadInteractor
@ -116,7 +118,6 @@ class DownloadFragment : LibraryPageFragment<DownloadItem>(), UserInteractionHan
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
} }
/** /**
@ -140,6 +141,8 @@ class DownloadFragment : LibraryPageFragment<DownloadItem>(), UserInteractionHan
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
consumeFrom(downloadStore) { consumeFrom(downloadStore) {
downloadView.update(it) downloadView.update(it)
} }
@ -150,7 +153,7 @@ class DownloadFragment : LibraryPageFragment<DownloadItem>(), UserInteractionHan
showToolbar(getString(R.string.library_downloads)) 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) { val menuRes = when (downloadStore.state.mode) {
is DownloadFragmentState.Mode.Normal -> R.menu.library_menu is DownloadFragmentState.Mode.Normal -> R.menu.library_menu
is DownloadFragmentState.Mode.Editing -> R.menu.download_select_multi is DownloadFragmentState.Mode.Editing -> R.menu.download_select_multi
@ -163,7 +166,7 @@ class DownloadFragment : LibraryPageFragment<DownloadItem>(), UserInteractionHan
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { override fun onMenuItemSelected(item: MenuItem): Boolean = when (item.itemId) {
R.id.close_history -> { R.id.close_history -> {
close() close()
true true
@ -181,7 +184,8 @@ class DownloadFragment : LibraryPageFragment<DownloadItem>(), UserInteractionHan
} }
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
/** /**

@ -17,7 +17,9 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.MenuProvider
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavDirections import androidx.navigation.NavDirections
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@ -57,7 +59,7 @@ import org.mozilla.fenix.utils.allowUndo
import org.mozilla.fenix.GleanMetrics.History as GleanHistory import org.mozilla.fenix.GleanMetrics.History as GleanHistory
@SuppressWarnings("TooManyFunctions", "LargeClass") @SuppressWarnings("TooManyFunctions", "LargeClass")
class HistoryFragment : LibraryPageFragment<History>(), UserInteractionHandler { class HistoryFragment : LibraryPageFragment<History>(), UserInteractionHandler, MenuProvider {
private lateinit var historyStore: HistoryFragmentStore private lateinit var historyStore: HistoryFragmentStore
private lateinit var historyInteractor: HistoryInteractor private lateinit var historyInteractor: HistoryInteractor
private lateinit var historyProvider: DefaultPagedHistoryProvider private lateinit var historyProvider: DefaultPagedHistoryProvider
@ -154,8 +156,6 @@ class HistoryFragment : LibraryPageFragment<History>(), UserInteractionHandler {
historyProvider = DefaultPagedHistoryProvider(requireComponents.core.historyStorage) historyProvider = DefaultPagedHistoryProvider(requireComponents.core.historyStorage)
GleanHistory.opened.record(NoExtras()) GleanHistory.opened.record(NoExtras())
setHasOptionsMenu(true)
} }
private fun deleteSnackbar( private fun deleteSnackbar(
@ -186,6 +186,7 @@ class HistoryFragment : LibraryPageFragment<History>(), UserInteractionHandler {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
consumeFrom(historyStore) { consumeFrom(historyStore) {
historyView.update(it) historyView.update(it)
@ -212,7 +213,7 @@ class HistoryFragment : LibraryPageFragment<History>(), UserInteractionHandler {
(activity as NavHostActivity).getSupportActionBarAndInflateIfNecessary().show() (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) { if (historyStore.state.mode is HistoryFragmentState.Mode.Editing) {
inflater.inflate(R.menu.history_select_multi, menu) inflater.inflate(R.menu.history_select_multi, menu)
menu.findItem(R.id.share_history_multi_select)?.isVisible = true menu.findItem(R.id.share_history_multi_select)?.isVisible = true
@ -229,7 +230,7 @@ class HistoryFragment : LibraryPageFragment<History>(), 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 -> { R.id.share_history_multi_select -> {
val selectedHistory = historyStore.state.mode.selectedItems val selectedHistory = historyStore.state.mode.selectedItems
val shareTabs = mutableListOf<ShareData>() val shareTabs = mutableListOf<ShareData>()
@ -294,7 +295,8 @@ class HistoryFragment : LibraryPageFragment<History>(), UserInteractionHandler {
historyInteractor.onDeleteTimeRange() historyInteractor.onDeleteTimeRange()
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
private fun showTabTray() { private fun showTabTray() {

@ -16,7 +16,9 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.MenuProvider
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.lifecycle.Lifecycle
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -51,7 +53,7 @@ import org.mozilla.fenix.utils.allowUndo
*/ */
@SuppressWarnings("TooManyFunctions") @SuppressWarnings("TooManyFunctions")
class HistoryMetadataGroupFragment : class HistoryMetadataGroupFragment :
LibraryPageFragment<History.Metadata>(), UserInteractionHandler { LibraryPageFragment<History.Metadata>(), UserInteractionHandler, MenuProvider {
private lateinit var historyMetadataGroupStore: HistoryMetadataGroupFragmentStore private lateinit var historyMetadataGroupStore: HistoryMetadataGroupFragmentStore
private lateinit var interactor: HistoryMetadataGroupInteractor private lateinit var interactor: HistoryMetadataGroupInteractor
@ -67,11 +69,6 @@ class HistoryMetadataGroupFragment :
override val selectedItems: Set<History.Metadata> override val selectedItems: Set<History.Metadata>
get() = historyMetadataGroupStore.state.items.filter { it.selected }.toSet() get() = historyMetadataGroupStore.state.items.filter { it.selected }.toSet()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
@ -121,6 +118,8 @@ class HistoryMetadataGroupFragment :
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
consumeFrom(historyMetadataGroupStore) { state -> consumeFrom(historyMetadataGroupStore) { state ->
historyMetadataGroupView.update(state) historyMetadataGroupView.update(state)
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()
@ -150,7 +149,7 @@ class HistoryMetadataGroupFragment :
override fun onBackPressed(): Boolean = interactor.onBackPressed(selectedItems) override fun onBackPressed(): Boolean = interactor.onBackPressed(selectedItems)
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
if (selectedItems.isNotEmpty()) { if (selectedItems.isNotEmpty()) {
inflater.inflate(R.menu.history_select_multi, menu) 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) { return when (item.itemId) {
R.id.share_history_multi_select -> { R.id.share_history_multi_select -> {
interactor.onShareMenuItem(selectedItems) interactor.onShareMenuItem(selectedItems)
@ -199,7 +198,8 @@ class HistoryMetadataGroupFragment :
interactor.onDeleteAll() interactor.onDeleteAll()
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }

@ -12,6 +12,8 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
@ -35,7 +37,10 @@ import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.library.LibraryPageFragment import org.mozilla.fenix.library.LibraryPageFragment
@Suppress("TooManyFunctions") @Suppress("TooManyFunctions")
class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserInteractionHandler { class RecentlyClosedFragment :
LibraryPageFragment<RecoverableTab>(),
UserInteractionHandler,
MenuProvider {
private lateinit var recentlyClosedFragmentStore: RecentlyClosedFragmentStore private lateinit var recentlyClosedFragmentStore: RecentlyClosedFragmentStore
private var _recentlyClosedFragmentView: RecentlyClosedFragmentView? = null private var _recentlyClosedFragmentView: RecentlyClosedFragmentView? = null
private val recentlyClosedFragmentView: RecentlyClosedFragmentView private val recentlyClosedFragmentView: RecentlyClosedFragmentView
@ -49,7 +54,7 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
showToolbar(getString(R.string.library_recently_closed_tabs)) 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()) { if (recentlyClosedFragmentStore.state.selectedTabs.isNotEmpty()) {
inflater.inflate(R.menu.history_select_multi, menu) inflater.inflate(R.menu.history_select_multi, menu)
menu.findItem(R.id.delete_history_multi_select)?.let { deleteItem -> menu.findItem(R.id.delete_history_multi_select)?.let { deleteItem ->
@ -61,7 +66,7 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onMenuItemSelected(item: MenuItem): Boolean {
val selectedTabs = recentlyClosedFragmentStore.state.selectedTabs val selectedTabs = recentlyClosedFragmentStore.state.selectedTabs
return when (item.itemId) { return when (item.itemId) {
@ -86,13 +91,13 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
recentlyClosedController.handleOpen(selectedTabs, BrowsingMode.Private) recentlyClosedController.handleOpen(selectedTabs, BrowsingMode.Private)
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
RecentlyClosedTabs.opened.record(NoExtras()) RecentlyClosedTabs.opened.record(NoExtras())
} }
@ -144,6 +149,8 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
consumeFrom(recentlyClosedFragmentStore) { state -> consumeFrom(recentlyClosedFragmentStore) { state ->
recentlyClosedFragmentView.update(state) recentlyClosedFragmentView.update(state)
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()

@ -9,6 +9,8 @@ import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs 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. * 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 addressEditorView: AddressEditorView
private lateinit var interactor: AddressEditorInteractor private lateinit var interactor: AddressEditorInteractor
@ -44,6 +46,7 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
val storage = requireContext().components.core.autofillStorage val storage = requireContext().components.core.autofillStorage
@ -56,7 +59,6 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) {
) )
val binding = FragmentAddressEditorBinding.bind(view) val binding = FragmentAddressEditorBinding.bind(view)
setHasOptionsMenu(true)
val searchRegion = requireComponents.core.store.state.search.region val searchRegion = requireComponents.core.store.state.search.region
addressEditorView = AddressEditorView(binding, interactor, searchRegion, args.address) addressEditorView = AddressEditorView(binding, interactor, searchRegion, args.address)
@ -82,14 +84,14 @@ class AddressEditorFragment : SecureFragment(R.layout.fragment_address_editor) {
this.view?.hideKeyboard() this.view?.hideKeyboard()
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.address_editor, menu) inflater.inflate(R.menu.address_editor, menu)
this.menu = menu this.menu = menu
menu.findItem(R.id.delete_address_button).isVisible = isEditing 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 -> { R.id.delete_address_button -> {
args.address?.let { args.address?.let {
addressEditorView.showConfirmDeleteAddressDialog(requireContext(), it.guid) addressEditorView.showConfirmDeleteAddressDialog(requireContext(), it.guid)

@ -8,11 +8,14 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.support.ktx.android.view.hideKeyboard import mozilla.components.support.ktx.android.view.hideKeyboard
import mozilla.components.support.locale.LocaleUseCases 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.components
import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.ext.showToolbar
class LocaleSettingsFragment : Fragment() { class LocaleSettingsFragment : Fragment(), MenuProvider {
private lateinit var localeSettingsStore: LocaleSettingsStore private lateinit var localeSettingsStore: LocaleSettingsStore
private lateinit var interactor: LocaleSettingsInteractor private lateinit var interactor: LocaleSettingsInteractor
@ -33,7 +36,6 @@ class LocaleSettingsFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
} }
override fun onCreateView( override fun onCreateView(
@ -63,7 +65,7 @@ class LocaleSettingsFragment : Fragment() {
return view return view
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.languages_list, menu) inflater.inflate(R.menu.languages_list, menu)
val searchItem = menu.findItem(R.id.search) val searchItem = menu.findItem(R.id.search)
val searchView: SearchView = searchItem.actionView as SearchView val searchView: SearchView = searchItem.actionView as SearchView
@ -85,6 +87,8 @@ class LocaleSettingsFragment : Fragment() {
) )
} }
override fun onMenuItemSelected(menuItem: MenuItem): Boolean = false
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
localeView.onResume() localeView.onResume()
@ -98,6 +102,8 @@ class LocaleSettingsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
consumeFrom(localeSettingsStore) { consumeFrom(localeSettingsStore) {
localeView.update(it) localeView.update(it)
} }

@ -11,6 +11,8 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs 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. * 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 creditCardEditorState: CreditCardEditorState
private lateinit var creditCardEditorView: CreditCardEditorView 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?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true) requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
val storage = requireContext().components.core.autofillStorage val storage = requireContext().components.core.autofillStorage
interactor = DefaultCreditCardEditorInteractor( interactor = DefaultCreditCardEditorInteractor(
@ -112,7 +116,7 @@ class CreditCardEditorFragment : SecureFragment(R.layout.fragment_credit_card_ed
super.onPause() super.onPause()
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.credit_card_editor, menu) inflater.inflate(R.menu.credit_card_editor, menu)
this.menu = menu this.menu = menu
@ -120,7 +124,7 @@ class CreditCardEditorFragment : SecureFragment(R.layout.fragment_credit_card_ed
} }
@Suppress("MagicNumber") @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 -> { R.id.delete_credit_card_button -> {
args.creditCard?.let { interactor.onDeleteCardButtonClicked(it.guid) } args.creditCard?.let { interactor.onDeleteCardButtonClicked(it.guid) }
true true

@ -15,8 +15,10 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.MenuProvider
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import mozilla.components.lib.state.ext.consumeFrom 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 * Displays the editable new login information for a single website
*/ */
@Suppress("TooManyFunctions", "NestedBlockDepth", "ForbiddenComment") @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 loginsFragmentStore: LoginsFragmentStore
private lateinit var interactor: AddLoginInteractor private lateinit var interactor: AddLoginInteractor
@ -57,7 +59,7 @@ class AddLoginFragment : Fragment(R.layout.fragment_add_login) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true) requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
_binding = FragmentAddLoginBinding.bind(view) _binding = FragmentAddLoginBinding.bind(view)
@ -332,7 +334,7 @@ class AddLoginFragment : Fragment(R.layout.fragment_add_login) {
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.login_save, menu) 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)) 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 -> { R.id.save_login_button -> {
view?.hideKeyboard() view?.hideKeyboard()
interactor.onAddLogin( interactor.onAddLogin(

@ -14,8 +14,10 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.MenuProvider
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs 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 * Displays the editable saved login information for a single website
*/ */
@Suppress("TooManyFunctions", "NestedBlockDepth", "ForbiddenComment") @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<EditLoginFragmentArgs>() private val args by navArgs<EditLoginFragmentArgs>()
private lateinit var loginsFragmentStore: LoginsFragmentStore private lateinit var loginsFragmentStore: LoginsFragmentStore
@ -62,7 +64,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true) requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
_binding = FragmentEditLoginBinding.bind(view) _binding = FragmentEditLoginBinding.bind(view)
@ -278,7 +280,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.login_save, menu) inflater.inflate(R.menu.login_save, menu)
} }
@ -299,7 +301,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
super.onPause() 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 -> { R.id.save_login_button -> {
view?.hideKeyboard() view?.hideKeyboard()
interactor.onSaveLogin( interactor.onSaveLogin(

@ -15,6 +15,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs 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. * Displays saved login information for a single website.
*/ */
@Suppress("TooManyFunctions", "ForbiddenComment") @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<LoginDetailFragmentArgs>() private val args by navArgs<LoginDetailFragmentArgs>()
private var login: SavedLogin? = null private var login: SavedLogin? = null
@ -79,6 +81,7 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
interactor = LoginDetailInteractor( interactor = LoginDetailInteractor(
SavedLoginsStorageController( SavedLoginsStorageController(
@ -103,11 +106,6 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail) {
togglePasswordReveal(binding.passwordText, binding.revealPasswordButton) 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 * As described in #10727, the User should re-auth if the fragment is paused and the user is not
* navigating to SavedLoginsFragment or EditLoginFragment * 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) inflater.inflate(R.menu.login_options_menu, menu)
this.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 -> { R.id.delete_login_button -> {
displayDeleteLoginDialog() displayDeleteLoginDialog()
true true

@ -8,6 +8,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
@ -16,6 +17,8 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import mozilla.components.concept.menu.MenuController 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 import org.mozilla.fenix.settings.logins.view.SavedLoginsListView
@SuppressWarnings("TooManyFunctions") @SuppressWarnings("TooManyFunctions")
class SavedLoginsFragment : SecureFragment() { class SavedLoginsFragment : SecureFragment(), MenuProvider {
private lateinit var savedLoginsStore: LoginsFragmentStore private lateinit var savedLoginsStore: LoginsFragmentStore
private lateinit var savedLoginsListView: SavedLoginsListView private lateinit var savedLoginsListView: SavedLoginsListView
private lateinit var savedLoginsInteractor: SavedLoginsInteractor 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) inflater.inflate(R.menu.login_list, menu)
val searchItem = menu.findItem(R.id.search) val searchItem = menu.findItem(R.id.search)
val searchView: SearchView = searchItem.actionView as SearchView 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 * 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) ) = (activity as HomeActivity).openToBrowserAndLoad(searchTermOrURL, newTab, from)
private fun initToolbar() { private fun initToolbar() {
setHasOptionsMenu(true) requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
showToolbar(getString(R.string.preferences_passwords_saved_logins)) showToolbar(getString(R.string.preferences_passwords_saved_logins))
(activity as HomeActivity).getSupportActionBarAndInflateIfNecessary() (activity as HomeActivity).getSupportActionBarAndInflateIfNecessary()
.setDisplayShowTitleEnabled(false) .setDisplayShowTitleEnabled(false)

@ -18,7 +18,9 @@ import android.widget.CompoundButton
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.RadioButton import android.widget.RadioButton
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@ -45,7 +47,8 @@ import org.mozilla.fenix.settings.SupportUtils
@SuppressWarnings("LargeClass", "TooManyFunctions") @SuppressWarnings("LargeClass", "TooManyFunctions")
class AddSearchEngineFragment : class AddSearchEngineFragment :
Fragment(R.layout.fragment_add_search_engine), Fragment(R.layout.fragment_add_search_engine),
CompoundButton.OnCheckedChangeListener { CompoundButton.OnCheckedChangeListener,
MenuProvider {
private var availableEngines: List<SearchEngine> = listOf() private var availableEngines: List<SearchEngine> = listOf()
private var selectedIndex: Int = -1 private var selectedIndex: Int = -1
private val engineViews = mutableListOf<View>() private val engineViews = mutableListOf<View>()
@ -56,7 +59,6 @@ class AddSearchEngineFragment :
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
availableEngines = requireContext() availableEngines = requireContext()
.components .components
@ -71,6 +73,8 @@ class AddSearchEngineFragment :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
val layoutInflater = LayoutInflater.from(context) val layoutInflater = LayoutInflater.from(context)
val layoutParams = ViewGroup.LayoutParams( val layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@ -125,11 +129,11 @@ class AddSearchEngineFragment :
_binding = null _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) 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) { return when (item.itemId) {
R.id.add_search_engine -> { R.id.add_search_engine -> {
when (selectedIndex) { when (selectedIndex) {
@ -143,7 +147,8 @@ class AddSearchEngineFragment :
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }

@ -9,7 +9,9 @@ import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs 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. * 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<EditCustomSearchEngineFragmentArgs>() private val args by navArgs<EditCustomSearchEngineFragmentArgs>()
private lateinit var searchEngine: SearchEngine private lateinit var searchEngine: SearchEngine
@ -43,7 +45,6 @@ class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_eng
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
searchEngine = requireNotNull( searchEngine = requireNotNull(
requireComponents.core.store.state.search.customSearchEngines.find { engine -> 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?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
val url = searchEngine.resultUrls[0] val url = searchEngine.resultUrls[0]
@ -85,17 +87,18 @@ class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_eng
_binding = null _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) 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) { return when (item.itemId) {
R.id.save_button -> { R.id.save_button -> {
saveCustomEngine() saveCustomEngine()
true true
} }
else -> super.onOptionsItemSelected(item) // other options are not handled by this menu provider
else -> false
} }
} }

@ -6,11 +6,12 @@
<ID>FunctionOnlyReturningConstant:MetricsUtils.kt$MetricsUtils$ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal fun getHashingSalt(): String</ID> <ID>FunctionOnlyReturningConstant:MetricsUtils.kt$MetricsUtils$ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal fun getHashingSalt(): String</ID>
<ID>FunctionOnlyReturningConstant:SupportUtils.kt$SupportUtils$fun getFirefoxAccountSumoUrl(): String</ID> <ID>FunctionOnlyReturningConstant:SupportUtils.kt$SupportUtils$fun getFirefoxAccountSumoUrl(): String</ID>
<ID>FunctionParameterNaming:FenixSnackbar.kt$FenixSnackbar.Companion$_view: View?</ID> <ID>FunctionParameterNaming:FenixSnackbar.kt$FenixSnackbar.Companion$_view: View?</ID>
<ID>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: () -&gt; Unit, private val onCloseTab: (SessionState) -&gt; Unit, )</ID> <ID>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: () -&gt; Unit, private val onCloseTab: (SessionState) -&gt; Unit )</ID>
<ID>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&lt;SessionFeature&gt;, private val findInPageLauncher: () -&gt; Unit, private val browserAnimator: BrowserAnimator, private val swipeRefresh: SwipeRefreshLayout, private val customTabSessionId: String?, private val openInFenixIntent: Intent, private val bookmarkTapped: (String, String) -&gt; Unit, private val scope: CoroutineScope, private val tabCollectionStorage: TabCollectionStorage, private val topSitesStorage: DefaultTopSitesStorage, private val pinnedSiteStorage: PinnedSiteStorage, private val browserStore: BrowserStore, )</ID> <ID>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&lt;SessionFeature&gt;, private val findInPageLauncher: () -&gt; Unit, private val browserAnimator: BrowserAnimator, private val swipeRefresh: SwipeRefreshLayout, private val customTabSessionId: String?, private val openInFenixIntent: Intent, private val bookmarkTapped: (String, String) -&gt; Unit, private val scope: CoroutineScope, private val tabCollectionStorage: TabCollectionStorage, private val topSitesStorage: DefaultTopSitesStorage, private val pinnedSiteStorage: PinnedSiteStorage, private val browserStore: BrowserStore )</ID>
<ID>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?, )</ID> <ID>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? )</ID>
<ID>LongParameterList:CustomTabsIntegration.kt$CustomTabsIntegration$( store: BrowserStore, useCases: CustomTabsUseCases, toolbar: BrowserToolbar, sessionId: String, activity: Activity, onItemTapped: (ToolbarMenu.Item) -&gt; Unit = {}, shouldReverseItems: Boolean, isPrivate: Boolean, )</ID> <ID>LongParameterList:CustomTabsIntegration.kt$CustomTabsIntegration$( store: BrowserStore, useCases: CustomTabsUseCases, toolbar: BrowserToolbar, sessionId: String, activity: Activity, onItemTapped: (ToolbarMenu.Item) -&gt; Unit = {}, shouldReverseItems: Boolean, isPrivate: Boolean )</ID>
<ID>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, )</ID> <ID>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 )</ID>
<ID>LongParameterList:HistoryController.kt$DefaultHistoryController$( private val store: HistoryFragmentStore, private val navController: NavController, private val scope: CoroutineScope, private val openToBrowser: (item: History.Regular) -&gt; Unit, private val displayDeleteAll: () -&gt; Unit, private val invalidateOptionsMenu: () -&gt; Unit, private val deleteHistoryItems: (Set&lt;History&gt;) -&gt; Unit, private val syncHistory: suspend () -&gt; Unit, private val metrics: MetricController )</ID>
<ID>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: () -&gt; Unit, private val engine: Engine = context.components.core.engine, )</ID> <ID>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: () -&gt; Unit, private val engine: Engine = context.components.core.engine, )</ID>
<ID>LongParameterList:ShareController.kt$DefaultShareController$( private val context: Context, private val shareSubject: String?, private val shareData: List&lt;ShareData&gt;, 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) -&gt; Unit, )</ID> <ID>LongParameterList:ShareController.kt$DefaultShareController$( private val context: Context, private val shareSubject: String?, private val shareData: List&lt;ShareData&gt;, 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) -&gt; Unit, )</ID>
<ID>LongParameterList:TabsTrayController.kt$DefaultTabsTrayController$( private val trayStore: TabsTrayStore, private val browserStore: BrowserStore, private val browsingModeManager: BrowsingModeManager, private val navController: NavController, private val navigateToHomeAndDeleteSession: (String) -&gt; Unit, private val profiler: Profiler?, private val navigationInteractor: NavigationInteractor, private val tabsUseCases: TabsUseCases, private val selectTabPosition: (Int, Boolean) -&gt; Unit, private val dismissTray: () -&gt; Unit, private val showUndoSnackbarForTab: (Boolean) -&gt; Unit, @VisibleForTesting internal val showCancelledDownloadWarning: (downloadCount: Int, tabId: String?, source: String?) -&gt; Unit, )</ID> <ID>LongParameterList:TabsTrayController.kt$DefaultTabsTrayController$( private val trayStore: TabsTrayStore, private val browserStore: BrowserStore, private val browsingModeManager: BrowsingModeManager, private val navController: NavController, private val navigateToHomeAndDeleteSession: (String) -&gt; Unit, private val profiler: Profiler?, private val navigationInteractor: NavigationInteractor, private val tabsUseCases: TabsUseCases, private val selectTabPosition: (Int, Boolean) -&gt; Unit, private val dismissTray: () -&gt; Unit, private val showUndoSnackbarForTab: (Boolean) -&gt; Unit, @VisibleForTesting internal val showCancelledDownloadWarning: (downloadCount: Int, tabId: String?, source: String?) -&gt; Unit, )</ID>
@ -46,7 +47,7 @@
<ID>UndocumentedPublicClass:AccountSettingsInteractor.kt$AccountSettingsUserActions</ID> <ID>UndocumentedPublicClass:AccountSettingsInteractor.kt$AccountSettingsUserActions</ID>
<ID>UndocumentedPublicClass:AccountUiView.kt$AccountUiView</ID> <ID>UndocumentedPublicClass:AccountUiView.kt$AccountUiView</ID>
<ID>UndocumentedPublicClass:ActivationPing.kt$ActivationPing</ID> <ID>UndocumentedPublicClass:ActivationPing.kt$ActivationPing</ID>
<ID>UndocumentedPublicClass:AddSearchEngineFragment.kt$AddSearchEngineFragment : FragmentOnCheckedChangeListener</ID> <ID>UndocumentedPublicClass:AddSearchEngineFragment.kt$AddSearchEngineFragment : FragmentOnCheckedChangeListenerMenuProvider</ID>
<ID>UndocumentedPublicClass:AddonDetailsBindingDelegate.kt$AddonDetailsInteractor</ID> <ID>UndocumentedPublicClass:AddonDetailsBindingDelegate.kt$AddonDetailsInteractor</ID>
<ID>UndocumentedPublicClass:AddonPermissionDetailsBindingDelegate.kt$AddonPermissionsDetailsInteractor</ID> <ID>UndocumentedPublicClass:AddonPermissionDetailsBindingDelegate.kt$AddonPermissionsDetailsInteractor</ID>
<ID>UndocumentedPublicClass:AdjustMetricsService.kt$AdjustMetricsService : MetricsService</ID> <ID>UndocumentedPublicClass:AdjustMetricsService.kt$AdjustMetricsService : MetricsService</ID>
@ -145,7 +146,7 @@
<ID>UndocumentedPublicClass:DownloadAdapter.kt$DownloadAdapter : AdapterSelectionHolder</ID> <ID>UndocumentedPublicClass:DownloadAdapter.kt$DownloadAdapter : AdapterSelectionHolder</ID>
<ID>UndocumentedPublicClass:DownloadController.kt$DefaultDownloadController : DownloadController</ID> <ID>UndocumentedPublicClass:DownloadController.kt$DefaultDownloadController : DownloadController</ID>
<ID>UndocumentedPublicClass:DownloadController.kt$DownloadController</ID> <ID>UndocumentedPublicClass:DownloadController.kt$DownloadController</ID>
<ID>UndocumentedPublicClass:DownloadFragment.kt$DownloadFragment : LibraryPageFragmentUserInteractionHandler</ID> <ID>UndocumentedPublicClass:DownloadFragment.kt$DownloadFragment : LibraryPageFragmentUserInteractionHandlerMenuProvider</ID>
<ID>UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$AddItemForRemoval : DownloadFragmentAction</ID> <ID>UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$AddItemForRemoval : DownloadFragmentAction</ID>
<ID>UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$AddPendingDeletionSet : DownloadFragmentAction</ID> <ID>UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$AddPendingDeletionSet : DownloadFragmentAction</ID>
<ID>UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$EnterDeletionMode : DownloadFragmentAction</ID> <ID>UndocumentedPublicClass:DownloadFragmentStore.kt$DownloadFragmentAction$EnterDeletionMode : DownloadFragmentAction</ID>
@ -180,7 +181,7 @@
<ID>UndocumentedPublicClass:GroupableRadioButton.kt$GroupableRadioButton</ID> <ID>UndocumentedPublicClass:GroupableRadioButton.kt$GroupableRadioButton</ID>
<ID>UndocumentedPublicClass:HistoryController.kt$DefaultHistoryController : HistoryController</ID> <ID>UndocumentedPublicClass:HistoryController.kt$DefaultHistoryController : HistoryController</ID>
<ID>UndocumentedPublicClass:HistoryController.kt$HistoryController</ID> <ID>UndocumentedPublicClass:HistoryController.kt$HistoryController</ID>
<ID>UndocumentedPublicClass:HistoryFragment.kt$HistoryFragment : LibraryPageFragmentUserInteractionHandler</ID> <ID>UndocumentedPublicClass:HistoryFragment.kt$HistoryFragment : LibraryPageFragmentUserInteractionHandlerMenuProvider</ID>
<ID>UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$AddItemForRemoval : HistoryFragmentAction</ID> <ID>UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$AddItemForRemoval : HistoryFragmentAction</ID>
<ID>UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$EnterDeletionMode : HistoryFragmentAction</ID> <ID>UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$EnterDeletionMode : HistoryFragmentAction</ID>
<ID>UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$ExitDeletionMode : HistoryFragmentAction</ID> <ID>UndocumentedPublicClass:HistoryFragmentStore.kt$HistoryFragmentAction$ExitDeletionMode : HistoryFragmentAction</ID>
@ -229,7 +230,7 @@
<ID>UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter : Adapter</ID> <ID>UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter : Adapter</ID>
<ID>UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter$ItemType</ID> <ID>UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter$ItemType</ID>
<ID>UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter$LocaleDiffUtil : Callback</ID> <ID>UndocumentedPublicClass:LocaleAdapter.kt$LocaleAdapter$LocaleDiffUtil : Callback</ID>
<ID>UndocumentedPublicClass:LocaleSettingsFragment.kt$LocaleSettingsFragment : Fragment</ID> <ID>UndocumentedPublicClass:LocaleSettingsFragment.kt$LocaleSettingsFragment : FragmentMenuProvider</ID>
<ID>UndocumentedPublicClass:LocaleSettingsInteractor.kt$LocaleSettingsInteractor : LocaleSettingsViewInteractor</ID> <ID>UndocumentedPublicClass:LocaleSettingsInteractor.kt$LocaleSettingsInteractor : LocaleSettingsViewInteractor</ID>
<ID>UndocumentedPublicClass:LocaleSettingsStore.kt$LocaleSettingsAction$Search : LocaleSettingsAction</ID> <ID>UndocumentedPublicClass:LocaleSettingsStore.kt$LocaleSettingsAction$Search : LocaleSettingsAction</ID>
<ID>UndocumentedPublicClass:LocaleSettingsStore.kt$LocaleSettingsAction$Select : LocaleSettingsAction</ID> <ID>UndocumentedPublicClass:LocaleSettingsStore.kt$LocaleSettingsAction$Select : LocaleSettingsAction</ID>
@ -309,7 +310,7 @@
<ID>UndocumentedPublicClass:RecentlyClosedAdapter.kt$RecentlyClosedAdapter : ListAdapterSelectionHolder</ID> <ID>UndocumentedPublicClass:RecentlyClosedAdapter.kt$RecentlyClosedAdapter : ListAdapterSelectionHolder</ID>
<ID>UndocumentedPublicClass:RecentlyClosedController.kt$DefaultRecentlyClosedController : RecentlyClosedController</ID> <ID>UndocumentedPublicClass:RecentlyClosedController.kt$DefaultRecentlyClosedController : RecentlyClosedController</ID>
<ID>UndocumentedPublicClass:RecentlyClosedController.kt$RecentlyClosedController</ID> <ID>UndocumentedPublicClass:RecentlyClosedController.kt$RecentlyClosedController</ID>
<ID>UndocumentedPublicClass:RecentlyClosedFragment.kt$RecentlyClosedFragment : LibraryPageFragmentUserInteractionHandler</ID> <ID>UndocumentedPublicClass:RecentlyClosedFragment.kt$RecentlyClosedFragment : LibraryPageFragmentUserInteractionHandlerMenuProvider</ID>
<ID>UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$Change : RecentlyClosedFragmentAction</ID> <ID>UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$Change : RecentlyClosedFragmentAction</ID>
<ID>UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$Deselect : RecentlyClosedFragmentAction</ID> <ID>UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$Deselect : RecentlyClosedFragmentAction</ID>
<ID>UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$DeselectAll : RecentlyClosedFragmentAction</ID> <ID>UndocumentedPublicClass:RecentlyClosedFragmentStore.kt$RecentlyClosedFragmentAction$DeselectAll : RecentlyClosedFragmentAction</ID>
@ -319,7 +320,7 @@
<ID>UndocumentedPublicClass:SaveCollectionListAdapter.kt$CollectionViewHolder : ViewHolder</ID> <ID>UndocumentedPublicClass:SaveCollectionListAdapter.kt$CollectionViewHolder : ViewHolder</ID>
<ID>UndocumentedPublicClass:SaveCollectionListAdapter.kt$SaveCollectionListAdapter : Adapter</ID> <ID>UndocumentedPublicClass:SaveCollectionListAdapter.kt$SaveCollectionListAdapter : Adapter</ID>
<ID>UndocumentedPublicClass:SavedLoginsAuthFragment.kt$SavedLoginsAuthFragment : PreferenceFragmentCompat</ID> <ID>UndocumentedPublicClass:SavedLoginsAuthFragment.kt$SavedLoginsAuthFragment : PreferenceFragmentCompat</ID>
<ID>UndocumentedPublicClass:SavedLoginsFragment.kt$SavedLoginsFragment : SecureFragment</ID> <ID>UndocumentedPublicClass:SavedLoginsFragment.kt$SavedLoginsFragment : SecureFragmentMenuProvider</ID>
<ID>UndocumentedPublicClass:SavedLoginsSettingFragment.kt$SavedLoginsSettingFragment : PreferenceFragmentCompat</ID> <ID>UndocumentedPublicClass:SavedLoginsSettingFragment.kt$SavedLoginsSettingFragment : PreferenceFragmentCompat</ID>
<ID>UndocumentedPublicClass:SavedLoginsSortingStrategyMenu.kt$SavedLoginsSortingStrategyMenu</ID> <ID>UndocumentedPublicClass:SavedLoginsSortingStrategyMenu.kt$SavedLoginsSortingStrategyMenu</ID>
<ID>UndocumentedPublicClass:SavedLoginsSortingStrategyMenu.kt$SavedLoginsSortingStrategyMenu$Item</ID> <ID>UndocumentedPublicClass:SavedLoginsSortingStrategyMenu.kt$SavedLoginsSortingStrategyMenu$Item</ID>
@ -338,7 +339,7 @@
<ID>UndocumentedPublicClass:SecretSettingsFragment.kt$SecretSettingsFragment : PreferenceFragmentCompat</ID> <ID>UndocumentedPublicClass:SecretSettingsFragment.kt$SecretSettingsFragment : PreferenceFragmentCompat</ID>
<ID>UndocumentedPublicClass:SelectBookmarkFolderAdapter.kt$SelectBookmarkFolderAdapter : ListAdapter</ID> <ID>UndocumentedPublicClass:SelectBookmarkFolderAdapter.kt$SelectBookmarkFolderAdapter : ListAdapter</ID>
<ID>UndocumentedPublicClass:SelectBookmarkFolderAdapter.kt$SelectBookmarkFolderAdapter$BookmarkFolderViewHolder : ViewHolder</ID> <ID>UndocumentedPublicClass:SelectBookmarkFolderAdapter.kt$SelectBookmarkFolderAdapter$BookmarkFolderViewHolder : ViewHolder</ID>
<ID>UndocumentedPublicClass:SelectBookmarkFolderFragment.kt$SelectBookmarkFolderFragment : Fragment</ID> <ID>UndocumentedPublicClass:SelectBookmarkFolderFragment.kt$SelectBookmarkFolderFragment : FragmentMenuProvider</ID>
<ID>UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu</ID> <ID>UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu</ID>
<ID>UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu$Item</ID> <ID>UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu$Item</ID>
<ID>UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu.Item$BookmarkTabs : Item</ID> <ID>UndocumentedPublicClass:SelectionMenu.kt$SelectionMenu.Item$BookmarkTabs : Item</ID>

Loading…
Cancel
Save