Bug 1879868 - Translations Automatically Popup bottom sheet on Offer Translation

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

@ -346,6 +346,9 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
safeInvalidateBrowserToolbarView() safeInvalidateBrowserToolbarView()
}, },
onShowTranslationsDialog = {
browserToolbarInteractor.onTranslationsButtonClicked()
},
), ),
owner = this, owner = this,
view = view, 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.initialFromLanguage
import mozilla.components.concept.engine.translate.initialToLanguage import mozilla.components.concept.engine.translate.initialToLanguage
import mozilla.components.lib.state.helpers.AbstractBinding import mozilla.components.lib.state.helpers.AbstractBinding
import org.mozilla.fenix.translations.TranslationDialogBottomSheet
import org.mozilla.fenix.translations.TranslationsFlowState 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 browserStore [BrowserStore] observed for any changes related to [TranslationsState].
* @param sessionId Current open tab session id. * @param sessionId Current open tab session id.
* @param onStateUpdated Invoked when the translations action button should be updated with the new translations state. * @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( class TranslationsBinding(
private val browserStore: BrowserStore, private val browserStore: BrowserStore,
@ -35,6 +38,7 @@ class TranslationsBinding(
fromSelectedLanguage: Language?, fromSelectedLanguage: Language?,
toSelectedLanguage: Language?, toSelectedLanguage: Language?,
) -> Unit, ) -> Unit,
private val onShowTranslationsDialog: () -> Unit,
) : AbstractBinding<BrowserState>(browserStore) { ) : AbstractBinding<BrowserState>(browserStore) {
override suspend fun onState(flow: Flow<BrowserState>) { override suspend fun onState(flow: Flow<BrowserState>) {
@ -94,6 +98,10 @@ class TranslationsBinding(
} else { } else {
onStateUpdated(false, false, null, null) onStateUpdated(false, false, null, null)
} }
if (sessionTranslationsState.isOfferTranslate) {
onShowTranslationsDialog()
}
} }
} }
} }

@ -40,6 +40,8 @@ class TranslationsBindingTest {
toSelectedLanguage: Language?, toSelectedLanguage: Language?,
) -> Unit = spy() ) -> Unit = spy()
private val onShowTranslationsDialog: () -> Unit = spy()
@Test @Test
fun `GIVEN translationState WHEN translation status isTranslated THEN invoke onIconChanged callback`() = fun `GIVEN translationState WHEN translation status isTranslated THEN invoke onIconChanged callback`() =
runTestOnMain { runTestOnMain {
@ -57,6 +59,7 @@ class TranslationsBindingTest {
browserStore = browserStore, browserStore = browserStore,
sessionId = tabId, sessionId = tabId,
onStateUpdated = onIconChanged, onStateUpdated = onIconChanged,
onShowTranslationsDialog = {},
) )
binding.start() binding.start()
@ -123,6 +126,7 @@ class TranslationsBindingTest {
browserStore = browserStore, browserStore = browserStore,
sessionId = tabId, sessionId = tabId,
onStateUpdated = onIconChanged, onStateUpdated = onIconChanged,
onShowTranslationsDialog = {},
) )
binding.start() binding.start()
@ -154,6 +158,7 @@ class TranslationsBindingTest {
browserStore = browserStore, browserStore = browserStore,
sessionId = tabId, sessionId = tabId,
onStateUpdated = onIconChanged, onStateUpdated = onIconChanged,
onShowTranslationsDialog = {},
) )
binding.start() binding.start()
@ -164,4 +169,31 @@ class TranslationsBindingTest {
null, 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