summaryrefslogtreecommitdiffstats
path: root/ios
diff options
context:
space:
mode:
authormiguelg <miguelg@chromium.org>2015-12-09 08:41:50 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-09 16:42:53 +0000
commitcce1e727994c78dc2aeca695a72da1c70dc34113 (patch)
tree0066a672d5c47ee57a8ec9e4090393e928ec57d8 /ios
parentb2eda0ef5806332223af383ded63908712e6a155 (diff)
downloadchromium_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')
-rw-r--r--ios/chrome/browser/translate/after_translate_infobar_controller.mm13
-rw-r--r--ios/chrome/browser/translate/before_translate_infobar_controller.mm43
-rw-r--r--ios/chrome/browser/translate/never_translate_infobar_controller.mm4
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(),