| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ios/chrome/browser/translate/after_translate_infobar_controller.h" | 5 #include "ios/chrome/browser/translate/after_translate_infobar_controller.h" |
| 6 | 6 |
| 7 #include "base/mac/scoped_nsobject.h" | |
| 8 #include "base/strings/sys_string_conversions.h" | 7 #include "base/strings/sys_string_conversions.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 10 #include "components/strings/grit/components_strings.h" | 9 #include "components/strings/grit/components_strings.h" |
| 11 #include "components/translate/core/browser/translate_infobar_delegate.h" | 10 #include "components/translate/core/browser/translate_infobar_delegate.h" |
| 12 #include "ios/chrome/browser/translate/translate_infobar_tags.h" | 11 #include "ios/chrome/browser/translate/translate_infobar_tags.h" |
| 13 #import "ios/chrome/browser/ui/infobars/infobar_view.h" | 12 #import "ios/chrome/browser/ui/infobars/infobar_view.h" |
| 14 #import "ios/chrome/browser/ui/infobars/infobar_view_delegate.h" | 13 #import "ios/chrome/browser/ui/infobars/infobar_view_delegate.h" |
| 15 #include "ui/base/l10n/l10n_util.h" | 14 #include "ui/base/l10n/l10n_util.h" |
| 16 #include "ui/gfx/image/image.h" | 15 #include "ui/gfx/image/image.h" |
| 17 | 16 |
| 17 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 18 #error "This file requires ARC support." |
| 19 #endif |
| 20 |
| 18 namespace { | 21 namespace { |
| 19 enum AlwaysTranslateSwitchState { | 22 enum AlwaysTranslateSwitchState { |
| 20 ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED, | 23 ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED, |
| 21 ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED, | 24 ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED, |
| 22 ALWAYS_TRANSLATE_SWITCH_SET_TO_DISABLED, | 25 ALWAYS_TRANSLATE_SWITCH_SET_TO_DISABLED, |
| 23 }; | 26 }; |
| 24 } // namespace | 27 } // namespace |
| 25 | 28 |
| 26 @interface AfterTranslateInfoBarController () { | 29 @interface AfterTranslateInfoBarController () { |
| 27 translate::TranslateInfoBarDelegate* _translateInfoBarDelegate; // weak | 30 translate::TranslateInfoBarDelegate* _translateInfoBarDelegate; // weak |
| 28 AlwaysTranslateSwitchState _alwaysTranslateSwitchState; | 31 AlwaysTranslateSwitchState _alwaysTranslateSwitchState; |
| 29 } | 32 } |
| 30 | 33 |
| 31 // Action for any of the user defined buttons. | 34 // Action for any of the user defined buttons. |
| 32 - (void)infoBarButtonDidPress:(id)sender; | 35 - (void)infoBarButtonDidPress:(id)sender; |
| 33 | 36 |
| 34 @end | 37 @end |
| 35 | 38 |
| 36 @implementation AfterTranslateInfoBarController | 39 @implementation AfterTranslateInfoBarController |
| 37 | 40 |
| 38 #pragma mark - | 41 #pragma mark - |
| 39 #pragma mark InfoBarControllerProtocol | 42 #pragma mark InfoBarControllerProtocol |
| 40 | 43 |
| 41 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate | 44 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate |
| 42 frame:(CGRect)frame { | 45 frame:(CGRect)frame { |
| 43 base::scoped_nsobject<InfoBarView> infoBarView; | 46 InfoBarView* infoBarView; |
| 44 _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate(); | 47 _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate(); |
| 45 DCHECK(_translateInfoBarDelegate); | 48 DCHECK(_translateInfoBarDelegate); |
| 46 infoBarView.reset( | 49 infoBarView = |
| 47 [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]); | 50 [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]; |
| 48 // Icon | 51 // Icon |
| 49 gfx::Image icon = _translateInfoBarDelegate->GetIcon(); | 52 gfx::Image icon = _translateInfoBarDelegate->GetIcon(); |
| 50 if (!icon.IsEmpty()) | 53 if (!icon.IsEmpty()) |
| 51 [infoBarView addLeftIcon:icon.ToUIImage()]; | 54 [infoBarView addLeftIcon:icon.ToUIImage()]; |
| 52 // Main text. | 55 // Main text. |
| 53 const bool autodeterminedSourceLanguage = | 56 const bool autodeterminedSourceLanguage = |
| 54 _translateInfoBarDelegate->original_language_code() == | 57 _translateInfoBarDelegate->original_language_code() == |
| 55 translate::kUnknownLanguageCode; | 58 translate::kUnknownLanguageCode; |
| 56 bool swappedLanguageButtons; | 59 bool swappedLanguageButtons; |
| 57 std::vector<base::string16> strings; | 60 std::vector<base::string16> strings; |
| 58 translate::TranslateInfoBarDelegate::GetAfterTranslateStrings( | 61 translate::TranslateInfoBarDelegate::GetAfterTranslateStrings( |
| 59 &strings, &swappedLanguageButtons, autodeterminedSourceLanguage); | 62 &strings, &swappedLanguageButtons, autodeterminedSourceLanguage); |
| 60 DCHECK_EQ(autodeterminedSourceLanguage ? 2U : 3U, strings.size()); | 63 DCHECK_EQ(autodeterminedSourceLanguage ? 2U : 3U, strings.size()); |
| 61 NSString* label1 = base::SysUTF16ToNSString(strings[0]); | 64 NSString* label1 = base::SysUTF16ToNSString(strings[0]); |
| 62 NSString* label2 = base::SysUTF16ToNSString(strings[1]); | 65 NSString* label2 = base::SysUTF16ToNSString(strings[1]); |
| 63 NSString* label3 = autodeterminedSourceLanguage | 66 NSString* label3 = autodeterminedSourceLanguage |
| 64 ? @"" | 67 ? @"" |
| 65 : base::SysUTF16ToNSString(strings[2]); | 68 : base::SysUTF16ToNSString(strings[2]); |
| 66 base::string16 stdOriginal = | 69 base::string16 stdOriginal = |
| 67 _translateInfoBarDelegate->original_language_name(); | 70 _translateInfoBarDelegate->original_language_name(); |
| 68 NSString* original = base::SysUTF16ToNSString(stdOriginal); | 71 NSString* original = base::SysUTF16ToNSString(stdOriginal); |
| 69 NSString* target = base::SysUTF16ToNSString( | 72 NSString* target = base::SysUTF16ToNSString( |
| 70 _translateInfoBarDelegate->target_language_name()); | 73 _translateInfoBarDelegate->target_language_name()); |
| 71 base::scoped_nsobject<NSString> label( | 74 NSString* label = |
| 72 [[NSString alloc] initWithFormat:@"%@ %@ %@%@ %@.", label1, original, | 75 [[NSString alloc] initWithFormat:@"%@ %@ %@%@ %@.", label1, original, |
| 73 label2, label3, target]); | 76 label2, label3, target]; |
| 74 [infoBarView addLabel:label]; | 77 [infoBarView addLabel:label]; |
| 75 // Close button. | 78 // Close button. |
| 76 [infoBarView addCloseButtonWithTag:TranslateInfoBarIOSTag::CLOSE | 79 [infoBarView addCloseButtonWithTag:TranslateInfoBarIOSTag::CLOSE |
| 77 target:self | 80 target:self |
| 78 action:@selector(infoBarButtonDidPress:)]; | 81 action:@selector(infoBarButtonDidPress:)]; |
| 79 // Other buttons. | 82 // Other buttons. |
| 80 NSString* buttonRevert = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_REVERT); | 83 NSString* buttonRevert = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_REVERT); |
| 81 NSString* buttonOptions = l10n_util::GetNSString(IDS_DONE); | 84 NSString* buttonOptions = l10n_util::GetNSString(IDS_DONE); |
| 82 [infoBarView addButton1:buttonOptions | 85 [infoBarView addButton1:buttonOptions |
| 83 tag1:TranslateInfoBarIOSTag::AFTER_DONE | 86 tag1:TranslateInfoBarIOSTag::AFTER_DONE |
| 84 button2:buttonRevert | 87 button2:buttonRevert |
| 85 tag2:TranslateInfoBarIOSTag::AFTER_REVERT | 88 tag2:TranslateInfoBarIOSTag::AFTER_REVERT |
| 86 target:self | 89 target:self |
| 87 action:@selector(infoBarButtonDidPress:)]; | 90 action:@selector(infoBarButtonDidPress:)]; |
| 88 // Always translate switch. | 91 // Always translate switch. |
| 89 _alwaysTranslateSwitchState = ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED; | 92 _alwaysTranslateSwitchState = ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED; |
| 90 if (_translateInfoBarDelegate->ShouldShowAlwaysTranslateShortcut()) { | 93 if (_translateInfoBarDelegate->ShouldShowAlwaysTranslateShortcut()) { |
| 91 base::string16 alwaysTranslate = l10n_util::GetStringFUTF16( | 94 base::string16 alwaysTranslate = l10n_util::GetStringFUTF16( |
| 92 IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, stdOriginal); | 95 IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, stdOriginal); |
| 93 const BOOL switchValue = _translateInfoBarDelegate->ShouldAlwaysTranslate(); | 96 const BOOL switchValue = _translateInfoBarDelegate->ShouldAlwaysTranslate(); |
| 94 [infoBarView | 97 [infoBarView |
| 95 addSwitchWithLabel:base::SysUTF16ToNSString(alwaysTranslate) | 98 addSwitchWithLabel:base::SysUTF16ToNSString(alwaysTranslate) |
| 96 isOn:switchValue | 99 isOn:switchValue |
| 97 tag:TranslateInfoBarIOSTag::ALWAYS_TRANSLATE_SWITCH | 100 tag:TranslateInfoBarIOSTag::ALWAYS_TRANSLATE_SWITCH |
| 98 target:self | 101 target:self |
| 99 action:@selector(infoBarSwitchDidPress:)]; | 102 action:@selector(infoBarSwitchDidPress:)]; |
| 100 } | 103 } |
| 101 return [[infoBarView retain] autorelease]; | 104 return infoBarView; |
| 102 } | 105 } |
| 103 | 106 |
| 104 #pragma mark - Handling of User Events | 107 #pragma mark - Handling of User Events |
| 105 | 108 |
| 106 - (void)infoBarButtonDidPress:(id)sender { | 109 - (void)infoBarButtonDidPress:(id)sender { |
| 107 // This press might have occurred after the user has already pressed a button, | 110 // This press might have occurred after the user has already pressed a button, |
| 108 // in which case the view has been detached from the delegate and this press | 111 // in which case the view has been detached from the delegate and this press |
| 109 // should be ignored. | 112 // should be ignored. |
| 110 if (!self.delegate) { | 113 if (!self.delegate) { |
| 111 return; | 114 return; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 140 | 143 |
| 141 const bool alwaysTranslate = | 144 const bool alwaysTranslate = |
| 142 _alwaysTranslateSwitchState == ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED; | 145 _alwaysTranslateSwitchState == ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED; |
| 143 if (alwaysTranslate == _translateInfoBarDelegate->ShouldAlwaysTranslate()) | 146 if (alwaysTranslate == _translateInfoBarDelegate->ShouldAlwaysTranslate()) |
| 144 return; | 147 return; |
| 145 | 148 |
| 146 _translateInfoBarDelegate->ToggleAlwaysTranslate(); | 149 _translateInfoBarDelegate->ToggleAlwaysTranslate(); |
| 147 } | 150 } |
| 148 | 151 |
| 149 @end | 152 @end |
| OLD | NEW |