diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index e799cfcc3..c7c8151f3 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -346,6 +346,9 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { safeInvalidateBrowserToolbarView() }, + onShowTranslationsDialog = { + browserToolbarInteractor.onTranslationsButtonClicked() + }, ), owner = this, view = view, diff --git a/app/src/main/java/org/mozilla/fenix/browser/TranslationsBinding.kt b/app/src/main/java/org/mozilla/fenix/browser/TranslationsBinding.kt index 4a79afdce..f96629bfe 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/TranslationsBinding.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/TranslationsBinding.kt @@ -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(browserStore) { override suspend fun onState(flow: Flow) { @@ -94,6 +98,10 @@ class TranslationsBinding( } else { onStateUpdated(false, false, null, null) } + + if (sessionTranslationsState.isOfferTranslate) { + onShowTranslationsDialog() + } } } } diff --git a/app/src/test/java/org/mozilla/fenix/browser/TranslationsBindingTest.kt b/app/src/test/java/org/mozilla/fenix/browser/TranslationsBindingTest.kt index 672397ffe..4ffb014a8 100644 --- a/app/src/test/java/org/mozilla/fenix/browser/TranslationsBindingTest.kt +++ b/app/src/test/java/org/mozilla/fenix/browser/TranslationsBindingTest.kt @@ -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() + } }