From 5addcca524f2b518b2e0b8157ad618c624ef7412 Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Tue, 12 Feb 2019 16:04:01 -0800 Subject: [PATCH] For #456 - Adds popover menu to menu button --- .../org/mozilla/fenix/home/HomeFragment.kt | 25 +++++++-- .../java/org/mozilla/fenix/home/HomeMenu.kt | 55 +++++++++++++++++-- .../mozilla/fenix/library/LibraryFragment.kt | 3 +- 3 files changed, 73 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index f32635e51..61b805795 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -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() .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) { diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt b/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt index c7b6cb74b..5d647ee93 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt @@ -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 -} \ No newline at end of file +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) + }) + } +} diff --git a/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt index 22e9aa45f..c298bee84 100644 --- a/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/LibraryFragment.kt @@ -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 -> {