From f8871569f8d208b92aaaffd025372247fa66eb1d Mon Sep 17 00:00:00 2001 From: iorgamgabriel Date: Thu, 29 Feb 2024 18:04:11 +0200 Subject: [PATCH] Bug 1881831 - Translations Integration - Add "Offer to translate when possible" Connection --- .../TranslationSettingsFragment.kt | 73 ++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt index f483e45aa7..ae2ac13791 100644 --- a/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt @@ -8,12 +8,25 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.res.stringResource import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs +import mozilla.components.browser.state.action.TranslationsAction +import mozilla.components.browser.state.selector.findTab +import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.engine.translate.TranslationPageSettingOperation +import mozilla.components.lib.state.ext.observeAsComposableState import mozilla.components.support.base.feature.UserInteractionHandler import org.mozilla.fenix.R +import org.mozilla.fenix.ext.requireComponents +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.theme.FirefoxTheme @@ -22,6 +35,8 @@ import org.mozilla.fenix.theme.FirefoxTheme */ class TranslationSettingsFragment : Fragment(), UserInteractionHandler { private val args by navArgs() + private val browserStore: BrowserStore by lazy { requireComponents.core.store } + override fun onResume() { super.onResume() showToolbar(getString(R.string.translation_settings_toolbar_title)) @@ -35,7 +50,7 @@ class TranslationSettingsFragment : Fragment(), UserInteractionHandler { setContent { FirefoxTheme { TranslationSettings( - translationSwitchList = getTranslationSettingsSwitchList(), + translationSwitchList = getTranslationSwitchItemList(), onAutomaticTranslationClicked = { findNavController().navigate( TranslationSettingsFragmentDirections @@ -59,6 +74,62 @@ class TranslationSettingsFragment : Fragment(), UserInteractionHandler { } } + /** + * Set the switch item values. + * The first one is based on [TranslationPageSettings.alwaysOfferPopup]. + * The second one is [DownloadLanguageFileDialog] visibility. + * This pop-up will appear if the switch item is unchecked, the phone is in saving mode, and + * doesn't have a WiFi connection. + */ + @Composable + private fun getTranslationSwitchItemList(): MutableList { + val pageSettingsState = browserStore.observeAsComposableState { state -> + state.findTab(args.sessionId)?.translationsState?.pageSettings + }.value + val translationSwitchItems = mutableListOf() + + pageSettingsState?.alwaysOfferPopup?.let { + translationSwitchItems.add( + TranslationSwitchItem( + type = TranslationSettingsScreenOption.OfferToTranslate( + hasDivider = false, + ), + textLabel = stringResource(R.string.translation_settings_offer_to_translate), + isChecked = it, + isEnabled = true, + onStateChange = { _, checked -> + browserStore.dispatch( + TranslationsAction.UpdatePageSettingAction( + tabId = args.sessionId, + operation = TranslationPageSettingOperation.UPDATE_ALWAYS_OFFER_POPUP, + setting = checked, + ), + ) + }, + ), + ) + } + var isDownloadInSavingModeChecked by remember { + mutableStateOf(requireContext().settings().ignoreTranslationsDataSaverWarning) + } + + translationSwitchItems.add( + TranslationSwitchItem( + type = TranslationSettingsScreenOption.AlwaysDownloadInSavingMode( + hasDivider = true, + ), + textLabel = stringResource(R.string.translation_settings_always_download), + isChecked = isDownloadInSavingModeChecked, + isEnabled = true, + onStateChange = { _, checked -> + isDownloadInSavingModeChecked = checked + requireContext().settings().ignoreTranslationsDataSaverWarning = checked + }, + ), + ) + return translationSwitchItems + } + override fun onBackPressed(): Boolean { findNavController().navigate( TranslationSettingsFragmentDirections.actionTranslationSettingsFragmentToTranslationsDialogFragment(