diff options
author | miguelg <miguelg@chromium.org> | 2015-12-09 08:41:50 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-09 16:42:53 +0000 |
commit | cce1e727994c78dc2aeca695a72da1c70dc34113 (patch) | |
tree | 0066a672d5c47ee57a8ec9e4090393e928ec57d8 /ios | |
parent | b2eda0ef5806332223af383ded63908712e6a155 (diff) | |
download | chromium_src-cce1e727994c78dc2aeca695a72da1c70dc34113.zip chromium_src-cce1e727994c78dc2aeca695a72da1c70dc34113.tar.gz chromium_src-cce1e727994c78dc2aeca695a72da1c70dc34113.tar.bz2 |
Use language codes instead of array indices to set translate languages
BUG=555124
The translate infobar delegate now only accepts setting the original and target language by code.
Android and Mac (the two active translate implementations using infobars) have been upgraded so their
language spinners/menus keep the language code as associated data for every element.
Some operations that were constant are now linear (on a list of ~100 elements). Nothing is in the critical
path and it seems legit to the API less bug prone.
I will investigate in a second step if we can change the translate bubbles as well at which point we could
change the underlying data structure and make things constant again.
Review URL: https://codereview.chromium.org/1473213002
Cr-Commit-Position: refs/heads/master@{#364081}
Diffstat (limited to 'ios')
3 files changed, 37 insertions, 23 deletions
diff --git a/ios/chrome/browser/translate/after_translate_infobar_controller.mm b/ios/chrome/browser/translate/after_translate_infobar_controller.mm index 2ae014e..6364976f 100644 --- a/ios/chrome/browser/translate/after_translate_infobar_controller.mm +++ b/ios/chrome/browser/translate/after_translate_infobar_controller.mm @@ -44,8 +44,8 @@ [infoBarView addLeftIcon:icon.ToUIImage()]; // Main text. const bool autodeterminedSourceLanguage = - _translateInfoBarDelegate->original_language_index() == - translate::TranslateInfoBarDelegate::kNoIndex; + _translateInfoBarDelegate->original_language_code() == + translate::kUnknownLanguageCode; bool swappedLanguageButtons; std::vector<base::string16> strings; translate::TranslateInfoBarDelegate::GetAfterTranslateStrings( @@ -56,12 +56,11 @@ NSString* label3 = autodeterminedSourceLanguage ? @"" : base::SysUTF16ToNSString(strings[2]); - base::string16 stdOriginal = _translateInfoBarDelegate->language_name_at( - _translateInfoBarDelegate->original_language_index()); + base::string16 stdOriginal = + _translateInfoBarDelegate->original_language_name(); NSString* original = base::SysUTF16ToNSString(stdOriginal); - NSString* target = - base::SysUTF16ToNSString(_translateInfoBarDelegate->language_name_at( - _translateInfoBarDelegate->target_language_index())); + NSString* target = base::SysUTF16ToNSString( + _translateInfoBarDelegate->target_language_name()); base::scoped_nsobject<NSString> label( [[NSString alloc] initWithFormat:@"%@ %@ %@%@ %@.", label1, original, label2, label3, target]); diff --git a/ios/chrome/browser/translate/before_translate_infobar_controller.mm b/ios/chrome/browser/translate/before_translate_infobar_controller.mm index c2588d2..78cfaec 100644 --- a/ios/chrome/browser/translate/before_translate_infobar_controller.mm +++ b/ios/chrome/browser/translate/before_translate_infobar_controller.mm @@ -158,12 +158,10 @@ NSTimeInterval kPickerAnimationDurationInSeconds = 0.2; } - (void)updateInfobarLabelOnView:(UIView<InfoBarViewProtocol>*)view { - NSString* originalLanguage = - base::SysUTF16ToNSString(_translateInfoBarDelegate->language_name_at( - _translateInfoBarDelegate->original_language_index())); - NSString* targetLanguage = - base::SysUTF16ToNSString(_translateInfoBarDelegate->language_name_at( - _translateInfoBarDelegate->target_language_index())); + NSString* originalLanguage = base::SysUTF16ToNSString( + _translateInfoBarDelegate->original_language_name()); + NSString* targetLanguage = base::SysUTF16ToNSString( + _translateInfoBarDelegate->target_language_name()); base::string16 originalLanguageWithLink = base::SysNSStringToUTF16([[view class] stringAsLink:originalLanguage @@ -179,15 +177,16 @@ NSTimeInterval kPickerAnimationDurationInSeconds = 0.2; - (void)languageSelectionDone { size_t selectedRow = [_languagePicker selectedRowInComponent:0]; + std::string lang = _translateInfoBarDelegate->language_code_at(selectedRow); if (_languageSelectionType == TranslateInfoBarIOSTag::BEFORE_SOURCE_LANGUAGE && - selectedRow != _translateInfoBarDelegate->target_language_index()) { - _translateInfoBarDelegate->UpdateOriginalLanguageIndex(selectedRow); + lang != _translateInfoBarDelegate->target_language_code()) { + _translateInfoBarDelegate->UpdateOriginalLanguage(lang); } if (_languageSelectionType == TranslateInfoBarIOSTag::BEFORE_TARGET_LANGUAGE && - selectedRow != _translateInfoBarDelegate->original_language_index()) { - _translateInfoBarDelegate->UpdateTargetLanguageIndex(selectedRow); + lang != _translateInfoBarDelegate->original_language_code()) { + _translateInfoBarDelegate->UpdateTargetLanguage(lang); } [self updateInfobarLabelOnView:self.view]; [self dismissLanguageSelectionView]; @@ -310,13 +309,29 @@ NSTimeInterval kPickerAnimationDurationInSeconds = 0.2; // Creates the PickerView and its controller. NSInteger selectedRow; NSInteger disabledRow; + NSInteger originalLanguageIndex = -1; + NSInteger targetLanguageIndex = -1; + + for (size_t i = 0; i < _translateInfoBarDelegate->num_languages(); ++i) { + if (_translateInfoBarDelegate->language_code_at(i) == + _translateInfoBarDelegate->original_language_code()) { + originalLanguageIndex = i; + } + if (_translateInfoBarDelegate->language_code_at(i) == + _translateInfoBarDelegate->target_language_code()) { + targetLanguageIndex = i; + } + } + DCHECK_GT(originalLanguageIndex, -1); + DCHECK_GT(targetLanguageIndex, -1); + if (_languageSelectionType == TranslateInfoBarIOSTag::BEFORE_SOURCE_LANGUAGE) { - selectedRow = _translateInfoBarDelegate->original_language_index(); - disabledRow = _translateInfoBarDelegate->target_language_index(); + selectedRow = originalLanguageIndex; + disabledRow = targetLanguageIndex; } else { - selectedRow = _translateInfoBarDelegate->target_language_index(); - disabledRow = _translateInfoBarDelegate->original_language_index(); + selectedRow = targetLanguageIndex; + disabledRow = originalLanguageIndex; } _languagePickerController.reset([[LanguagePickerController alloc] initWithDelegate:_translateInfoBarDelegate diff --git a/ios/chrome/browser/translate/never_translate_infobar_controller.mm b/ios/chrome/browser/translate/never_translate_infobar_controller.mm index 9051548..84fcfaf 100644 --- a/ios/chrome/browser/translate/never_translate_infobar_controller.mm +++ b/ios/chrome/browser/translate/never_translate_infobar_controller.mm @@ -42,8 +42,8 @@ if (!icon.IsEmpty()) [infoBarView addLeftIcon:icon.ToUIImage()]; // Main text. - base::string16 originalLanguage = translateInfoBarDelegate->language_name_at( - translateInfoBarDelegate->original_language_index()); + base::string16 originalLanguage = + translateInfoBarDelegate->original_language_name(); [infoBarView addLabel:l10n_util::GetNSStringF( IDS_TRANSLATE_INFOBAR_NEVER_MESSAGE_IOS, provider->GetStringProvider()->GetProductName(), |