forked from mirrors/gecko-dev
Backed out changeset b2046b45aca1 (bug 1890838) for causing lint failures on nav_graph.xml CLOSED TREE
This commit is contained in:
parent
584084b993
commit
1218263560
17 changed files with 90 additions and 97 deletions
|
|
@ -868,12 +868,11 @@ translations:
|
||||||
A string containing the name of the item the user tapped. These items
|
A string containing the name of the item the user tapped. These items
|
||||||
include:
|
include:
|
||||||
main_flow_toolbar, main_flow_browser, page_settings, global_settings,
|
main_flow_toolbar, main_flow_browser, page_settings, global_settings,
|
||||||
global_lang_settings, global_site_settings, downloads, global_settings_from_preferences
|
global_lang_settings, global_site_settings, downloads
|
||||||
type: string
|
type: string
|
||||||
bugs:
|
bugs:
|
||||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1883968
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1883968
|
||||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1886851
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1886851
|
||||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1890838
|
|
||||||
data_reviews:
|
data_reviews:
|
||||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1883968#c6
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1883968#c6
|
||||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1886851#c8
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1886851#c8
|
||||||
|
|
|
||||||
|
|
@ -233,7 +233,9 @@ class DefaultBrowserToolbarController(
|
||||||
override fun handleTranslationsButtonClick() {
|
override fun handleTranslationsButtonClick() {
|
||||||
Translations.action.record(Translations.ActionExtra("main_flow_toolbar"))
|
Translations.action.record(Translations.ActionExtra("main_flow_toolbar"))
|
||||||
val directions =
|
val directions =
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment()
|
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(
|
||||||
|
sessionId = currentSession?.id,
|
||||||
|
)
|
||||||
navController.navigateSafe(R.id.browserFragment, directions)
|
navController.navigateSafe(R.id.browserFragment, directions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -424,7 +424,9 @@ class DefaultBrowserToolbarMenuController(
|
||||||
ToolbarMenu.Item.Translate -> {
|
ToolbarMenu.Item.Translate -> {
|
||||||
Translations.action.record(Translations.ActionExtra("main_flow_browser"))
|
Translations.action.record(Translations.ActionExtra("main_flow_browser"))
|
||||||
val directions =
|
val directions =
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment()
|
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(
|
||||||
|
sessionId = currentSession?.id,
|
||||||
|
)
|
||||||
navController.navigateSafe(R.id.browserFragment, directions)
|
navController.navigateSafe(R.id.browserFragment, directions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,6 @@ import org.mozilla.fenix.GleanMetrics.Addons
|
||||||
import org.mozilla.fenix.GleanMetrics.CookieBanners
|
import org.mozilla.fenix.GleanMetrics.CookieBanners
|
||||||
import org.mozilla.fenix.GleanMetrics.Events
|
import org.mozilla.fenix.GleanMetrics.Events
|
||||||
import org.mozilla.fenix.GleanMetrics.TrackingProtection
|
import org.mozilla.fenix.GleanMetrics.TrackingProtection
|
||||||
import org.mozilla.fenix.GleanMetrics.Translations
|
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint
|
import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint
|
||||||
|
|
@ -316,11 +315,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
SettingsFragmentDirections.actionSettingsFragmentToLocaleSettingsFragment()
|
SettingsFragmentDirections.actionSettingsFragmentToLocaleSettingsFragment()
|
||||||
}
|
}
|
||||||
|
|
||||||
resources.getString(R.string.pref_key_translation) -> {
|
|
||||||
Translations.action.record(Translations.ActionExtra("global_settings_from_preferences"))
|
|
||||||
SettingsFragmentDirections.actionSettingsFragmentToTranslationsSettingsFragment()
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Privacy and security preferences */
|
/* Privacy and security preferences */
|
||||||
resources.getString(R.string.pref_key_private_browsing) -> {
|
resources.getString(R.string.pref_key_private_browsing) -> {
|
||||||
SettingsFragmentDirections.actionSettingsFragmentToPrivateBrowsingFragment()
|
SettingsFragmentDirections.actionSettingsFragmentToPrivateBrowsingFragment()
|
||||||
|
|
@ -515,9 +509,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
findPreference<Preference>(
|
findPreference<Preference>(
|
||||||
getPreferenceKey(R.string.pref_key_sync_debug),
|
getPreferenceKey(R.string.pref_key_sync_debug),
|
||||||
)?.isVisible = showSecretDebugMenuThisSession
|
)?.isVisible = showSecretDebugMenuThisSession
|
||||||
findPreference<Preference>(
|
|
||||||
getPreferenceKey(R.string.pref_key_translation),
|
|
||||||
)?.isVisible = FxNimbus.features.translations.value().globalSettingsEnabled
|
|
||||||
preferenceStartProfiler?.isVisible = showSecretDebugMenuThisSession &&
|
preferenceStartProfiler?.isVisible = showSecretDebugMenuThisSession &&
|
||||||
(requireContext().components.core.engine.profiler?.isProfilerActive() != null)
|
(requireContext().components.core.engine.profiler?.isProfilerActive() != null)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,11 @@ import androidx.compose.ui.platform.ComposeView
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
|
import androidx.navigation.fragment.navArgs
|
||||||
import mozilla.components.browser.state.action.TranslationsAction
|
import mozilla.components.browser.state.action.TranslationsAction
|
||||||
import mozilla.components.browser.state.state.TranslationsBrowserState
|
import mozilla.components.browser.state.selector.findTab
|
||||||
import mozilla.components.browser.state.store.BrowserStore
|
import mozilla.components.browser.state.store.BrowserStore
|
||||||
|
import mozilla.components.concept.engine.translate.TranslationPageSettingOperation
|
||||||
import mozilla.components.lib.state.ext.observeAsComposableState
|
import mozilla.components.lib.state.ext.observeAsComposableState
|
||||||
import mozilla.components.support.base.feature.UserInteractionHandler
|
import mozilla.components.support.base.feature.UserInteractionHandler
|
||||||
import org.mozilla.fenix.GleanMetrics.Translations
|
import org.mozilla.fenix.GleanMetrics.Translations
|
||||||
|
|
@ -34,6 +36,7 @@ import org.mozilla.fenix.theme.FirefoxTheme
|
||||||
* A fragment displaying the Firefox Translation settings screen.
|
* A fragment displaying the Firefox Translation settings screen.
|
||||||
*/
|
*/
|
||||||
class TranslationSettingsFragment : Fragment(), UserInteractionHandler {
|
class TranslationSettingsFragment : Fragment(), UserInteractionHandler {
|
||||||
|
private val args by navArgs<TranslationSettingsFragmentArgs>()
|
||||||
private val browserStore: BrowserStore by lazy { requireComponents.core.store }
|
private val browserStore: BrowserStore by lazy { requireComponents.core.store }
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
|
@ -81,19 +84,19 @@ class TranslationSettingsFragment : Fragment(), UserInteractionHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the switch item values.
|
* Set the switch item values.
|
||||||
* The first one is based on [TranslationsBrowserState.offerTranslation].
|
* The first one is based on [TranslationPageSettings.alwaysOfferPopup].
|
||||||
* The second one is [DownloadLanguageFileDialog] visibility.
|
* The second one is [DownloadLanguageFileDialog] visibility.
|
||||||
* This pop-up will appear if the switch item is unchecked, the phone is in saving mode, and
|
* This pop-up will appear if the switch item is unchecked, the phone is in saving mode, and
|
||||||
* doesn't have a WiFi connection.
|
* doesn't have a WiFi connection.
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
private fun getTranslationSwitchItemList(): MutableList<TranslationSwitchItem> {
|
private fun getTranslationSwitchItemList(): MutableList<TranslationSwitchItem> {
|
||||||
val offerToTranslate = browserStore.observeAsComposableState { state ->
|
val pageSettingsState = browserStore.observeAsComposableState { state ->
|
||||||
state.translationEngine.offerTranslation
|
state.findTab(args.sessionId)?.translationsState?.pageSettings
|
||||||
}.value
|
}.value
|
||||||
val translationSwitchItems = mutableListOf<TranslationSwitchItem>()
|
val translationSwitchItems = mutableListOf<TranslationSwitchItem>()
|
||||||
|
|
||||||
offerToTranslate?.let {
|
pageSettingsState?.alwaysOfferPopup?.let {
|
||||||
translationSwitchItems.add(
|
translationSwitchItems.add(
|
||||||
TranslationSwitchItem(
|
TranslationSwitchItem(
|
||||||
type = TranslationSettingsScreenOption.OfferToTranslate(
|
type = TranslationSettingsScreenOption.OfferToTranslate(
|
||||||
|
|
@ -104,8 +107,10 @@ class TranslationSettingsFragment : Fragment(), UserInteractionHandler {
|
||||||
isEnabled = true,
|
isEnabled = true,
|
||||||
onStateChange = { _, checked ->
|
onStateChange = { _, checked ->
|
||||||
browserStore.dispatch(
|
browserStore.dispatch(
|
||||||
TranslationsAction.SetGlobalOfferTranslateSettingAction(
|
TranslationsAction.UpdatePageSettingAction(
|
||||||
offerTranslation = checked,
|
tabId = args.sessionId,
|
||||||
|
operation = TranslationPageSettingOperation.UPDATE_ALWAYS_OFFER_POPUP,
|
||||||
|
setting = checked,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
// Ensures persistence of value
|
// Ensures persistence of value
|
||||||
|
|
@ -136,15 +141,12 @@ class TranslationSettingsFragment : Fragment(), UserInteractionHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed(): Boolean {
|
override fun onBackPressed(): Boolean {
|
||||||
return if (findNavController().previousBackStackEntry?.destination?.id == R.id.browserFragment) {
|
findNavController().navigate(
|
||||||
findNavController().navigate(
|
TranslationSettingsFragmentDirections.actionTranslationSettingsFragmentToTranslationsDialogFragment(
|
||||||
TranslationSettingsFragmentDirections.actionTranslationSettingsFragmentToTranslationsDialogFragment(
|
sessionId = args.sessionId,
|
||||||
translationsDialogAccessPoint = TranslationsDialogAccessPoint.TranslationsOptions,
|
translationsDialogAccessPoint = TranslationsDialogAccessPoint.TranslationsOptions,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
true
|
return true
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -171,7 +171,6 @@ internal fun TranslationsOptionsDialog(
|
||||||
context: Context,
|
context: Context,
|
||||||
showGlobalSettings: Boolean,
|
showGlobalSettings: Boolean,
|
||||||
translationPageSettings: TranslationPageSettings? = null,
|
translationPageSettings: TranslationPageSettings? = null,
|
||||||
offerTranslation: Boolean? = null,
|
|
||||||
initialFrom: Language? = null,
|
initialFrom: Language? = null,
|
||||||
onStateChange: (TranslationSettingsOption, Boolean) -> Unit,
|
onStateChange: (TranslationSettingsOption, Boolean) -> Unit,
|
||||||
onBackClicked: () -> Unit,
|
onBackClicked: () -> Unit,
|
||||||
|
|
@ -182,7 +181,6 @@ internal fun TranslationsOptionsDialog(
|
||||||
showGlobalSettings = showGlobalSettings,
|
showGlobalSettings = showGlobalSettings,
|
||||||
translationOptionsList = getTranslationSwitchItemList(
|
translationOptionsList = getTranslationSwitchItemList(
|
||||||
translationPageSettings = translationPageSettings,
|
translationPageSettings = translationPageSettings,
|
||||||
offerTranslation = offerTranslation,
|
|
||||||
initialFrom = initialFrom,
|
initialFrom = initialFrom,
|
||||||
context = context,
|
context = context,
|
||||||
onStateChange = onStateChange,
|
onStateChange = onStateChange,
|
||||||
|
|
@ -196,7 +194,6 @@ internal fun TranslationsOptionsDialog(
|
||||||
@Composable
|
@Composable
|
||||||
private fun getTranslationSwitchItemList(
|
private fun getTranslationSwitchItemList(
|
||||||
translationPageSettings: TranslationPageSettings? = null,
|
translationPageSettings: TranslationPageSettings? = null,
|
||||||
offerTranslation: Boolean? = null,
|
|
||||||
initialFrom: Language? = null,
|
initialFrom: Language? = null,
|
||||||
context: Context,
|
context: Context,
|
||||||
onStateChange: (TranslationSettingsOption, Boolean) -> Unit,
|
onStateChange: (TranslationSettingsOption, Boolean) -> Unit,
|
||||||
|
|
@ -204,11 +201,12 @@ private fun getTranslationSwitchItemList(
|
||||||
val translationSwitchItemList = mutableListOf<TranslationSwitchItem>()
|
val translationSwitchItemList = mutableListOf<TranslationSwitchItem>()
|
||||||
|
|
||||||
translationPageSettings?.let {
|
translationPageSettings?.let {
|
||||||
|
val alwaysOfferPopup = translationPageSettings.alwaysOfferPopup
|
||||||
val alwaysTranslateLanguage = translationPageSettings.alwaysTranslateLanguage
|
val alwaysTranslateLanguage = translationPageSettings.alwaysTranslateLanguage
|
||||||
val neverTranslateLanguage = translationPageSettings.neverTranslateLanguage
|
val neverTranslateLanguage = translationPageSettings.neverTranslateLanguage
|
||||||
val neverTranslateSite = translationPageSettings.neverTranslateSite
|
val neverTranslateSite = translationPageSettings.neverTranslateSite
|
||||||
|
|
||||||
offerTranslation?.let {
|
alwaysOfferPopup?.let {
|
||||||
translationSwitchItemList.add(
|
translationSwitchItemList.add(
|
||||||
TranslationSwitchItem(
|
TranslationSwitchItem(
|
||||||
type = TranslationPageSettingsOption.AlwaysOfferPopup(),
|
type = TranslationPageSettingsOption.AlwaysOfferPopup(),
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.distinctUntilChangedBy
|
import kotlinx.coroutines.flow.distinctUntilChangedBy
|
||||||
import kotlinx.coroutines.flow.mapNotNull
|
import kotlinx.coroutines.flow.mapNotNull
|
||||||
import mozilla.components.browser.state.selector.selectedTab
|
import mozilla.components.browser.state.selector.findTab
|
||||||
import mozilla.components.browser.state.state.BrowserState
|
import mozilla.components.browser.state.state.BrowserState
|
||||||
import mozilla.components.browser.state.state.TabSessionState
|
import mozilla.components.browser.state.state.TabSessionState
|
||||||
import mozilla.components.browser.state.state.TranslationsBrowserState
|
import mozilla.components.browser.state.state.TranslationsBrowserState
|
||||||
|
|
@ -29,6 +29,7 @@ import java.util.Locale
|
||||||
class TranslationsDialogBinding(
|
class TranslationsDialogBinding(
|
||||||
browserStore: BrowserStore,
|
browserStore: BrowserStore,
|
||||||
private val translationsDialogStore: TranslationsDialogStore,
|
private val translationsDialogStore: TranslationsDialogStore,
|
||||||
|
private val sessionId: String,
|
||||||
private val getTranslatedPageTitle: (localizedFrom: String?, localizedTo: String?) -> String,
|
private val getTranslatedPageTitle: (localizedFrom: String?, localizedTo: String?) -> String,
|
||||||
) : AbstractBinding<BrowserState>(browserStore) {
|
) : AbstractBinding<BrowserState>(browserStore) {
|
||||||
|
|
||||||
|
|
@ -41,7 +42,7 @@ class TranslationsDialogBinding(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Session level flows
|
// Session level flows
|
||||||
val sessionFlow = flow.mapNotNull { state -> state.selectedTab }
|
val sessionFlow = flow.mapNotNull { state -> state.findTab(sessionId) }
|
||||||
.distinctUntilChangedBy {
|
.distinctUntilChangedBy {
|
||||||
it.translationsState
|
it.translationsState
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
import mozilla.components.browser.state.selector.selectedTab
|
import mozilla.components.browser.state.selector.findTab
|
||||||
import mozilla.components.browser.state.store.BrowserStore
|
import mozilla.components.browser.state.store.BrowserStore
|
||||||
import mozilla.components.concept.engine.translate.Language
|
import mozilla.components.concept.engine.translate.Language
|
||||||
import mozilla.components.concept.engine.translate.TranslationError
|
import mozilla.components.concept.engine.translate.TranslationError
|
||||||
|
|
@ -92,6 +92,7 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() {
|
||||||
listOf(
|
listOf(
|
||||||
TranslationsDialogMiddleware(
|
TranslationsDialogMiddleware(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
|
sessionId = args.sessionId,
|
||||||
settings = requireContext().settings(),
|
settings = requireContext().settings(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -244,6 +245,7 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() {
|
||||||
feature = TranslationsDialogBinding(
|
feature = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = args.sessionId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
requireContext().getString(
|
requireContext().getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -382,17 +384,12 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() {
|
||||||
) {
|
) {
|
||||||
val pageSettingsState =
|
val pageSettingsState =
|
||||||
browserStore.observeAsComposableState { state ->
|
browserStore.observeAsComposableState { state ->
|
||||||
state.selectedTab?.translationsState?.pageSettings
|
state.findTab(args.sessionId)?.translationsState?.pageSettings
|
||||||
}.value
|
}.value
|
||||||
|
|
||||||
val offerTranslation = browserStore.observeAsComposableState { state ->
|
|
||||||
state.translationEngine.offerTranslation
|
|
||||||
}.value
|
|
||||||
|
|
||||||
TranslationsOptionsDialog(
|
TranslationsOptionsDialog(
|
||||||
context = requireContext(),
|
context = requireContext(),
|
||||||
translationPageSettings = pageSettingsState,
|
translationPageSettings = pageSettingsState,
|
||||||
offerTranslation = offerTranslation,
|
|
||||||
showGlobalSettings = showGlobalSettings,
|
showGlobalSettings = showGlobalSettings,
|
||||||
initialFrom = initialFrom,
|
initialFrom = initialFrom,
|
||||||
onStateChange = { type, checked ->
|
onStateChange = { type, checked ->
|
||||||
|
|
@ -411,7 +408,9 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() {
|
||||||
Translations.action.record(Translations.ActionExtra("global_settings"))
|
Translations.action.record(Translations.ActionExtra("global_settings"))
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
TranslationsDialogFragmentDirections
|
TranslationsDialogFragmentDirections
|
||||||
.actionTranslationsDialogFragmentToTranslationSettingsFragment(),
|
.actionTranslationsDialogFragmentToTranslationSettingsFragment(
|
||||||
|
sessionId = args.sessionId,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
aboutTranslationClicked = {
|
aboutTranslationClicked = {
|
||||||
|
|
@ -426,7 +425,7 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() {
|
||||||
setFragmentResult(
|
setFragmentResult(
|
||||||
TRANSLATION_IN_PROGRESS,
|
TRANSLATION_IN_PROGRESS,
|
||||||
bundleOf(
|
bundleOf(
|
||||||
SESSION_ID to browserStore.state.selectedTab?.id,
|
SESSION_ID to args.sessionId,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
package org.mozilla.fenix.translations
|
package org.mozilla.fenix.translations
|
||||||
|
|
||||||
import mozilla.components.browser.state.action.TranslationsAction
|
import mozilla.components.browser.state.action.TranslationsAction
|
||||||
import mozilla.components.browser.state.selector.selectedTab
|
|
||||||
import mozilla.components.browser.state.store.BrowserStore
|
import mozilla.components.browser.state.store.BrowserStore
|
||||||
import mozilla.components.concept.engine.translate.TranslationOperation
|
import mozilla.components.concept.engine.translate.TranslationOperation
|
||||||
import mozilla.components.concept.engine.translate.TranslationPageSettingOperation
|
import mozilla.components.concept.engine.translate.TranslationPageSettingOperation
|
||||||
import mozilla.components.lib.state.Middleware
|
import mozilla.components.lib.state.Middleware
|
||||||
import mozilla.components.lib.state.MiddlewareContext
|
import mozilla.components.lib.state.MiddlewareContext
|
||||||
|
import org.mozilla.fenix.ext.settings
|
||||||
import org.mozilla.fenix.utils.Settings
|
import org.mozilla.fenix.utils.Settings
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -18,17 +18,16 @@ import org.mozilla.fenix.utils.Settings
|
||||||
*/
|
*/
|
||||||
class TranslationsDialogMiddleware(
|
class TranslationsDialogMiddleware(
|
||||||
private val browserStore: BrowserStore,
|
private val browserStore: BrowserStore,
|
||||||
|
private val sessionId: String,
|
||||||
private val settings: Settings,
|
private val settings: Settings,
|
||||||
) : Middleware<TranslationsDialogState, TranslationsDialogAction> {
|
) : Middleware<TranslationsDialogState, TranslationsDialogAction> {
|
||||||
|
|
||||||
@Suppress("LongMethod", "CyclomaticComplexMethod")
|
@Suppress("LongMethod")
|
||||||
override fun invoke(
|
override fun invoke(
|
||||||
context: MiddlewareContext<TranslationsDialogState, TranslationsDialogAction>,
|
context: MiddlewareContext<TranslationsDialogState, TranslationsDialogAction>,
|
||||||
next: (TranslationsDialogAction) -> Unit,
|
next: (TranslationsDialogAction) -> Unit,
|
||||||
action: TranslationsDialogAction,
|
action: TranslationsDialogAction,
|
||||||
) {
|
) {
|
||||||
val sessionId = browserStore.state.selectedTab?.id ?: return
|
|
||||||
|
|
||||||
when (action) {
|
when (action) {
|
||||||
is TranslationsDialogAction.InitTranslationsDialog -> {
|
is TranslationsDialogAction.InitTranslationsDialog -> {
|
||||||
// If the languages are missing, we should attempt to fetch the supported languages.
|
// If the languages are missing, we should attempt to fetch the supported languages.
|
||||||
|
|
@ -99,8 +98,10 @@ class TranslationsDialogMiddleware(
|
||||||
is TranslationPageSettingsOption.AlwaysOfferPopup -> {
|
is TranslationPageSettingsOption.AlwaysOfferPopup -> {
|
||||||
// Ensures the translations engine has the correct value
|
// Ensures the translations engine has the correct value
|
||||||
browserStore.dispatch(
|
browserStore.dispatch(
|
||||||
TranslationsAction.SetGlobalOfferTranslateSettingAction(
|
TranslationsAction.UpdatePageSettingAction(
|
||||||
offerTranslation = action.checkValue,
|
tabId = sessionId,
|
||||||
|
operation = TranslationPageSettingOperation.UPDATE_ALWAYS_OFFER_POPUP,
|
||||||
|
setting = action.checkValue,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -319,7 +319,6 @@
|
||||||
app:destination="@id/reviewQualityCheckFragment" />
|
app:destination="@id/reviewQualityCheckFragment" />
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_browserFragment_to_translationsDialogFragment"
|
android:id="@+id/action_browserFragment_to_translationsDialogFragment"
|
||||||
app:destination="@id/translationsDialogFragment" />
|
|
||||||
app:destination="@id/translations_graph" />
|
app:destination="@id/translations_graph" />
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_loginsListFragment"
|
android:id="@+id/action_loginsListFragment"
|
||||||
|
|
@ -638,13 +637,6 @@
|
||||||
app:exitAnim="@anim/slide_out_left"
|
app:exitAnim="@anim/slide_out_left"
|
||||||
app:popEnterAnim="@anim/slide_in_left"
|
app:popEnterAnim="@anim/slide_in_left"
|
||||||
app:popExitAnim="@anim/slide_out_right" />
|
app:popExitAnim="@anim/slide_out_right" />
|
||||||
<action
|
|
||||||
android:id="@+id/action_settingsFragment_to_translationsSettingsFragment"
|
|
||||||
app:destination="@id/translations_settings_graph"
|
|
||||||
app:enterAnim="@anim/slide_in_right"
|
|
||||||
app:exitAnim="@anim/slide_out_left"
|
|
||||||
app:popEnterAnim="@anim/slide_in_left"
|
|
||||||
app:popExitAnim="@anim/slide_out_right" />
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_settingsFragment_to_addonsFragment"
|
android:id="@+id/action_settingsFragment_to_addonsFragment"
|
||||||
app:destination="@id/addons_management_graph"
|
app:destination="@id/addons_management_graph"
|
||||||
|
|
@ -1452,24 +1444,33 @@
|
||||||
</fragment>
|
</fragment>
|
||||||
</navigation>
|
</navigation>
|
||||||
|
|
||||||
<dialog
|
|
||||||
android:id="@+id/translationsDialogFragment"
|
|
||||||
android:name="org.mozilla.fenix.translations.TranslationsDialogFragment">
|
|
||||||
<argument
|
|
||||||
android:name="translationsDialogAccessPoint"
|
|
||||||
android:defaultValue="Translations"
|
|
||||||
app:argType="org.mozilla.fenix.translations.TranslationsDialogAccessPoint" />
|
|
||||||
<action
|
|
||||||
android:id="@+id/action_translationsDialogFragment_to_translationSettingsFragment"
|
|
||||||
app:destination="@id/translations_settings_graph" />
|
|
||||||
</dialog>
|
|
||||||
|
|
||||||
<navigation
|
<navigation
|
||||||
android:id="@+id/translations_settings_graph"
|
android:id="@+id/translations_graph"
|
||||||
app:startDestination="@id/translationSettingsFragment">
|
app:startDestination="@id/translationsDialogFragment">
|
||||||
|
<argument
|
||||||
|
android:name="sessionId"
|
||||||
|
app:argType="string"
|
||||||
|
app:nullable="true" />
|
||||||
|
<dialog
|
||||||
|
android:id="@+id/translationsDialogFragment"
|
||||||
|
android:name="org.mozilla.fenix.translations.TranslationsDialogFragment">
|
||||||
|
<argument
|
||||||
|
android:name="sessionId"
|
||||||
|
app:argType="string" />
|
||||||
|
<argument
|
||||||
|
android:name="translationsDialogAccessPoint"
|
||||||
|
android:defaultValue="Translations"
|
||||||
|
app:argType="org.mozilla.fenix.translations.TranslationsDialogAccessPoint" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_translationsDialogFragment_to_translationSettingsFragment"
|
||||||
|
app:destination="@id/translationSettingsFragment" />
|
||||||
|
</dialog>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/translationSettingsFragment"
|
android:id="@+id/translationSettingsFragment"
|
||||||
android:name="org.mozilla.fenix.translations.TranslationSettingsFragment">
|
android:name="org.mozilla.fenix.translations.TranslationSettingsFragment">
|
||||||
|
<argument
|
||||||
|
android:name="sessionId"
|
||||||
|
app:argType="string" />
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_translationSettingsFragment_to_translationsDialogFragment"
|
android:id="@+id/action_translationSettingsFragment_to_translationsDialogFragment"
|
||||||
app:destination="@id/translationsDialogFragment"
|
app:destination="@id/translationsDialogFragment"
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
<string name="pref_key_accessibility_force_enable_zoom" translatable="false">pref_key_accessibility_force_enable_zoom</string>
|
<string name="pref_key_accessibility_force_enable_zoom" translatable="false">pref_key_accessibility_force_enable_zoom</string>
|
||||||
<string name="pref_key_advanced" translatable="false">pref_key_advanced</string>
|
<string name="pref_key_advanced" translatable="false">pref_key_advanced</string>
|
||||||
<string name="pref_key_language" translatable="false">pref_key_language</string>
|
<string name="pref_key_language" translatable="false">pref_key_language</string>
|
||||||
<string name="pref_key_translation" translatable="false">pref_key_translation</string>
|
|
||||||
<string name="pref_key_data_choices" translatable="false">pref_key_data_choices</string>
|
<string name="pref_key_data_choices" translatable="false">pref_key_data_choices</string>
|
||||||
<string name="pref_key_delete_browsing_data" translatable="false">pref_key_delete_browsing_data</string>
|
<string name="pref_key_delete_browsing_data" translatable="false">pref_key_delete_browsing_data</string>
|
||||||
<string name="pref_key_delete_browsing_data_on_quit_preference" translatable="false">pref_key_delete_browsing_data_on_quit_preference</string>
|
<string name="pref_key_delete_browsing_data_on_quit_preference" translatable="false">pref_key_delete_browsing_data_on_quit_preference</string>
|
||||||
|
|
|
||||||
|
|
@ -553,8 +553,6 @@
|
||||||
<string name="preferences_account_sync_error">Reconnect to resume syncing</string>
|
<string name="preferences_account_sync_error">Reconnect to resume syncing</string>
|
||||||
<!-- Preference for language -->
|
<!-- Preference for language -->
|
||||||
<string name="preferences_language">Language</string>
|
<string name="preferences_language">Language</string>
|
||||||
<!-- Preference for translation -->
|
|
||||||
<string name="preferences_translation">Translation</string>
|
|
||||||
<!-- Preference for data choices -->
|
<!-- Preference for data choices -->
|
||||||
<string name="preferences_data_choices">Data choices</string>
|
<string name="preferences_data_choices">Data choices</string>
|
||||||
<!-- Preference for data collection -->
|
<!-- Preference for data collection -->
|
||||||
|
|
|
||||||
|
|
@ -82,11 +82,6 @@
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
android:title="@string/preferences_language" />
|
android:title="@string/preferences_language" />
|
||||||
|
|
||||||
<androidx.preference.Preference
|
|
||||||
android:key="@string/pref_key_translation"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
android:title="@string/preferences_translation" />
|
|
||||||
|
|
||||||
<org.mozilla.fenix.settings.DefaultBrowserPreference
|
<org.mozilla.fenix.settings.DefaultBrowserPreference
|
||||||
android:key="@string/pref_key_make_default_browser"
|
android:key="@string/pref_key_make_default_browser"
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
|
|
|
||||||
|
|
@ -454,7 +454,9 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
|
|
||||||
verify {
|
verify {
|
||||||
navController.navigate(
|
navController.navigate(
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(),
|
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(
|
||||||
|
sessionId = "1",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -837,7 +837,9 @@ class DefaultBrowserToolbarMenuControllerTest {
|
||||||
verify {
|
verify {
|
||||||
navController.navigate(
|
navController.navigate(
|
||||||
directionsEq(
|
directionsEq(
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(),
|
BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(
|
||||||
|
sessionId = selectedTab.id,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -137,6 +138,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -182,6 +184,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -228,6 +231,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -277,6 +281,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -316,6 +321,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -353,6 +359,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
@ -403,6 +410,7 @@ class TranslationsDialogBindingTest {
|
||||||
val binding = TranslationsDialogBinding(
|
val binding = TranslationsDialogBinding(
|
||||||
browserStore = browserStore,
|
browserStore = browserStore,
|
||||||
translationsDialogStore = translationsDialogStore,
|
translationsDialogStore = translationsDialogStore,
|
||||||
|
sessionId = tabId,
|
||||||
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
getTranslatedPageTitle = { localizedFrom, localizedTo ->
|
||||||
testContext.getString(
|
testContext.getString(
|
||||||
R.string.translations_bottom_sheet_title_translation_completed,
|
R.string.translations_bottom_sheet_title_translation_completed,
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,10 @@
|
||||||
|
|
||||||
package org.mozilla.fenix.translations
|
package org.mozilla.fenix.translations
|
||||||
|
|
||||||
import io.mockk.spyk
|
import io.mockk.mockk
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import mozilla.components.browser.state.action.TranslationsAction
|
import mozilla.components.browser.state.action.TranslationsAction
|
||||||
import mozilla.components.browser.state.state.BrowserState
|
|
||||||
import mozilla.components.browser.state.state.createTab
|
|
||||||
import mozilla.components.browser.state.store.BrowserStore
|
import mozilla.components.browser.state.store.BrowserStore
|
||||||
import mozilla.components.concept.engine.translate.Language
|
import mozilla.components.concept.engine.translate.Language
|
||||||
import mozilla.components.concept.engine.translate.TranslationOperation
|
import mozilla.components.concept.engine.translate.TranslationOperation
|
||||||
|
|
@ -26,17 +24,10 @@ import org.mozilla.fenix.utils.Settings
|
||||||
|
|
||||||
@RunWith(FenixRobolectricTestRunner::class)
|
@RunWith(FenixRobolectricTestRunner::class)
|
||||||
class TranslationsDialogMiddlewareTest {
|
class TranslationsDialogMiddlewareTest {
|
||||||
private val browserStore = spyk(
|
private val browserStore = mockk<BrowserStore>(relaxed = true)
|
||||||
BrowserStore(
|
|
||||||
BrowserState(
|
|
||||||
tabs = listOf(createTab("https://www.mozilla.org", id = "tab1")),
|
|
||||||
selectedTabId = "tab1",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
private val settings = Settings(testContext)
|
private val settings = Settings(testContext)
|
||||||
private val translationsDialogMiddleware =
|
private val translationsDialogMiddleware =
|
||||||
TranslationsDialogMiddleware(browserStore = browserStore, settings = settings)
|
TranslationsDialogMiddleware(browserStore = browserStore, sessionId = "tab1", settings = settings)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `GIVEN translationState WHEN FetchSupportedLanguages action is called THEN call OperationRequestedAction from BrowserStore`() =
|
fun `GIVEN translationState WHEN FetchSupportedLanguages action is called THEN call OperationRequestedAction from BrowserStore`() =
|
||||||
|
|
@ -173,8 +164,10 @@ class TranslationsDialogMiddlewareTest {
|
||||||
|
|
||||||
verify {
|
verify {
|
||||||
browserStore.dispatch(
|
browserStore.dispatch(
|
||||||
TranslationsAction.SetGlobalOfferTranslateSettingAction(
|
TranslationsAction.UpdatePageSettingAction(
|
||||||
offerTranslation = false,
|
tabId = "tab1",
|
||||||
|
operation = TranslationPageSettingOperation.UPDATE_ALWAYS_OFFER_POPUP,
|
||||||
|
setting = false,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue