@ -10,11 +10,15 @@ import mozilla.components.browser.menu.item.BrowserMenuDivider
import mozilla.components.browser.menu.item.BrowserMenuImageText
import mozilla.components.browser.menu.item.BrowserMenuItemToolbar
import mozilla.components.browser.menu.item.BrowserMenuSwitch
import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
import mozilla.components.browser.session.runWithSession
import org.mozilla.fenix.DefaultThemeManager
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
class ToolbarMenu (
private val context : Context ,
private val sessionId : String ? ,
private val requestDesktopStateProvider : ( ) -> Boolean = { false } ,
private val onItemTapped : ( Item ) -> Unit = { }
) {
@ -31,6 +35,7 @@ class ToolbarMenu(
object Forward : Item ( )
object Reload : Item ( )
object ReportIssue : Item ( )
object OpenInFenix : Item ( )
}
val menuBuilder by lazy { BrowserMenuBuilder ( menuItems ) }
@ -63,82 +68,124 @@ class ToolbarMenu(
BrowserMenuItemToolbar ( listOf ( back , forward , refresh ) )
}
private val isCustomTab by lazy {
context . components . core . sessionManager . runWithSession ( sessionId ) {
it . isCustomTabSession ( )
}
}
private val menuItems by lazy {
listOf (
BrowserMenuImageText (
context . getString ( R . string . browser _menu _help ) ,
R . drawable . ic _help ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Help )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _settings ) ,
R . drawable . ic _settings ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Settings )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _library ) ,
R . drawable . ic _library ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Library )
} ,
BrowserMenuDivider ( ) ,
BrowserMenuSwitch ( context . getString ( R . string . browser _menu _desktop _site ) ,
requestDesktopStateProvider , { checked ->
onItemTapped . invoke ( Item . RequestDesktop ( checked ) )
} ) ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _find _in _page ) ,
R . drawable . mozac _ic _search ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . FindInPage )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _private _tab ) ,
R . drawable . ic _private _browsing ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . NewPrivateTab )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _new _tab ) ,
R . drawable . ic _new ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . NewTab )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _share ) ,
R . drawable . mozac _ic _share ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Share )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _report _issue ) ,
R . drawable . ic _report _issues ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . ReportIssue )
} ,
BrowserMenuDivider ( ) ,
menuToolbar
)
if ( isCustomTab ) {
listOf (
SimpleBrowserMenuItem ( context . getString ( R . string . browser _menu _powered _by ) ,
CAPTION _TEXT _SIZE ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context ) ) ,
BrowserMenuDivider ( ) ,
SimpleBrowserMenuItem ( context . getString ( R . string . browser _menu _open _in _fenix ) ,
textColorResource = DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context ) ) {
onItemTapped . invoke ( Item . OpenInFenix )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _find _in _page ) ,
R . drawable . mozac _ic _search ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . FindInPage )
} ,
BrowserMenuSwitch ( context . getString ( R . string . browser _menu _desktop _site ) ,
requestDesktopStateProvider , { checked ->
onItemTapped . invoke ( Item . RequestDesktop ( checked ) )
} ) ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _share ) ,
R . drawable . mozac _ic _share ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Share )
} ,
menuToolbar
)
} else {
listOf (
BrowserMenuImageText (
context . getString ( R . string . browser _menu _help ) ,
R . drawable . ic _help ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Help )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _settings ) ,
R . drawable . ic _settings ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Settings )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _library ) ,
R . drawable . ic _library ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Library )
} ,
BrowserMenuDivider ( ) ,
BrowserMenuSwitch ( context . getString ( R . string . browser _menu _desktop _site ) ,
requestDesktopStateProvider , { checked ->
onItemTapped . invoke ( Item . RequestDesktop ( checked ) )
} ) ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _find _in _page ) ,
R . drawable . mozac _ic _search ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . FindInPage )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _private _tab ) ,
R . drawable . ic _private _browsing ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . NewPrivateTab )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _new _tab ) ,
R . drawable . ic _new ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . NewTab )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _share ) ,
R . drawable . mozac _ic _share ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . Share )
} ,
BrowserMenuImageText (
context . getString ( R . string . browser _menu _report _issue ) ,
R . drawable . ic _report _issues ,
DefaultThemeManager . resolveAttribute ( R . attr . browserToolbarMenuIcons , context )
) {
onItemTapped . invoke ( Item . ReportIssue )
} ,
BrowserMenuDivider ( ) ,
menuToolbar
)
}
}
companion object {
const val CAPTION _TEXT _SIZE = 12f
}
}