parent
78c3db1fc8
commit
33b83fb0e3
|
@ -6,6 +6,7 @@ package org.mozilla.fenix.browser
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -37,6 +38,7 @@ import mozilla.components.support.ktx.android.view.exitImmersiveModeIfNeeded
|
||||||
import org.mozilla.fenix.BrowsingModeManager
|
import org.mozilla.fenix.BrowsingModeManager
|
||||||
import org.mozilla.fenix.DefaultThemeManager
|
import org.mozilla.fenix.DefaultThemeManager
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
|
import org.mozilla.fenix.IntentReceiverActivity
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.FindInPageIntegration
|
import org.mozilla.fenix.components.FindInPageIntegration
|
||||||
import org.mozilla.fenix.components.toolbar.SearchAction
|
import org.mozilla.fenix.components.toolbar.SearchAction
|
||||||
|
@ -45,6 +47,7 @@ import org.mozilla.fenix.components.toolbar.ToolbarComponent
|
||||||
import org.mozilla.fenix.components.toolbar.ToolbarIntegration
|
import org.mozilla.fenix.components.toolbar.ToolbarIntegration
|
||||||
import org.mozilla.fenix.components.toolbar.ToolbarMenu
|
import org.mozilla.fenix.components.toolbar.ToolbarMenu
|
||||||
import org.mozilla.fenix.components.toolbar.ToolbarUIView
|
import org.mozilla.fenix.components.toolbar.ToolbarUIView
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.requireComponents
|
import org.mozilla.fenix.ext.requireComponents
|
||||||
import org.mozilla.fenix.ext.share
|
import org.mozilla.fenix.ext.share
|
||||||
import org.mozilla.fenix.mvi.ActionBusFactory
|
import org.mozilla.fenix.mvi.ActionBusFactory
|
||||||
|
@ -289,6 +292,13 @@ class BrowserFragment : Fragment(), BackHandler {
|
||||||
Navigation.findNavController(view!!).navigate(directions)
|
Navigation.findNavController(view!!).navigate(directions)
|
||||||
(activity as HomeActivity).browsingModeManager.mode = BrowsingModeManager.Mode.Normal
|
(activity as HomeActivity).browsingModeManager.mode = BrowsingModeManager.Mode.Normal
|
||||||
}
|
}
|
||||||
|
ToolbarMenu.Item.OpenInFenix -> {
|
||||||
|
val intent = Intent(context, IntentReceiverActivity::class.java)
|
||||||
|
val session = context!!.components.core.sessionManager.findSessionById(sessionId!!)
|
||||||
|
intent.action = Intent.ACTION_VIEW
|
||||||
|
intent.data = Uri.parse(session?.url)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,15 @@ import mozilla.components.browser.menu.item.BrowserMenuDivider
|
||||||
import mozilla.components.browser.menu.item.BrowserMenuImageText
|
import mozilla.components.browser.menu.item.BrowserMenuImageText
|
||||||
import mozilla.components.browser.menu.item.BrowserMenuItemToolbar
|
import mozilla.components.browser.menu.item.BrowserMenuItemToolbar
|
||||||
import mozilla.components.browser.menu.item.BrowserMenuSwitch
|
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.DefaultThemeManager
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
|
|
||||||
class ToolbarMenu(
|
class ToolbarMenu(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
|
private val sessionId: String?,
|
||||||
private val requestDesktopStateProvider: () -> Boolean = { false },
|
private val requestDesktopStateProvider: () -> Boolean = { false },
|
||||||
private val onItemTapped: (Item) -> Unit = {}
|
private val onItemTapped: (Item) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
|
@ -31,6 +35,7 @@ class ToolbarMenu(
|
||||||
object Forward : Item()
|
object Forward : Item()
|
||||||
object Reload : Item()
|
object Reload : Item()
|
||||||
object ReportIssue : Item()
|
object ReportIssue : Item()
|
||||||
|
object OpenInFenix : Item()
|
||||||
}
|
}
|
||||||
|
|
||||||
val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
|
val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
|
||||||
|
@ -63,82 +68,124 @@ class ToolbarMenu(
|
||||||
BrowserMenuItemToolbar(listOf(back, forward, refresh))
|
BrowserMenuItemToolbar(listOf(back, forward, refresh))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val isCustomTab by lazy {
|
||||||
|
context.components.core.sessionManager.runWithSession(sessionId) {
|
||||||
|
it.isCustomTabSession()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val menuItems by lazy {
|
private val menuItems by lazy {
|
||||||
listOf(
|
if (isCustomTab) {
|
||||||
BrowserMenuImageText(
|
listOf(
|
||||||
context.getString(R.string.browser_menu_help),
|
SimpleBrowserMenuItem(context.getString(R.string.browser_menu_powered_by),
|
||||||
R.drawable.ic_help,
|
CAPTION_TEXT_SIZE,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)),
|
||||||
) {
|
BrowserMenuDivider(),
|
||||||
onItemTapped.invoke(Item.Help)
|
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(
|
BrowserMenuImageText(
|
||||||
context.getString(R.string.browser_menu_settings),
|
context.getString(R.string.browser_menu_settings),
|
||||||
R.drawable.ic_settings,
|
R.drawable.ic_settings,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(Item.Settings)
|
onItemTapped.invoke(Item.Settings)
|
||||||
},
|
},
|
||||||
|
|
||||||
BrowserMenuImageText(
|
BrowserMenuImageText(
|
||||||
context.getString(R.string.browser_menu_library),
|
context.getString(R.string.browser_menu_library),
|
||||||
R.drawable.ic_library,
|
R.drawable.ic_library,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(Item.Library)
|
onItemTapped.invoke(Item.Library)
|
||||||
},
|
},
|
||||||
|
|
||||||
BrowserMenuDivider(),
|
BrowserMenuDivider(),
|
||||||
|
|
||||||
BrowserMenuSwitch(context.getString(R.string.browser_menu_desktop_site),
|
BrowserMenuSwitch(context.getString(R.string.browser_menu_desktop_site),
|
||||||
requestDesktopStateProvider, { checked ->
|
requestDesktopStateProvider, { checked ->
|
||||||
onItemTapped.invoke(Item.RequestDesktop(checked))
|
onItemTapped.invoke(Item.RequestDesktop(checked))
|
||||||
}),
|
}),
|
||||||
|
|
||||||
BrowserMenuImageText(
|
BrowserMenuImageText(
|
||||||
context.getString(R.string.browser_menu_find_in_page),
|
context.getString(R.string.browser_menu_find_in_page),
|
||||||
R.drawable.mozac_ic_search,
|
R.drawable.mozac_ic_search,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(Item.FindInPage)
|
onItemTapped.invoke(Item.FindInPage)
|
||||||
},
|
},
|
||||||
|
|
||||||
BrowserMenuImageText(
|
BrowserMenuImageText(
|
||||||
context.getString(R.string.browser_menu_private_tab),
|
context.getString(R.string.browser_menu_private_tab),
|
||||||
R.drawable.ic_private_browsing,
|
R.drawable.ic_private_browsing,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(Item.NewPrivateTab)
|
onItemTapped.invoke(Item.NewPrivateTab)
|
||||||
},
|
},
|
||||||
|
|
||||||
BrowserMenuImageText(
|
BrowserMenuImageText(
|
||||||
context.getString(R.string.browser_menu_new_tab),
|
context.getString(R.string.browser_menu_new_tab),
|
||||||
R.drawable.ic_new,
|
R.drawable.ic_new,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(Item.NewTab)
|
onItemTapped.invoke(Item.NewTab)
|
||||||
},
|
},
|
||||||
|
|
||||||
BrowserMenuImageText(
|
BrowserMenuImageText(
|
||||||
context.getString(R.string.browser_menu_share),
|
context.getString(R.string.browser_menu_share),
|
||||||
R.drawable.mozac_ic_share,
|
R.drawable.mozac_ic_share,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(Item.Share)
|
onItemTapped.invoke(Item.Share)
|
||||||
},
|
},
|
||||||
|
|
||||||
BrowserMenuImageText(
|
BrowserMenuImageText(
|
||||||
context.getString(R.string.browser_menu_report_issue),
|
context.getString(R.string.browser_menu_report_issue),
|
||||||
R.drawable.ic_report_issues,
|
R.drawable.ic_report_issues,
|
||||||
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(Item.ReportIssue)
|
onItemTapped.invoke(Item.ReportIssue)
|
||||||
},
|
},
|
||||||
|
|
||||||
BrowserMenuDivider(),
|
BrowserMenuDivider(),
|
||||||
|
|
||||||
menuToolbar
|
menuToolbar
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val CAPTION_TEXT_SIZE = 12f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ class ToolbarUIView(
|
||||||
this,
|
this,
|
||||||
view,
|
view,
|
||||||
ToolbarMenu(this,
|
ToolbarMenu(this,
|
||||||
|
sessionId = sessionId,
|
||||||
requestDesktopStateProvider = { session?.desktopMode ?: false },
|
requestDesktopStateProvider = { session?.desktopMode ?: false },
|
||||||
onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }
|
onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }
|
||||||
),
|
),
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Name of the application -->
|
<!-- Name of the application -->
|
||||||
<string name="app_name">Fenix</string>
|
<string name="app_name">Fenix</string>
|
||||||
|
|
||||||
<!-- Home Fragment -->
|
<!-- Home Fragment -->
|
||||||
<!-- Content description (not visible, for screen readers etc.): "Three dot" menu button. -->
|
<!-- Content description (not visible, for screen readers etc.): "Three dot" menu button. -->
|
||||||
<string name="content_description_menu">More options</string>
|
<string name="content_description_menu">More options</string>
|
||||||
|
@ -16,6 +17,7 @@
|
||||||
<string name="sessions_intro_description">Sessions help you return to the sites you visit often and those you\'ve just discovered. Start browsing and they\'ll begin to appear here. </string>
|
<string name="sessions_intro_description">Sessions help you return to the sites you visit often and those you\'ve just discovered. Start browsing and they\'ll begin to appear here. </string>
|
||||||
<!-- Placeholder text shown in the search bar before a user enters text -->
|
<!-- Placeholder text shown in the search bar before a user enters text -->
|
||||||
<string name="search_hint">Search or enter address</string>
|
<string name="search_hint">Search or enter address</string>
|
||||||
|
|
||||||
<!-- Private Browsing -->
|
<!-- Private Browsing -->
|
||||||
<!-- Title for private session option -->
|
<!-- Title for private session option -->
|
||||||
<string name="private_browsing_title">You\'re in a private session</string>
|
<string name="private_browsing_title">You\'re in a private session</string>
|
||||||
|
@ -23,6 +25,7 @@
|
||||||
<string name="private_browsing_explanation">Fenix clears your search and browsing history when you close your private session. While this doesn\'t make you anonymous to websites or your internet service provider, it makes it easier to keep what you do online private from anyone else who uses this device.\n\nCommon myths about private browsing</string>
|
<string name="private_browsing_explanation">Fenix clears your search and browsing history when you close your private session. While this doesn\'t make you anonymous to websites or your internet service provider, it makes it easier to keep what you do online private from anyone else who uses this device.\n\nCommon myths about private browsing</string>
|
||||||
<!-- Delete session button to erase your history in a private session -->
|
<!-- Delete session button to erase your history in a private session -->
|
||||||
<string name="private_browsing_delete_session">Delete session</string>
|
<string name="private_browsing_delete_session">Delete session</string>
|
||||||
|
|
||||||
<!-- Browser Fragment -->
|
<!-- Browser Fragment -->
|
||||||
<!-- Content description (not visible, for screen readers etc.): Navigate home -->
|
<!-- Content description (not visible, for screen readers etc.): Navigate home -->
|
||||||
<string name="browser_home_button">Home</string>
|
<string name="browser_home_button">Home</string>
|
||||||
|
@ -52,6 +55,11 @@
|
||||||
<string name="browser_menu_share">Share</string>
|
<string name="browser_menu_share">Share</string>
|
||||||
<!-- Share menu title, displayed when a user is sharing their current site -->
|
<!-- Share menu title, displayed when a user is sharing their current site -->
|
||||||
<string name="menu_share_with">Share with…</string>
|
<string name="menu_share_with">Share with…</string>
|
||||||
|
<!-- Browser menu button shown in custom tabs that opens the current tab in Fenix -->
|
||||||
|
<string name="browser_menu_open_in_fenix">Open in Fenix"</string>
|
||||||
|
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab -->
|
||||||
|
<string name="browser_menu_powered_by">POWERED BY FENIX"</string>
|
||||||
|
|
||||||
<!-- Search Fragment -->
|
<!-- Search Fragment -->
|
||||||
<!-- Button in the search view that lets a user search by scanning a QR code -->
|
<!-- Button in the search view that lets a user search by scanning a QR code -->
|
||||||
<string name="search_scan_button">Scan</string>
|
<string name="search_scan_button">Scan</string>
|
||||||
|
@ -59,9 +67,11 @@
|
||||||
<string name="search_shortcuts_button">Shortcuts</string>
|
<string name="search_shortcuts_button">Shortcuts</string>
|
||||||
<!-- Button in the search view that lets a user navigate to the site in their clipboard -->
|
<!-- Button in the search view that lets a user navigate to the site in their clipboard -->
|
||||||
<string name="awesomebar_clipboard_title">Fill link from clipboard</string>
|
<string name="awesomebar_clipboard_title">Fill link from clipboard</string>
|
||||||
|
|
||||||
<!-- Settings Fragment -->
|
<!-- Settings Fragment -->
|
||||||
<!-- Title for the settings page-->
|
<!-- Title for the settings page-->
|
||||||
<string name="settings">Settings</string>
|
<string name="settings">Settings</string>
|
||||||
|
|
||||||
<!-- Preferences -->
|
<!-- Preferences -->
|
||||||
<!-- Preference category for basic settings -->
|
<!-- Preference category for basic settings -->
|
||||||
<string name="preferences_category_basics">Basics</string>
|
<string name="preferences_category_basics">Basics</string>
|
||||||
|
@ -103,10 +113,8 @@
|
||||||
<string name="preferences_data_choices">Data choices</string>
|
<string name="preferences_data_choices">Data choices</string>
|
||||||
<!-- Preference for developers -->
|
<!-- Preference for developers -->
|
||||||
<string name="preference_leakcanary">Leak Canary</string>
|
<string name="preference_leakcanary">Leak Canary</string>
|
||||||
|
|
||||||
<!-- Preference title for switch preference to show search suggestions -->
|
<!-- Preference title for switch preference to show search suggestions -->
|
||||||
<string name="preferences_show_search_suggestions">Show search suggestions</string>
|
<string name="preferences_show_search_suggestions">Show search suggestions</string>
|
||||||
|
|
||||||
<!-- Preference for account settings -->
|
<!-- Preference for account settings -->
|
||||||
<string name="preferences_account_settings">Account Settings</string>
|
<string name="preferences_account_settings">Account Settings</string>
|
||||||
|
|
||||||
|
@ -156,6 +164,7 @@
|
||||||
<p>%1$s puts you in control.</p>
|
<p>%1$s puts you in control.</p>
|
||||||
<p>%1$s is produced by Mozilla. Our mission is to foster a healthy, open Internet.<br/>
|
<p>%1$s is produced by Mozilla. Our mission is to foster a healthy, open Internet.<br/>
|
||||||
]]></string>
|
]]></string>
|
||||||
|
|
||||||
<!-- Sessions -->
|
<!-- Sessions -->
|
||||||
<!-- Title for the list of tabs in the current session -->
|
<!-- Title for the list of tabs in the current session -->
|
||||||
<string name="tabs_header_title">Current Session</string>
|
<string name="tabs_header_title">Current Session</string>
|
||||||
|
@ -177,20 +186,17 @@
|
||||||
<string name="current_session_send_and_share">Send and Share</string>
|
<string name="current_session_send_and_share">Send and Share</string>
|
||||||
<!-- Content description (not visible, for screen readers etc.): Title icon for current session menu -->
|
<!-- Content description (not visible, for screen readers etc.): Title icon for current session menu -->
|
||||||
<string name="current_session_image">Current session image</string>
|
<string name="current_session_image">Current session image</string>
|
||||||
|
|
||||||
<!-- Text for the button to save a session -->
|
<!-- Text for the button to save a session -->
|
||||||
<string name="session_save">Save Session</string>
|
<string name="session_save">Save Session</string>
|
||||||
<!-- Text for the button to delete a session -->
|
<!-- Text for the button to delete a session -->
|
||||||
<string name="session_delete">Delete Session</string>
|
<string name="session_delete">Delete Session</string>
|
||||||
|
|
||||||
<!-- Text for the button to delete a single session -->
|
<!-- Text for the button to delete a single session -->
|
||||||
<string name="session_item_delete">Delete</string>
|
<string name="session_item_delete">Delete</string>
|
||||||
|
|
||||||
<!-- Text to tell the user how many more tabs this session has.
|
<!-- Text to tell the user how many more tabs this session has.
|
||||||
The first parameter is how many extra tabs the session has. -->
|
The first parameter is how many extra tabs the session has. -->
|
||||||
<string name="session_items_more">%1$d sites…</string>
|
<string name="session_items_more">%1$d sites…</string>
|
||||||
|
|
||||||
|
<!-- History -->
|
||||||
<!-- Text for the button to clear all history -->
|
<!-- Text for the button to clear all history -->
|
||||||
<string name="history_delete_all">Delete history</string>
|
<string name="history_delete_all">Delete history</string>
|
||||||
<!-- Text for the button to delete a single history item -->
|
<!-- Text for the button to delete a single history item -->
|
||||||
|
@ -199,5 +205,6 @@
|
||||||
is the number of items you have selected -->
|
is the number of items you have selected -->
|
||||||
<string name="history_delete_some">Delete %1$d items</string>
|
<string name="history_delete_some">Delete %1$d items</string>
|
||||||
|
|
||||||
<string name="full_screen_notification">Entering full screen mode</string>q
|
<!-- Text displayed in a notification when the user enters full screen mode -->
|
||||||
|
<string name="full_screen_notification">Entering full screen mode</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue