Bug 1879868 - Translations Automatically Popup bottom sheet on Offer Translation

fenix/125.0
iorgamgabriel 3 months ago committed by mergify[bot]
parent 422b627549
commit 0b6c95dfed

@ -346,6 +346,9 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
safeInvalidateBrowserToolbarView()
},
onShowTranslationsDialog = {
browserToolbarInteractor.onTranslationsButtonClicked()
},
),
owner = this,
view = view,

@ -16,6 +16,7 @@ import mozilla.components.concept.engine.translate.Language
import mozilla.components.concept.engine.translate.initialFromLanguage
import mozilla.components.concept.engine.translate.initialToLanguage
import mozilla.components.lib.state.helpers.AbstractBinding
import org.mozilla.fenix.translations.TranslationDialogBottomSheet
import org.mozilla.fenix.translations.TranslationsFlowState
/**
@ -25,6 +26,8 @@ import org.mozilla.fenix.translations.TranslationsFlowState
* @param browserStore [BrowserStore] observed for any changes related to [TranslationsState].
* @param sessionId Current open tab session id.
* @param onStateUpdated Invoked when the translations action button should be updated with the new translations state.
* @param onShowTranslationsDialog Invoked when [TranslationDialogBottomSheet]
* should be automatically shown to the user.
*/
class TranslationsBinding(
private val browserStore: BrowserStore,
@ -35,6 +38,7 @@ class TranslationsBinding(
fromSelectedLanguage: Language?,
toSelectedLanguage: Language?,
) -> Unit,
private val onShowTranslationsDialog: () -> Unit,
) : AbstractBinding<BrowserState>(browserStore) {
override suspend fun onState(flow: Flow<BrowserState>) {
@ -94,6 +98,10 @@ class TranslationsBinding(
} else {
onStateUpdated(false, false, null, null)
}
if (sessionTranslationsState.isOfferTranslate) {
onShowTranslationsDialog()
}
}
}
}

@ -40,6 +40,8 @@ class TranslationsBindingTest {
toSelectedLanguage: Language?,
) -> Unit = spy()
private val onShowTranslationsDialog: () -> Unit = spy()
@Test
fun `GIVEN translationState WHEN translation status isTranslated THEN invoke onIconChanged callback`() =
runTestOnMain {
@ -57,6 +59,7 @@ class TranslationsBindingTest {
browserStore = browserStore,
sessionId = tabId,
onStateUpdated = onIconChanged,
onShowTranslationsDialog = {},
)
binding.start()
@ -123,6 +126,7 @@ class TranslationsBindingTest {
browserStore = browserStore,
sessionId = tabId,
onStateUpdated = onIconChanged,
onShowTranslationsDialog = {},
)
binding.start()
@ -154,6 +158,7 @@ class TranslationsBindingTest {
browserStore = browserStore,
sessionId = tabId,
onStateUpdated = onIconChanged,
onShowTranslationsDialog = {},
)
binding.start()
@ -164,4 +169,31 @@ class TranslationsBindingTest {
null,
)
}
@Test
fun `GIVEN translationState WHEN translation state isOfferTranslate is true THEN invoke onShowTranslationsDialog callback`() =
runTestOnMain {
browserStore = BrowserStore(
BrowserState(
tabs = listOf(tab),
selectedTabId = tabId,
),
)
val binding = TranslationsBinding(
browserStore = browserStore,
sessionId = tabId,
onStateUpdated = onIconChanged,
onShowTranslationsDialog = onShowTranslationsDialog,
)
binding.start()
browserStore.dispatch(
TranslationsAction.TranslateOfferAction(
tabId = tab.id,
),
).joinBlocking()
verify(onShowTranslationsDialog).invoke()
}
}

Loading…
Cancel
Save