For #456 - Adds popover menu to menu button
parent
4873d989a0
commit
5addcca524
|
@ -1,4 +1,6 @@
|
|||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.home
|
||||
|
||||
|
@ -16,6 +18,7 @@ import androidx.navigation.Navigation
|
|||
import kotlinx.android.synthetic.main.fragment_home.*
|
||||
import kotlinx.android.synthetic.main.fragment_home.view.*
|
||||
import kotlinx.android.synthetic.main.tab_list_header.view.*
|
||||
import mozilla.components.browser.menu.BrowserMenu
|
||||
import mozilla.components.browser.session.Session
|
||||
import mozilla.components.browser.session.SessionManager
|
||||
import org.mozilla.fenix.DefaultThemeManager
|
||||
|
@ -38,6 +41,7 @@ import kotlin.math.roundToInt
|
|||
class HomeFragment : Fragment() {
|
||||
private val bus = ActionBusFactory.get(this)
|
||||
private var sessionObserver: SessionManager.Observer? = null
|
||||
private lateinit var homeMenu: HomeMenu
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
|
@ -59,6 +63,7 @@ class HomeFragment : Fragment() {
|
|||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
(activity as AppCompatActivity).supportActionBar?.hide()
|
||||
setupHomeMenu()
|
||||
|
||||
getSafeManagedObservable<TabsAction>()
|
||||
.subscribe {
|
||||
|
@ -78,10 +83,10 @@ class HomeFragment : Fragment() {
|
|||
BitmapDrawable(resources, it.icon)
|
||||
}
|
||||
|
||||
// Temporary so we can easily test settings
|
||||
view.menuButton.setOnClickListener {
|
||||
val directions = HomeFragmentDirections.actionHomeFragmentToSettingsFragment()
|
||||
Navigation.findNavController(it).navigate(directions)
|
||||
homeMenu.menuBuilder.build(requireContext()).show(
|
||||
anchor = it,
|
||||
orientation = BrowserMenu.Orientation.DOWN)
|
||||
}
|
||||
|
||||
view.toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null)
|
||||
|
@ -155,6 +160,18 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setupHomeMenu() {
|
||||
homeMenu = HomeMenu(requireContext()) {
|
||||
val directions = when (it) {
|
||||
HomeMenu.Item.Settings -> HomeFragmentDirections.actionHomeFragmentToSettingsFragment()
|
||||
HomeMenu.Item.Library -> HomeFragmentDirections.actionHomeFragmentToLibraryFragment()
|
||||
HomeMenu.Item.Help -> return@HomeMenu // Not implemented yetN
|
||||
}
|
||||
|
||||
Navigation.findNavController(homeLayout).navigate(directions)
|
||||
}
|
||||
}
|
||||
|
||||
private fun subscribeToSessions(): SessionManager.Observer {
|
||||
val observer = object : SessionManager.Observer {
|
||||
override fun onSessionAdded(session: Session) {
|
||||
|
|
|
@ -1,9 +1,56 @@
|
|||
package org.mozilla.fenix.home
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
class HomeMenu {
|
||||
package org.mozilla.fenix.home
|
||||
|
||||
}
|
||||
import android.content.Context
|
||||
import mozilla.components.browser.menu.BrowserMenuBuilder
|
||||
import mozilla.components.browser.menu.item.BrowserMenuDivider
|
||||
import mozilla.components.browser.menu.item.BrowserMenuImageText
|
||||
import org.mozilla.fenix.DefaultThemeManager
|
||||
import org.mozilla.fenix.R
|
||||
|
||||
class HomeMenu(
|
||||
private val context: Context,
|
||||
private val onItemTapped: (Item) -> Unit = {}
|
||||
) {
|
||||
sealed class Item {
|
||||
object Help : Item()
|
||||
object Settings : Item()
|
||||
object Library : Item()
|
||||
}
|
||||
|
||||
val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
|
||||
|
||||
private val menuItems by lazy {
|
||||
listOf(
|
||||
BrowserMenuImageText(
|
||||
context.getString(R.string.browser_menu_settings),
|
||||
R.drawable.ic_settings,
|
||||
context.getString(R.string.browser_menu_settings),
|
||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarIcons, context)
|
||||
) {
|
||||
onItemTapped.invoke(HomeMenu.Item.Settings)
|
||||
},
|
||||
|
||||
BrowserMenuImageText(
|
||||
context.getString(R.string.browser_menu_library),
|
||||
R.drawable.ic_library,
|
||||
context.getString(R.string.browser_menu_library),
|
||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarIcons, context)
|
||||
) {
|
||||
onItemTapped.invoke(HomeMenu.Item.Library)
|
||||
},
|
||||
|
||||
BrowserMenuDivider(),
|
||||
BrowserMenuImageText(
|
||||
context.getString(R.string.browser_menu_help),
|
||||
R.drawable.ic_help,
|
||||
context.getString(R.string.browser_menu_help),
|
||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarIcons, context)
|
||||
) {
|
||||
onItemTapped.invoke(HomeMenu.Item.Help)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,8 +49,7 @@ class LibraryFragment : Fragment() {
|
|||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
R.id.libraryClose -> {
|
||||
Navigation.findNavController(requireActivity(), R.id.container)
|
||||
.popBackStack(R.id.browserFragment, false)
|
||||
Navigation.findNavController(requireActivity(), R.id.container).navigateUp()
|
||||
true
|
||||
}
|
||||
R.id.librarySearch -> {
|
||||
|
|
Loading…
Reference in New Issue