Skip to content

Commit 0844d8e

Browse files
Bugfix FXIOS-15330 #32907 Suspension marks missing on multi language flow (#32980)
1 parent de2776c commit 0844d8e

5 files changed

Lines changed: 90 additions & 12 deletions

File tree

firefox-ios/Client/Frontend/Browser/MainMenu/MainMenuConfigurationUtility.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ struct MainMenuConfigurationUtility: Equatable, FeatureFlaggable {
421421
translationConfig.isTranslationFeatureEnabled,
422422
translationConfig.state != nil
423423
else { return nil }
424-
424+
let isMultiLanguageFlow = translationConfig.isMultiLanguageFlow
425425
let isActive = translationConfig.state == .active
426426
let infoTitle: String
427427
if isActive, let langCode = translationConfig.translatedToLanguage {
@@ -437,10 +437,17 @@ struct MainMenuConfigurationUtility: Equatable, FeatureFlaggable {
437437
)
438438
: .MainMenu.ToolsSection.Translation.TranslatePageTitle
439439

440+
let title: String
441+
if isActive {
442+
title = isMultiLanguageFlow ? .MainMenu.ToolsSection.Translation.TranslatedPageTitleMultiLanguage
443+
: .MainMenu.ToolsSection.Translation.TranslatedPageTitle
444+
} else {
445+
title = isMultiLanguageFlow ? .MainMenu.ToolsSection.Translation.TranslatePageTitleMultiLanguage
446+
: .MainMenu.ToolsSection.Translation.TranslatePageTitle
447+
}
448+
440449
return MenuElement(
441-
title: isActive
442-
? .MainMenu.ToolsSection.Translation.TranslatedPageTitle
443-
: .MainMenu.ToolsSection.Translation.TranslatePageTitle,
450+
title: title,
444451
iconName: Icons.translate,
445452
isEnabled: true,
446453
isActive: isActive,

firefox-ios/Client/Frontend/Browser/MainMenu/MainMenuCoordinator.swift

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -168,18 +168,31 @@ class MainMenuCoordinator: BaseCoordinator, FeatureFlaggable {
168168
let translationConfig = toolbarState?.addressToolbar.translationConfiguration
169169
let isTranslated = translationConfig?.state == .active
170170
let translatedLanguage = translationConfig?.translatedToLanguage
171+
let isSingleLanguageFlow = if let translationConfig {
172+
!translationConfig.isMultiLanguageFlow
173+
} else {
174+
false
175+
}
171176
let prefs = profile.prefs
172177
Task {
173178
let manager = PreferredTranslationLanguagesManager(prefs: prefs)
174179
let supported = await ASTranslationModelsFetcher.shared.fetchSupportedTargetLanguages()
175180
let languages = manager.preferredLanguages(supportedTargetLanguages: supported)
176-
store.dispatch(GeneralBrowserAction(
177-
translationLanguages: languages,
178-
isPageTranslated: isTranslated,
179-
translatedToLanguage: translatedLanguage,
180-
windowUUID: windowUUID,
181-
actionType: GeneralBrowserActionType.showTranslationLanguagePicker
182-
))
181+
if isSingleLanguageFlow, let language = languages.first, !isTranslated {
182+
store.dispatch(TranslationLanguageSelectedAction(
183+
windowUUID: windowUUID,
184+
targetLanguage: language,
185+
actionType: TranslationsActionType.didSelectTargetLanguage
186+
))
187+
} else {
188+
store.dispatch(GeneralBrowserAction(
189+
translationLanguages: languages,
190+
isPageTranslated: isTranslated,
191+
translatedToLanguage: translatedLanguage,
192+
windowUUID: windowUUID,
193+
actionType: GeneralBrowserActionType.showTranslationLanguagePicker
194+
))
195+
}
183196
}
184197
}
185198
}

firefox-ios/Client/Frontend/Browser/Toolbars/Redux/TranslationsConfiguration.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ struct TranslationConfiguration: Equatable, FeatureFlaggable {
6565
self.translatedToLanguage = translatedToLanguage
6666
}
6767

68+
var isMultiLanguageFlow: Bool {
69+
guard featureFlags.isFeatureEnabled(.translationLanguagePicker, checking: .buildOnly) else { return false }
70+
guard let stored = prefs.stringForKey(PrefsKeys.Settings.translationPreferredLanguages),
71+
!stored.isEmpty else { return false }
72+
return stored.components(separatedBy: ",").count != 1
73+
}
74+
6875
/// Determines whether to show the translate icon on the toolbar
6976
/// The experiment needs to be turned on and the user settings needs to be enabled
7077
/// If user has not toggled the settings, then we enable the feature by default

firefox-ios/Shared/Strings.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5652,6 +5652,18 @@ extension String {
56525652
value: "Translated",
56535653
comment: "On the main menu, the title for the action that shows that the content of the webpage is already translated.")
56545654

5655+
public static let TranslatePageTitleMultiLanguage = MZLocalizedString(
5656+
key: "MainMenu.ToolsSection.Translation.Title.v151",
5657+
tableName: "MainMenu",
5658+
value: "Translate Page…",
5659+
comment: "On the main menu, in the multi-language translation flow, the title for the action that will open a language picker to choose a language and translate the content of the webpage. The ellipsis indicates that a language picker will open.")
5660+
5661+
public static let TranslatedPageTitleMultiLanguage = MZLocalizedString(
5662+
key: "MainMenu.ToolsSection.Translation.Translated.Title.v151",
5663+
tableName: "MainMenu",
5664+
value: "Translated…",
5665+
comment: "On the main menu, in the multi-language translation flow, the title for the action that shows the content of the webpage has been translated. Tapping opens a language picker to change the language. The ellipsis indicates that a language picker will open.")
5666+
56555667
public static let Off = MZLocalizedString(
56565668
key: "MainMenu.ToolsSection.Translation.Off.v151",
56575669
tableName: "MainMenu",

firefox-ios/firefox-ios-tests/Tests/ClientTests/MainMenu/MainMenuConfigurationUtilityTests.swift

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ final class MainMenuConfigurationUtilityTests: XCTestCase {
9595
)
9696
let allTitles = sections.flatMap { $0.options }.map { $0.title }
9797

98-
XCTAssertFalse(allTitles.contains(.MainMenu.ToolsSection.Translation.TranslatePageTitle))
98+
XCTAssertFalse(allTitles.contains(.MainMenu.ToolsSection.Translation.TranslatePageTitleMultiLanguage))
9999
}
100100

101101
func test_translateItem_inactive_whenStateIsInactive() {
@@ -122,6 +122,45 @@ final class MainMenuConfigurationUtilityTests: XCTestCase {
122122
let config = TranslationConfiguration(prefs: mockProfile.prefs, state: .active, translatedToLanguage: "fr")
123123
let tabInfo = getTabInfo(translationConfiguration: config)
124124

125+
let sections = configUtility.generateMenuElements(
126+
with: tabInfo,
127+
and: windowUUID,
128+
isExpanded: true,
129+
localeProvider: MockLocaleProvider(current: Locale(identifier: "en"))
130+
)
131+
let allItems = sections.flatMap { $0.options }
132+
let title = String.MainMenu.ToolsSection.Translation.TranslatedPageTitle
133+
let translateItem = allItems.first { $0.title == title }
134+
135+
XCTAssertNotNil(translateItem)
136+
}
137+
138+
func test_translateItem_singleLanguage_inactive_showsNoEllipsis() {
139+
setLanguagePickerEnabled(true)
140+
let mockProfile = MockProfile()
141+
mockProfile.prefs.setString("en", forKey: PrefsKeys.Settings.translationPreferredLanguages)
142+
let config = TranslationConfiguration(prefs: mockProfile.prefs, state: .inactive)
143+
let tabInfo = getTabInfo(translationConfiguration: config)
144+
145+
let sections = configUtility.generateMenuElements(
146+
with: tabInfo,
147+
and: windowUUID,
148+
isExpanded: true,
149+
localeProvider: MockLocaleProvider(current: Locale(identifier: "en"))
150+
)
151+
let allItems = sections.flatMap { $0.options }
152+
let translateItem = allItems.first { $0.title == .MainMenu.ToolsSection.Translation.TranslatePageTitle }
153+
154+
XCTAssertNotNil(translateItem)
155+
}
156+
157+
func test_translateItem_singleLanguage_active_showsNoEllipsis() {
158+
setLanguagePickerEnabled(true)
159+
let mockProfile = MockProfile()
160+
mockProfile.prefs.setString("en", forKey: PrefsKeys.Settings.translationPreferredLanguages)
161+
let config = TranslationConfiguration(prefs: mockProfile.prefs, state: .active, translatedToLanguage: "en")
162+
let tabInfo = getTabInfo(translationConfiguration: config)
163+
125164
let sections = configUtility.generateMenuElements(
126165
with: tabInfo,
127166
and: windowUUID,

0 commit comments

Comments
 (0)