Skip to content

Commit 74df37a

Browse files
author
rmalicdem
committed
Bug 1969108 - Add 'Translate' to expanded shortcuts r=android-reviewers,Roger
Differential Revision: https://phabricator.services.mozilla.com/D271325
1 parent 0890d8f commit 74df37a

File tree

5 files changed

+114
-3
lines changed

5 files changed

+114
-3
lines changed

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMiddleware.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,6 +1027,7 @@ class BrowserToolbarMiddleware(
10271027
.collect {
10281028
updateEndBrowserActions(context)
10291029
updateEndPageActions(context)
1030+
updateNavigationActions(context)
10301031
}
10311032
}
10321033
}

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddleware.kt

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import org.mozilla.fenix.home.toolbar.TabCounterInteractions.TabCounterClicked
7979
import org.mozilla.fenix.home.toolbar.TabCounterInteractions.TabCounterLongClicked
8080
import org.mozilla.fenix.search.BrowserToolbarSearchMiddleware
8181
import org.mozilla.fenix.search.ext.searchEngineShortcuts
82+
import org.mozilla.fenix.settings.ShortcutType
8283
import org.mozilla.fenix.tabstray.Page
8384
import mozilla.components.lib.state.Action as MVIAction
8485
import mozilla.components.ui.icons.R as iconsR
@@ -364,12 +365,17 @@ class BrowserToolbarMiddleware(
364365
*/
365366
private fun buildNavigationActions(): List<Action> {
366367
val environment = environment ?: return emptyList()
368+
val settings = environment.context.settings()
367369
val isWideWindow = environment.fragment.isWideWindow()
368370
val isTallWindow = environment.fragment.isTallWindow()
369-
val shouldUseExpandedToolbar = environment.context.settings().shouldUseExpandedToolbar
371+
val shouldUseExpandedToolbar = settings.shouldUseExpandedToolbar
372+
val useCustomPrimary = settings.shouldShowToolbarCustomization && shouldUseExpandedToolbar
373+
val primarySlotAction = mapShortcutToAction(
374+
settings.toolbarExpandedShortcutKey,
375+
).takeIf { useCustomPrimary } ?: HomeToolbarAction.FakeBookmark
370376

371377
return listOf(
372-
HomeToolbarActionConfig(HomeToolbarAction.FakeBookmark) {
378+
HomeToolbarActionConfig(primarySlotAction) {
373379
shouldUseExpandedToolbar && isTallWindow && !isWideWindow
374380
},
375381
HomeToolbarActionConfig(HomeToolbarAction.FakeShare) {
@@ -476,6 +482,7 @@ class BrowserToolbarMiddleware(
476482
FakeBookmark,
477483
FakeShare,
478484
NewTab,
485+
FakeTranslate,
479486
}
480487

481488
private data class HomeToolbarActionConfig(
@@ -546,5 +553,23 @@ class BrowserToolbarMiddleware(
546553
AddNewTab(source)
547554
},
548555
)
556+
557+
HomeToolbarAction.FakeTranslate -> ActionButtonRes(
558+
drawableResId = iconsR.drawable.mozac_ic_translate_24,
559+
contentDescription = R.string.browser_toolbar_translate,
560+
state = ActionButton.State.DISABLED,
561+
onClick = FakeClicked,
562+
)
563+
}
564+
565+
companion object {
566+
@VisibleForTesting
567+
internal fun mapShortcutToAction(
568+
key: String,
569+
): HomeToolbarAction = when (key) {
570+
ShortcutType.BOOKMARK -> HomeToolbarAction.FakeBookmark
571+
ShortcutType.TRANSLATE -> HomeToolbarAction.FakeTranslate
572+
else -> HomeToolbarAction.FakeBookmark
573+
}
549574
}
550575
}

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/ToolbarShortcut.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ internal val allShortcutOptions: List<ShortcutOption> = listOf(
5757
ShortcutType.TRANSLATE,
5858
iconsR.drawable.mozac_ic_translate_24,
5959
R.string.toolbar_customize_shortcut_translate,
60-
setOf(ShortcutAvailability.SIMPLE),
60+
setOf(ShortcutAvailability.SIMPLE, ShortcutAvailability.EXPANDED),
6161
),
6262
ShortcutOption(
6363
ShortcutType.HOMEPAGE,

mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMiddlewareTest.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3098,6 +3098,46 @@ class BrowserToolbarMiddlewareTest {
30983098
assertEquals(expectedGoBackButton(), backButton)
30993099
}
31003100

3101+
@Test
3102+
fun `GIVEN expanded toolbar use translate shortcut AND current page is not translated WHEN initializing toolbar THEN show Translate in navigation actions`() = runTest {
3103+
every { settings.shouldShowToolbarCustomization } returns true
3104+
every { settings.shouldUseExpandedToolbar } returns true
3105+
every { settings.toolbarExpandedShortcutKey } returns ShortcutType.TRANSLATE
3106+
3107+
val pageTranslationStatus: PageTranslationStatus = mockk(relaxed = true) {
3108+
every { isTranslationPossible } returns true
3109+
every { isTranslated } returns false
3110+
every { isTranslateProcessing } returns false
3111+
}
3112+
3113+
every { browserScreenState.pageTranslationStatus } returns pageTranslationStatus
3114+
3115+
val toolbarStore = buildStore()
3116+
3117+
val translateButton = toolbarStore.state.displayState.navigationActions.first() as ActionButtonRes
3118+
assertEquals(expectedTranslateButton(), translateButton)
3119+
}
3120+
3121+
@Test
3122+
fun `GIVEN expanded toolbar use translate shortcut AND current page is translated WHEN initializing toolbar THEN show ACTIVE Translate in navigation actions`() = runTest {
3123+
every { settings.shouldShowToolbarCustomization } returns true
3124+
every { settings.shouldUseExpandedToolbar } returns true
3125+
every { settings.toolbarExpandedShortcutKey } returns ShortcutType.TRANSLATE
3126+
3127+
val pageTranslationStatus: PageTranslationStatus = mockk(relaxed = true) {
3128+
every { isTranslationPossible } returns true
3129+
every { isTranslated } returns true
3130+
every { isTranslateProcessing } returns false
3131+
}
3132+
3133+
every { browserScreenState.pageTranslationStatus } returns pageTranslationStatus
3134+
3135+
val toolbarStore = buildStore()
3136+
3137+
val translateButton = toolbarStore.state.displayState.navigationActions.first() as ActionButtonRes
3138+
assertEquals(expectedTranslateButton(isActive = true), translateButton)
3139+
}
3140+
31013141
@Test
31023142
fun `mapShortcutToAction maps keys to actions and falls back to default set`() {
31033143
assertEquals(

mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddlewareTest.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ import org.mozilla.fenix.components.usecases.FenixBrowserUseCases
8686
import org.mozilla.fenix.ext.nav
8787
import org.mozilla.fenix.ext.settings
8888
import org.mozilla.fenix.helpers.FenixGleanTestRule
89+
import org.mozilla.fenix.home.toolbar.BrowserToolbarMiddleware.Companion.mapShortcutToAction
8990
import org.mozilla.fenix.home.toolbar.BrowserToolbarMiddleware.HomeToolbarAction
9091
import org.mozilla.fenix.home.toolbar.DisplayActions.FakeClicked
9192
import org.mozilla.fenix.home.toolbar.DisplayActions.MenuClicked
@@ -96,6 +97,7 @@ import org.mozilla.fenix.home.toolbar.TabCounterInteractions.TabCounterClicked
9697
import org.mozilla.fenix.home.toolbar.TabCounterInteractions.TabCounterLongClicked
9798
import org.mozilla.fenix.search.fixtures.assertSearchSelectorEquals
9899
import org.mozilla.fenix.search.fixtures.buildExpectedSearchSelector
100+
import org.mozilla.fenix.settings.ShortcutType
99101
import org.mozilla.fenix.tabstray.Page
100102
import org.robolectric.Shadows.shadowOf
101103
import mozilla.components.ui.icons.R as iconsR
@@ -123,6 +125,8 @@ class BrowserToolbarMiddlewareTest {
123125
every { testContext.settings().shouldUseExpandedToolbar } returns false
124126
every { testContext.settings().isTabStripEnabled } returns false
125127
every { testContext.settings().tabManagerEnhancementsEnabled } returns false
128+
every { testContext.settings().shouldShowToolbarCustomization } returns false
129+
every { testContext.settings().toolbarExpandedShortcutKey } returns ShortcutType.BOOKMARK
126130

127131
fragment = spyk(Fragment()).apply {
128132
every { context } returns mockContext
@@ -812,6 +816,40 @@ class BrowserToolbarMiddlewareTest {
812816
assertEquals(expectedMenuButton(false), menuButton)
813817
}
814818

819+
@Test
820+
fun `GIVEN expanded toolbar use translate shortcut WHEN initializing toolbar THEN show DISABLED Translate in navigation actions`() = runTest {
821+
every { testContext.settings().shouldShowToolbarCustomization } returns true
822+
every { testContext.settings().shouldUseExpandedToolbar } returns true
823+
every { testContext.settings().toolbarExpandedShortcutKey } returns ShortcutType.TRANSLATE
824+
825+
val middleware = BrowserToolbarMiddleware(
826+
appStore,
827+
browserStore,
828+
mockk(),
829+
mockk(),
830+
)
831+
val toolbarStore = buildStore(middleware)
832+
833+
val translateButton = toolbarStore.state.displayState.navigationActions.first() as ActionButtonRes
834+
assertEquals(expectedTranslateButton, translateButton)
835+
}
836+
837+
@Test
838+
fun `mapShortcutToAction maps keys to actions and falls back to fake bookmark action`() {
839+
assertEquals(
840+
HomeToolbarAction.FakeBookmark,
841+
mapShortcutToAction(key = ShortcutType.BOOKMARK),
842+
)
843+
assertEquals(
844+
HomeToolbarAction.FakeTranslate,
845+
mapShortcutToAction(key = ShortcutType.TRANSLATE),
846+
)
847+
assertEquals(
848+
HomeToolbarAction.FakeBookmark,
849+
mapShortcutToAction(key = "does_not_exist"),
850+
)
851+
}
852+
815853
private fun buildStore(
816854
middleware: BrowserToolbarMiddleware,
817855
context: Context = testContext,
@@ -938,6 +976,13 @@ class BrowserToolbarMiddlewareTest {
938976
onClick = AddNewTab(source),
939977
)
940978

979+
private val expectedTranslateButton = ActionButtonRes(
980+
drawableResId = iconsR.drawable.mozac_ic_translate_24,
981+
contentDescription = R.string.browser_toolbar_translate,
982+
state = ActionButton.State.DISABLED,
983+
onClick = FakeClicked,
984+
)
985+
941986
private class FakeLifecycleOwner(initialState: Lifecycle.State) : LifecycleOwner {
942987
override val lifecycle: Lifecycle = LifecycleRegistry(this).apply {
943988
currentState = initialState

0 commit comments

Comments
 (0)