Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(617)

Side by Side Diff: chrome/browser/ui/views/translate/translate_bubble_view.cc

Issue 1923143003: Implement the 2016Q2 Translate UI designe spec out in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: change based on msw comments. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "chrome/browser/ui/views/translate/translate_bubble_view.h" 5 #include "chrome/browser/ui/views/translate/translate_bubble_view.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/i18n/string_compare.h" 13 #include "base/i18n/string_compare.h"
14 #include "base/memory/singleton.h" 14 #include "base/memory/singleton.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/translate/chrome_translate_client.h" 19 #include "chrome/browser/translate/chrome_translate_client.h"
20 #include "chrome/browser/translate/translate_service.h" 20 #include "chrome/browser/translate/translate_service.h"
21 #include "chrome/browser/ui/chrome_pages.h" 21 #include "chrome/browser/ui/chrome_pages.h"
22 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h" 22 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h"
23 #include "chrome/browser/ui/translate/translate_bubble_view_state_transition.h"
23 #include "chrome/common/url_constants.h" 24 #include "chrome/common/url_constants.h"
24 #include "chrome/grit/generated_resources.h" 25 #include "chrome/grit/generated_resources.h"
25 #include "components/prefs/pref_service.h" 26 #include "components/prefs/pref_service.h"
26 #include "components/translate/core/browser/translate_download_manager.h" 27 #include "components/translate/core/browser/translate_download_manager.h"
27 #include "components/translate/core/browser/translate_manager.h" 28 #include "components/translate/core/browser/translate_manager.h"
29 #include "components/translate/core/browser/translate_prefs.h"
28 #include "components/translate/core/browser/translate_ui_delegate.h" 30 #include "components/translate/core/browser/translate_ui_delegate.h"
29 #include "content/public/browser/web_contents.h" 31 #include "content/public/browser/web_contents.h"
30 #include "grit/components_strings.h" 32 #include "grit/components_strings.h"
33 #include "grit/ui_resources.h"
31 #include "ui/base/l10n/l10n_util.h" 34 #include "ui/base/l10n/l10n_util.h"
32 #include "ui/base/models/combobox_model.h" 35 #include "ui/base/models/combobox_model.h"
33 #include "ui/base/models/simple_combobox_model.h" 36 #include "ui/base/models/simple_combobox_model.h"
37 #include "ui/base/resource/resource_bundle.h"
38 #include "ui/views/bubble/bubble_frame_view.h"
39 #include "ui/views/controls/button/blue_button.h"
34 #include "ui/views/controls/button/checkbox.h" 40 #include "ui/views/controls/button/checkbox.h"
35 #include "ui/views/controls/button/label_button.h" 41 #include "ui/views/controls/button/label_button.h"
42 #include "ui/views/controls/button/menu_button.h"
36 #include "ui/views/controls/combobox/combobox.h" 43 #include "ui/views/controls/combobox/combobox.h"
37 #include "ui/views/controls/label.h" 44 #include "ui/views/controls/label.h"
38 #include "ui/views/controls/link.h" 45 #include "ui/views/controls/link.h"
46 #include "ui/views/controls/styled_label.h"
39 #include "ui/views/layout/box_layout.h" 47 #include "ui/views/layout/box_layout.h"
40 #include "ui/views/layout/grid_layout.h" 48 #include "ui/views/layout/grid_layout.h"
41 #include "ui/views/layout/layout_constants.h" 49 #include "ui/views/layout/layout_constants.h"
42 #include "ui/views/widget/widget.h" 50 #include "ui/views/widget/widget.h"
43 51
44 namespace { 52 namespace {
45 53
54 const char kTranslateBubbleUIEvent[] = "Translate.BubbleUiEvent";
55
56 views::LabelButton* CreateBlueButton(views::ButtonListener* listener,
57 const base::string16& label,
58 int id) {
59 views::LabelButton* button = new views::BlueButton(listener, label);
60 button->set_id(id);
61 return button;
62 }
63
46 views::LabelButton* CreateLabelButton(views::ButtonListener* listener, 64 views::LabelButton* CreateLabelButton(views::ButtonListener* listener,
47 const base::string16& label, 65 const base::string16& label,
48 int id) { 66 int id) {
49 views::LabelButton* button = new views::LabelButton(listener, label); 67 views::LabelButton* button = new views::LabelButton(listener, label);
50 button->set_id(id); 68 button->set_id(id);
51 button->SetStyle(views::Button::STYLE_BUTTON); 69 button->SetStyle(views::Button::STYLE_BUTTON);
52 return button; 70 return button;
53 } 71 }
54 72
55 views::Link* CreateLink(views::LinkListener* listener, 73 views::Link* CreateLink(views::LinkListener* listener,
74 const base::string16& text,
75 int id) {
76 views::Link* link = new views::Link(text);
77 link->set_listener(listener);
78 link->set_id(id);
79 return link;
80 }
81
82 views::Link* CreateLink(views::LinkListener* listener,
56 int resource_id, 83 int resource_id,
57 int id) { 84 int id) {
58 views::Link* link = new views::Link( 85 return CreateLink(listener, l10n_util::GetStringUTF16(resource_id), id);
59 l10n_util::GetStringUTF16(resource_id));
60 link->set_listener(listener);
61 link->set_id(id);
62 return link;
63 } 86 }
64 87
88 void AddIconToLayout(views::GridLayout* layout) {
89 views::ImageView* icon = new views::ImageView();
90 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
91 icon->SetImage(bundle.GetImageNamed(IDR_TRANSLATE_ICON_BUBBLE).ToImageSkia());
92 layout->AddView(icon);
93 }
94
95 bool Use2016Q2UI() {
96 return base::FeatureList::IsEnabled(translate::kTranslateUI2016Q2);
97 }
65 } // namespace 98 } // namespace
msw 2016/05/04 00:19:21 nit: add a blank line above.
ftang 2016/05/04 00:34:01 Done.
66 99
67 // static 100 // static
68 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL; 101 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL;
69 102
70 TranslateBubbleView::~TranslateBubbleView() { 103 TranslateBubbleView::~TranslateBubbleView() {
71 // A child view could refer to a model which is owned by this class when 104 // A child view could refer to a model which is owned by this class when
72 // the child view is destructed. For example, |source_language_combobx_model_| 105 // the child view is destructed. For example, |source_language_combobx_model_|
73 // is referred by Combobox's destructor. Before destroying the models, 106 // is referred by Combobox's destructor. Before destroying the models,
74 // removing the child views is needed. 107 // removing the child views is needed.
75 RemoveAllChildViews(true); 108 RemoveAllChildViews(true);
76 } 109 }
77 110
78 // static 111 // static
79 views::Widget* TranslateBubbleView::ShowBubble( 112 views::Widget* TranslateBubbleView::ShowBubble(
80 views::View* anchor_view, 113 views::View* anchor_view,
81 content::WebContents* web_contents, 114 content::WebContents* web_contents,
82 translate::TranslateStep step, 115 translate::TranslateStep step,
83 translate::TranslateErrors::Type error_type, 116 translate::TranslateErrors::Type error_type,
84 DisplayReason reason) { 117 DisplayReason reason) {
85 if (translate_bubble_view_) { 118 if (translate_bubble_view_) {
86 // When the user reads the advanced setting panel, the bubble should not be 119 // When the user reads the advanced setting panel, the bubble should not be
87 // changed because they are focusing on the bubble. 120 // changed because they are focusing on the bubble.
88 if (translate_bubble_view_->web_contents() == web_contents && 121 if (translate_bubble_view_->web_contents() == web_contents &&
89 translate_bubble_view_->model()->GetViewState() == 122 translate_bubble_view_->model()->GetViewState() ==
90 TranslateBubbleModel::VIEW_STATE_ADVANCED) { 123 TranslateBubbleModel::VIEW_STATE_ADVANCED) {
91 return nullptr; 124 return nullptr;
92 } 125 }
93 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { 126 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) {
94 TranslateBubbleModel::ViewState state = 127 TranslateBubbleModel::ViewState state =
95 TranslateBubbleModelImpl::TranslateStepToViewState(step); 128 TranslateBubbleModelImpl::TranslateStepToViewState(step);
96 translate_bubble_view_->SwitchView(state); 129 translate_bubble_view_->SwitchView(state);
97 } else { 130 } else {
98 translate_bubble_view_->SwitchToErrorView(error_type); 131 translate_bubble_view_->SwitchToErrorView(error_type);
99 } 132 }
100 return nullptr; 133 return nullptr;
101 } else { 134 } else {
102 if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE && 135 if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE &&
103 reason == AUTOMATIC) { 136 reason == AUTOMATIC) {
104 return nullptr; 137 return nullptr;
105 } 138 }
106 } 139 }
107 140
108 std::string source_language; 141 std::string source_language;
109 std::string target_language; 142 std::string target_language;
110 ChromeTranslateClient::GetTranslateLanguages( 143 ChromeTranslateClient::GetTranslateLanguages(web_contents, &source_language,
111 web_contents, &source_language, &target_language); 144 &target_language);
112 145
113 std::unique_ptr<translate::TranslateUIDelegate> ui_delegate( 146 std::unique_ptr<translate::TranslateUIDelegate> ui_delegate(
114 new translate::TranslateUIDelegate( 147 new translate::TranslateUIDelegate(
115 ChromeTranslateClient::GetManagerFromWebContents(web_contents) 148 ChromeTranslateClient::GetManagerFromWebContents(web_contents)
116 ->GetWeakPtr(), 149 ->GetWeakPtr(),
117 source_language, target_language)); 150 source_language, target_language));
118 std::unique_ptr<TranslateBubbleModel> model( 151 std::unique_ptr<TranslateBubbleModel> model(
119 new TranslateBubbleModelImpl(step, std::move(ui_delegate))); 152 new TranslateBubbleModelImpl(step, std::move(ui_delegate)));
120 TranslateBubbleView* view = new TranslateBubbleView( 153 TranslateBubbleView* view = new TranslateBubbleView(
121 anchor_view, std::move(model), error_type, web_contents); 154 anchor_view, std::move(model), error_type, web_contents);
122 views::Widget* bubble_widget = 155 views::Widget* bubble_widget =
123 views::BubbleDialogDelegateView::CreateBubble(view); 156 views::BubbleDialogDelegateView::CreateBubble(view);
124 view->ShowForReason(reason); 157 view->ShowForReason(reason);
125 return bubble_widget; 158 return bubble_widget;
126 } 159 }
127 160
128 // static 161 // static
129 void TranslateBubbleView::CloseCurrentBubble() { 162 void TranslateBubbleView::CloseCurrentBubble() {
130 if (translate_bubble_view_) 163 if (translate_bubble_view_)
131 translate_bubble_view_->CloseBubble(); 164 translate_bubble_view_->CloseBubble();
132 } 165 }
133 166
134 // static 167 // static
135 TranslateBubbleView* TranslateBubbleView::GetCurrentBubble() { 168 TranslateBubbleView* TranslateBubbleView::GetCurrentBubble() {
136 return translate_bubble_view_; 169 return translate_bubble_view_;
137 } 170 }
138 171
139 void TranslateBubbleView::Init() { 172 void TranslateBubbleView::Init() {
140 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 173 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
141 0, 0, 0));
142 174
143 before_translate_view_ = CreateViewBeforeTranslate(); 175 before_translate_view_ = CreateViewBeforeTranslate();
144 translating_view_ = CreateViewTranslating(); 176 translating_view_ = CreateViewTranslating();
145 after_translate_view_ = CreateViewAfterTranslate(); 177 after_translate_view_ = CreateViewAfterTranslate();
146 error_view_ = CreateViewError(); 178 error_view_ = CreateViewError();
147 advanced_view_ = CreateViewAdvanced(); 179 advanced_view_ = CreateViewAdvanced();
148 180
149 AddChildView(before_translate_view_); 181 AddChildView(before_translate_view_);
150 AddChildView(translating_view_); 182 AddChildView(translating_view_);
151 AddChildView(after_translate_view_); 183 AddChildView(after_translate_view_);
152 AddChildView(error_view_); 184 AddChildView(error_view_);
153 AddChildView(advanced_view_); 185 AddChildView(advanced_view_);
154 186
155 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); 187 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
156 188
157 UpdateChildVisibilities(); 189 UpdateChildVisibilities();
158 190
159 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR) 191 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR)
160 model_->ShowError(error_type_); 192 model_->ShowError(error_type_);
161 } 193 }
162 194
163 void TranslateBubbleView::ButtonPressed(views::Button* sender, 195 void TranslateBubbleView::ButtonPressed(views::Button* sender,
164 const ui::Event& event) { 196 const ui::Event& event) {
165 HandleButtonPressed(static_cast<ButtonID>(sender->id())); 197 HandleButtonPressed(static_cast<ButtonID>(sender->id()));
166 } 198 }
167 199
200 bool TranslateBubbleView::ShouldShowCloseButton() const {
201 return Use2016Q2UI();
202 }
203
168 void TranslateBubbleView::WindowClosing() { 204 void TranslateBubbleView::WindowClosing() {
169 // The operations for |model_| are valid only when a WebContents is alive. 205 // The operations for |model_| are valid only when a WebContents is alive.
170 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a 206 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a
171 // WebContents as a member variable because the WebContents might be destroyed 207 // WebContents as a member variable because the WebContents might be destroyed
172 // while the TranslateBubbleViewModel(Impl) is still alive. Instead, 208 // while the TranslateBubbleViewModel(Impl) is still alive. Instead,
173 // TranslateBubbleViewModel should take a reference of a WebContents at each 209 // TranslateBubbleViewModel should take a reference of a WebContents at each
174 // method. (crbug/320497) 210 // method. (crbug/320497)
175 if (web_contents()) 211 if (web_contents())
176 model_->OnBubbleClosing(); 212 model_->OnBubbleClosing();
177 213
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 } 261 }
226 262
227 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) { 263 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) {
228 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id())); 264 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id()));
229 } 265 }
230 266
231 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) { 267 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) {
232 HandleLinkClicked(static_cast<LinkID>(source->id())); 268 HandleLinkClicked(static_cast<LinkID>(source->id()));
233 } 269 }
234 270
271 void TranslateBubbleView::OnMenuButtonClicked(views::MenuButton* source,
272 const gfx::Point& point,
273 const ui::Event* event) {
274 if (!denial_menu_runner_) {
275 denial_menu_model_.reset(new ui::SimpleMenuModel(this));
276 denial_menu_model_->AddItem(
277 DenialMenuItem::NEVER_TRANSLATE_LANGUAGE,
278 l10n_util::GetStringFUTF16(
279 IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG,
280 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex())));
281
282 denial_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
283
284 denial_menu_model_->AddItemWithStringId(
285 DenialMenuItem::NEVER_TRANSLATE_SITE,
286 IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE);
287
288 denial_menu_runner_.reset(
289 new views::MenuRunner(denial_menu_model_.get(), 0));
290 }
291 gfx::Rect screen_bounds = source->GetBoundsInScreen();
292 screen_bounds.Inset(source->GetInsets());
293 denial_menu_runner_->RunMenuAt(source->GetWidget(), source, screen_bounds,
294 views::MENU_ANCHOR_TOPRIGHT,
295 ui::MENU_SOURCE_MOUSE);
296 }
297
298 bool TranslateBubbleView::IsCommandIdChecked(int command_id) const {
299 return false;
300 }
301
302 bool TranslateBubbleView::IsCommandIdEnabled(int command_id) const {
303 return true;
304 }
305
306 bool TranslateBubbleView::GetAcceleratorForCommandId(
307 int command_id,
308 ui::Accelerator* accelerator) {
309 return false;
310 }
311
312 void TranslateBubbleView::ExecuteCommand(int command_id, int event_flags) {
313 model_->DeclineTranslation();
314 switch (command_id) {
315 case DenialMenuItem::NEVER_TRANSLATE_LANGUAGE:
316 model_->SetNeverTranslateLanguage(true);
317 ReportUiAction(translate::NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED);
318 break;
319 case DenialMenuItem::NEVER_TRANSLATE_SITE:
320 model_->SetNeverTranslateSite(true);
321 ReportUiAction(translate::NEVER_TRANSLATE_SITE_MENU_CLICKED);
322 break;
323 default:
324 NOTREACHED();
325 }
326 GetWidget()->Close();
327 }
328
329 void TranslateBubbleView::StyledLabelLinkClicked(views::StyledLabel* label,
330 const gfx::Range& range,
331 int event_flags) {
332 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
333 ReportUiAction(translate::ADVANCED_LINK_CLICKED);
334 }
335
235 void TranslateBubbleView::WebContentsDestroyed() { 336 void TranslateBubbleView::WebContentsDestroyed() {
236 GetWidget()->CloseNow(); 337 GetWidget()->CloseNow();
237 } 338 }
238 339
340 void TranslateBubbleView::OnWidgetClosing(views::Widget* widget) {
341 if (GetBubbleFrameView()->close_button_clicked()) {
342 model_->DeclineTranslation();
343 ReportUiAction(translate::CLOSE_BUTTON_CLICKED);
344 }
345 }
346
239 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const { 347 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const {
240 return model_->GetViewState(); 348 return model_->GetViewState();
241 } 349 }
242 350
243 TranslateBubbleView::TranslateBubbleView( 351 TranslateBubbleView::TranslateBubbleView(
244 views::View* anchor_view, 352 views::View* anchor_view,
245 std::unique_ptr<TranslateBubbleModel> model, 353 std::unique_ptr<TranslateBubbleModel> model,
246 translate::TranslateErrors::Type error_type, 354 translate::TranslateErrors::Type error_type,
247 content::WebContents* web_contents) 355 content::WebContents* web_contents)
248 : LocationBarBubbleDelegateView(anchor_view, web_contents), 356 : LocationBarBubbleDelegateView(anchor_view, web_contents),
249 WebContentsObserver(web_contents), 357 WebContentsObserver(web_contents),
250 before_translate_view_(NULL), 358 before_translate_view_(NULL),
251 translating_view_(NULL), 359 translating_view_(NULL),
252 after_translate_view_(NULL), 360 after_translate_view_(NULL),
253 error_view_(NULL), 361 error_view_(NULL),
254 advanced_view_(NULL), 362 advanced_view_(NULL),
255 denial_combobox_(NULL), 363 denial_combobox_(NULL),
256 source_language_combobox_(NULL), 364 source_language_combobox_(NULL),
257 target_language_combobox_(NULL), 365 target_language_combobox_(NULL),
258 always_translate_checkbox_(NULL), 366 always_translate_checkbox_(NULL),
259 advanced_cancel_button_(NULL), 367 advanced_cancel_button_(NULL),
260 advanced_done_button_(NULL), 368 advanced_done_button_(NULL),
369 denial_menu_button_(NULL),
261 model_(std::move(model)), 370 model_(std::move(model)),
262 error_type_(error_type), 371 error_type_(error_type),
263 is_in_incognito_window_( 372 is_in_incognito_window_(
264 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()) { 373 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()) {
265 translate_bubble_view_ = this; 374 translate_bubble_view_ = this;
266 } 375 }
267 376
268 views::View* TranslateBubbleView::GetCurrentView() const { 377 views::View* TranslateBubbleView::GetCurrentView() const {
269 switch (model_->GetViewState()) { 378 switch (model_->GetViewState()) {
270 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE: 379 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE:
271 return before_translate_view_; 380 return before_translate_view_;
272 case TranslateBubbleModel::VIEW_STATE_TRANSLATING: 381 case TranslateBubbleModel::VIEW_STATE_TRANSLATING:
273 return translating_view_; 382 return translating_view_;
274 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE: 383 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE:
275 return after_translate_view_; 384 return after_translate_view_;
276 case TranslateBubbleModel::VIEW_STATE_ERROR: 385 case TranslateBubbleModel::VIEW_STATE_ERROR:
277 return error_view_; 386 return error_view_;
278 case TranslateBubbleModel::VIEW_STATE_ADVANCED: 387 case TranslateBubbleModel::VIEW_STATE_ADVANCED:
279 return advanced_view_; 388 return advanced_view_;
280 } 389 }
281 NOTREACHED(); 390 NOTREACHED();
282 return NULL; 391 return NULL;
283 } 392 }
284 393
285 void TranslateBubbleView::HandleButtonPressed( 394 void TranslateBubbleView::HandleButtonPressed(
286 TranslateBubbleView::ButtonID sender_id) { 395 TranslateBubbleView::ButtonID sender_id) {
287 switch (sender_id) { 396 switch (sender_id) {
288 case BUTTON_ID_TRANSLATE: { 397 case BUTTON_ID_TRANSLATE: {
289 model_->Translate(); 398 model_->Translate();
399 ReportUiAction(translate::TRANSLATE_BUTTON_CLICKED);
290 break; 400 break;
291 } 401 }
292 case BUTTON_ID_DONE: { 402 case BUTTON_ID_DONE: {
293 if (always_translate_checkbox_) 403 if (always_translate_checkbox_)
294 model_->SetAlwaysTranslate(always_translate_checkbox_->checked()); 404 model_->SetAlwaysTranslate(always_translate_checkbox_->checked());
295 if (model_->IsPageTranslatedInCurrentLanguages()) { 405 if (model_->IsPageTranslatedInCurrentLanguages()) {
296 model_->GoBackFromAdvanced(); 406 model_->GoBackFromAdvanced();
297 UpdateChildVisibilities(); 407 UpdateChildVisibilities();
298 SizeToContents(); 408 SizeToContents();
299 } else { 409 } else {
300 model_->Translate(); 410 model_->Translate();
301 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING); 411 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING);
302 } 412 }
413 ReportUiAction(translate::DONE_BUTTON_CLICKED);
303 break; 414 break;
304 } 415 }
305 case BUTTON_ID_CANCEL: { 416 case BUTTON_ID_CANCEL: {
306 model_->GoBackFromAdvanced(); 417 model_->GoBackFromAdvanced();
307 UpdateChildVisibilities(); 418 UpdateChildVisibilities();
308 SizeToContents(); 419 SizeToContents();
420 ReportUiAction(translate::CANCEL_BUTTON_CLICKED);
309 break; 421 break;
310 } 422 }
311 case BUTTON_ID_TRY_AGAIN: { 423 case BUTTON_ID_TRY_AGAIN: {
312 model_->Translate(); 424 model_->Translate();
425 ReportUiAction(translate::TRY_AGAIN_BUTTON_CLICKED);
313 break; 426 break;
314 } 427 }
315 case BUTTON_ID_SHOW_ORIGINAL: { 428 case BUTTON_ID_SHOW_ORIGINAL: {
316 model_->RevertTranslation(); 429 model_->RevertTranslation();
317 GetWidget()->Close(); 430 GetWidget()->Close();
431 ReportUiAction(translate::SHOW_ORIGINAL_BUTTON_CLICKED);
318 break; 432 break;
319 } 433 }
320 case BUTTON_ID_ALWAYS_TRANSLATE: { 434 case BUTTON_ID_ALWAYS_TRANSLATE: {
321 // Do nothing. The state of the checkbox affects only when the 'Done' 435 // Do nothing. The state of the checkbox affects only when the 'Done'
322 // button is pressed. 436 // button is pressed.
437 ReportUiAction(always_translate_checkbox_->checked()
438 ? translate::ALWAYS_TRANSLATE_CHECKED
439 : translate::ALWAYS_TRANSLATE_UNCHECKED);
323 break; 440 break;
324 } 441 }
325 } 442 }
326 } 443 }
327 444
328 void TranslateBubbleView::HandleLinkClicked( 445 void TranslateBubbleView::HandleLinkClicked(
329 TranslateBubbleView::LinkID sender_id) { 446 TranslateBubbleView::LinkID sender_id) {
330 switch (sender_id) { 447 switch (sender_id) {
331 case LINK_ID_ADVANCED: { 448 case LINK_ID_ADVANCED: {
332 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED); 449 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
450 ReportUiAction(translate::ADVANCED_LINK_CLICKED);
333 break; 451 break;
334 } 452 }
335 case LINK_ID_LANGUAGE_SETTINGS: { 453 case LINK_ID_LANGUAGE_SETTINGS: {
336 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage); 454 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage);
337 web_contents()->OpenURL(content::OpenURLParams( 455 web_contents()->OpenURL(
338 url, 456 content::OpenURLParams(url, content::Referrer(), NEW_FOREGROUND_TAB,
339 content::Referrer(), 457 ui::PAGE_TRANSITION_LINK, false));
340 NEW_FOREGROUND_TAB, 458 ReportUiAction(translate::SETTINGS_LINK_CLICKED);
341 ui::PAGE_TRANSITION_LINK,
342 false));
343 break; 459 break;
344 } 460 }
345 } 461 }
346 } 462 }
347 463
348 void TranslateBubbleView::HandleComboboxPerformAction( 464 void TranslateBubbleView::HandleComboboxPerformAction(
349 TranslateBubbleView::ComboboxID sender_id) { 465 TranslateBubbleView::ComboboxID sender_id) {
350 switch (sender_id) { 466 switch (sender_id) {
351 case COMBOBOX_ID_DENIAL: { 467 case COMBOBOX_ID_DENIAL: {
352 model_->DeclineTranslation(); 468 model_->DeclineTranslation();
353 DenialComboboxIndex index = 469 DenialComboboxIndex index =
354 static_cast<DenialComboboxIndex>(denial_combobox_->selected_index()); 470 static_cast<DenialComboboxIndex>(denial_combobox_->selected_index());
355 switch (index) { 471 switch (index) {
356 case DenialComboboxIndex::DONT_TRANSLATE: 472 case DenialComboboxIndex::DONT_TRANSLATE:
473 ReportUiAction(translate::NOPE_MENU_CLICKED);
357 break; 474 break;
358 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE: 475 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE:
359 model_->SetNeverTranslateLanguage(true); 476 model_->SetNeverTranslateLanguage(true);
477 ReportUiAction(translate::NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED);
360 break; 478 break;
361 case DenialComboboxIndex::NEVER_TRANSLATE_SITE: 479 case DenialComboboxIndex::NEVER_TRANSLATE_SITE:
362 model_->SetNeverTranslateSite(true); 480 model_->SetNeverTranslateSite(true);
481 ReportUiAction(translate::NEVER_TRANSLATE_SITE_MENU_CLICKED);
363 break; 482 break;
364 default: 483 default:
365 NOTREACHED(); 484 NOTREACHED();
366 break; 485 break;
367 } 486 }
368 GetWidget()->Close(); 487 GetWidget()->Close();
369 break; 488 break;
370 } 489 }
371 case COMBOBOX_ID_SOURCE_LANGUAGE: { 490 case COMBOBOX_ID_SOURCE_LANGUAGE: {
372 if (model_->GetOriginalLanguageIndex() == 491 if (model_->GetOriginalLanguageIndex() ==
373 source_language_combobox_->selected_index()) { 492 source_language_combobox_->selected_index()) {
374 break; 493 break;
375 } 494 }
376 model_->UpdateOriginalLanguageIndex( 495 model_->UpdateOriginalLanguageIndex(
377 source_language_combobox_->selected_index()); 496 source_language_combobox_->selected_index());
378 UpdateAdvancedView(); 497 UpdateAdvancedView();
498 ReportUiAction(translate::SOURCE_LANGUAGE_MENU_CLICKED);
379 break; 499 break;
380 } 500 }
381 case COMBOBOX_ID_TARGET_LANGUAGE: { 501 case COMBOBOX_ID_TARGET_LANGUAGE: {
382 if (model_->GetTargetLanguageIndex() == 502 if (model_->GetTargetLanguageIndex() ==
383 target_language_combobox_->selected_index()) { 503 target_language_combobox_->selected_index()) {
384 break; 504 break;
385 } 505 }
386 model_->UpdateTargetLanguageIndex( 506 model_->UpdateTargetLanguageIndex(
387 target_language_combobox_->selected_index()); 507 target_language_combobox_->selected_index());
388 UpdateAdvancedView(); 508 UpdateAdvancedView();
509 ReportUiAction(translate::TARGET_LANGUAGE_MENU_CLICKED);
389 break; 510 break;
390 } 511 }
391 } 512 }
392 } 513 }
393 514
394 void TranslateBubbleView::UpdateChildVisibilities() { 515 void TranslateBubbleView::UpdateChildVisibilities() {
395 for (int i = 0; i < child_count(); i++) { 516 for (int i = 0; i < child_count(); i++) {
396 views::View* view = child_at(i); 517 views::View* view = child_at(i);
397 view->SetVisible(view == GetCurrentView()); 518 view->SetVisible(view == GetCurrentView());
398 } 519 }
399 } 520 }
400 521
401 views::View* TranslateBubbleView::CreateViewBeforeTranslate() { 522 views::View* TranslateBubbleView::CreateViewBeforeTranslate() {
402 views::Label* message_label = new views::Label( 523 const int kQuestionWidth = 200;
403 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE));
404
405 base::string16 original_language_name = 524 base::string16 original_language_name =
406 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); 525 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex());
407 526
408 std::vector<base::string16> items(
409 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE));
410 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] =
411 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY);
412 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] =
413 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG,
414 original_language_name);
415 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] =
416 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE);
417
418 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items));
419 denial_combobox_ = new views::Combobox(denial_combobox_model_.get());
420 denial_combobox_->set_id(COMBOBOX_ID_DENIAL);
421 denial_combobox_->set_listener(this);
422 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION);
423
424 views::View* view = new views::View(); 527 views::View* view = new views::View();
425 views::GridLayout* layout = new views::GridLayout(view); 528 views::GridLayout* layout = new views::GridLayout(view);
426 view->SetLayoutManager(layout); 529 view->SetLayoutManager(layout);
427 530
428 using views::GridLayout; 531 using views::GridLayout;
429 532
430 enum { 533 enum {
431 COLUMN_SET_ID_MESSAGE, 534 COLUMN_SET_ID_MESSAGE,
432 COLUMN_SET_ID_CONTENT, 535 COLUMN_SET_ID_CONTENT,
433 }; 536 };
434 537
435 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 538 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
436 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 539 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
437 0, GridLayout::USE_PREF, 0, 0); 540 GridLayout::USE_PREF, 0, 0);
438 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 541 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
439 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 542 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
440 0, GridLayout::USE_PREF, 0, 0); 543 GridLayout::USE_PREF, 0, 0);
441 cs->AddPaddingColumn(1, 0); 544 cs->AddPaddingColumn(1, 0);
442 545
443 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 546 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
444 cs->AddPaddingColumn(1, 0); 547 cs->AddPaddingColumn(1, 0);
445 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 548 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
446 0, GridLayout::USE_PREF, 0, 0); 549 GridLayout::USE_PREF, 0, 0);
447 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 550 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
448 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 551 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
449 0, GridLayout::USE_PREF, 0, 0); 552 GridLayout::USE_PREF, 0, 0);
450 553
451 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 554 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
452 layout->AddView(message_label); 555 if (Use2016Q2UI()) {
453 layout->AddView(CreateLink(this, 556 AddIconToLayout(layout);
454 IDS_TRANSLATE_BUBBLE_ADVANCED,
455 LINK_ID_ADVANCED));
456 557
558 base::string16 target_language_name =
559 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
560 std::vector<size_t> offsets;
561 auto styled_label = new views::StyledLabel(
562 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE_NEW,
563 original_language_name, target_language_name,
564 &offsets),
565 this);
566 auto style_info = views::StyledLabel::RangeStyleInfo::CreateForLink();
567 styled_label->AddStyleRange(
568 gfx::Range(static_cast<uint32_t>(offsets[0]),
569 static_cast<uint32_t>(offsets[0] +
570 original_language_name.length())),
571 style_info);
572 styled_label->AddStyleRange(
573 gfx::Range(
574 static_cast<uint32_t>(offsets[1]),
575 static_cast<uint32_t>(offsets[1] + target_language_name.length())),
576 style_info);
577 styled_label->SizeToFit(kQuestionWidth);
578 layout->AddView(styled_label);
579 } else {
580 layout->AddView(new views::Label(
581 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE)));
582 layout->AddView(
583 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED));
584 }
585
586 // In an incognito window, the "Always translate" checkbox shouldn't be shown.
587 if (Use2016Q2UI() && !is_in_incognito_window_) {
588 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
589 layout->SkipColumns(1);
590 always_translate_checkbox_ = new views::Checkbox(
591 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS));
592 always_translate_checkbox_->SetChecked(
593 model_->ShouldAlwaysTranslateBeCheckedByDefault());
594 always_translate_checkbox_->set_id(BUTTON_ID_ALWAYS_TRANSLATE);
595 always_translate_checkbox_->set_listener(this);
596 layout->AddView(always_translate_checkbox_);
597 }
457 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 598 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
458 599
459 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 600 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
460 views::LabelButton* accept_button = CreateLabelButton( 601 views::LabelButton* accept_button =
461 this, 602 Use2016Q2UI()
462 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT), 603 ? CreateBlueButton(
463 BUTTON_ID_TRANSLATE); 604 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT),
605 BUTTON_ID_TRANSLATE)
606 : CreateLabelButton(
607 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT),
608 BUTTON_ID_TRANSLATE);
464 layout->AddView(accept_button); 609 layout->AddView(accept_button);
465 accept_button->SetIsDefault(true); 610 accept_button->SetIsDefault(true);
466 layout->AddView(denial_combobox_); 611 if (Use2016Q2UI()) {
612 denial_menu_button_ = new views::MenuButton(
613 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_OPTIONS_MENU_BUTTON),
614 this, true);
615 denial_menu_button_->SetStyle(views::Button::STYLE_BUTTON);
616 layout->AddView(denial_menu_button_);
617 } else {
618 std::vector<base::string16> items(
619 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE));
620 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] =
621 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY);
622 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] =
623 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG,
624 original_language_name);
625 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] =
626 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE);
627 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items));
628 denial_combobox_ = new views::Combobox(denial_combobox_model_.get());
629 denial_combobox_->set_id(COMBOBOX_ID_DENIAL);
630 denial_combobox_->set_listener(this);
631 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION);
632 layout->AddView(denial_combobox_);
633 }
467 634
468 return view; 635 return view;
469 } 636 }
470 637
471 views::View* TranslateBubbleView::CreateViewTranslating() { 638 views::View* TranslateBubbleView::CreateViewTranslating() {
472 base::string16 target_language_name = 639 base::string16 target_language_name =
473 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); 640 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
474 views::Label* label = new views::Label( 641 views::Label* label = new views::Label(
475 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING)); 642 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING));
476 643
477 views::View* view = new views::View(); 644 views::View* view = new views::View();
478 views::GridLayout* layout = new views::GridLayout(view); 645 views::GridLayout* layout = new views::GridLayout(view);
479 view->SetLayoutManager(layout); 646 view->SetLayoutManager(layout);
480 647
481 using views::GridLayout; 648 using views::GridLayout;
482 649
483 enum { 650 enum {
484 COLUMN_SET_ID_MESSAGE, 651 COLUMN_SET_ID_MESSAGE,
485 COLUMN_SET_ID_CONTENT, 652 COLUMN_SET_ID_CONTENT,
486 }; 653 };
487 654
488 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 655 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
489 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 656 if (Use2016Q2UI()) {
490 0, views::GridLayout::USE_PREF, 0, 0); 657 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
658 views::GridLayout::USE_PREF, 0, 0);
659 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
660 }
661 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
662 GridLayout::USE_PREF, 0, 0);
491 cs->AddPaddingColumn(1, 0); 663 cs->AddPaddingColumn(1, 0);
492 664
493 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 665 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
494 cs->AddPaddingColumn(1, 0); 666 cs->AddPaddingColumn(1, 0);
495 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 667 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
496 0, GridLayout::USE_PREF, 0, 0); 668 GridLayout::USE_PREF, 0, 0);
497 669
498 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 670 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
671 if (Use2016Q2UI())
672 AddIconToLayout(layout);
499 layout->AddView(label); 673 layout->AddView(label);
500 674
501 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 675 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
502 676
503 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 677 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
504 views::LabelButton* revert_button = CreateLabelButton( 678 views::LabelButton* revert_button = CreateLabelButton(
505 this, 679 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
506 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
507 BUTTON_ID_SHOW_ORIGINAL); 680 BUTTON_ID_SHOW_ORIGINAL);
508 revert_button->SetEnabled(false); 681 revert_button->SetEnabled(false);
509 layout->AddView(revert_button); 682 layout->AddView(revert_button);
510 683
511 return view; 684 return view;
512 } 685 }
513 686
514 views::View* TranslateBubbleView::CreateViewAfterTranslate() { 687 views::View* TranslateBubbleView::CreateViewAfterTranslate() {
515 views::Label* label = new views::Label( 688 views::Label* label = new views::Label(
516 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATED)); 689 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATED));
517 690
518 views::View* view = new views::View(); 691 views::View* view = new views::View();
519 views::GridLayout* layout = new views::GridLayout(view); 692 views::GridLayout* layout = new views::GridLayout(view);
520 view->SetLayoutManager(layout); 693 view->SetLayoutManager(layout);
521 694
522 using views::GridLayout; 695 using views::GridLayout;
523 696
524 enum { 697 enum {
525 COLUMN_SET_ID_MESSAGE, 698 COLUMN_SET_ID_MESSAGE,
526 COLUMN_SET_ID_CONTENT, 699 COLUMN_SET_ID_CONTENT,
527 }; 700 };
528 701
529 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 702 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
530 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 703 if (Use2016Q2UI()) {
531 0, views::GridLayout::USE_PREF, 0, 0); 704 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
705 GridLayout::USE_PREF, 0, 0);
706 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
707 }
708 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
709 GridLayout::USE_PREF, 0, 0);
532 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 710 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
533 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 711 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
534 0, views::GridLayout::USE_PREF, 0, 0); 712 GridLayout::USE_PREF, 0, 0);
535 cs->AddPaddingColumn(1, 0); 713 cs->AddPaddingColumn(1, 0);
536 714
537 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 715 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
538 cs->AddPaddingColumn(1, 0); 716 cs->AddPaddingColumn(1, 0);
539 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 717 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
540 0, GridLayout::USE_PREF, 0, 0); 718 GridLayout::USE_PREF, 0, 0);
541 719
542 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 720 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
721 if (Use2016Q2UI())
722 AddIconToLayout(layout);
543 layout->AddView(label); 723 layout->AddView(label);
544 layout->AddView(CreateLink(this, 724 layout->AddView(
545 IDS_TRANSLATE_BUBBLE_ADVANCED, 725 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED));
546 LINK_ID_ADVANCED));
547 726
548 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 727 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
549 728
550 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 729 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
551 layout->AddView(CreateLabelButton( 730 layout->AddView(CreateLabelButton(
552 this, 731 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
553 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
554 BUTTON_ID_SHOW_ORIGINAL)); 732 BUTTON_ID_SHOW_ORIGINAL));
555 733
556 return view; 734 return view;
557 } 735 }
558 736
559 views::View* TranslateBubbleView::CreateViewError() { 737 views::View* TranslateBubbleView::CreateViewError() {
560 views::Label* label = new views::Label( 738 views::Label* label = new views::Label(
561 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE)); 739 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE));
562 740
563 views::View* view = new views::View(); 741 views::View* view = new views::View();
564 views::GridLayout* layout = new views::GridLayout(view); 742 views::GridLayout* layout = new views::GridLayout(view);
565 view->SetLayoutManager(layout); 743 view->SetLayoutManager(layout);
566 744
567 using views::GridLayout; 745 using views::GridLayout;
568 746
569 enum { 747 enum {
570 COLUMN_SET_ID_MESSAGE, 748 COLUMN_SET_ID_MESSAGE,
571 COLUMN_SET_ID_CONTENT, 749 COLUMN_SET_ID_CONTENT,
572 }; 750 };
573 751
574 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 752 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
575 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 753 if (Use2016Q2UI()) {
576 0, GridLayout::USE_PREF, 0, 0); 754 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
755 GridLayout::USE_PREF, 0, 0);
756 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
757 }
758 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
759 GridLayout::USE_PREF, 0, 0);
577 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 760 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
578 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 761 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
579 0, GridLayout::USE_PREF, 0, 0); 762 GridLayout::USE_PREF, 0, 0);
580 cs->AddPaddingColumn(1, 0); 763 cs->AddPaddingColumn(1, 0);
581 764
582 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 765 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
583 cs->AddPaddingColumn(1, 0); 766 cs->AddPaddingColumn(1, 0);
584 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 767 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
585 0, GridLayout::USE_PREF, 0, 0); 768 GridLayout::USE_PREF, 0, 0);
586 769
587 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 770 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
771 if (Use2016Q2UI())
772 AddIconToLayout(layout);
588 layout->AddView(label); 773 layout->AddView(label);
589 layout->AddView(CreateLink(this, 774 layout->AddView(
590 IDS_TRANSLATE_BUBBLE_ADVANCED, 775 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED));
591 LINK_ID_ADVANCED));
592 776
593 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 777 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
594 778
595 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 779 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
596 layout->AddView(CreateLabelButton( 780 layout->AddView(CreateLabelButton(
597 this, 781 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRY_AGAIN),
598 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRY_AGAIN),
599 BUTTON_ID_TRY_AGAIN)); 782 BUTTON_ID_TRY_AGAIN));
600 783
601 return view; 784 return view;
602 } 785 }
603 786
604 // TODO(hajimehoshi): Revice this later to show a specific message for each 787 // TODO(hajimehoshi): Revice this later to show a specific message for each
605 // error. (crbug/307350) 788 // error. (crbug/307350)
606 views::View* TranslateBubbleView::CreateViewAdvanced() { 789 views::View* TranslateBubbleView::CreateViewAdvanced() {
607 views::Label* source_language_label = new views::Label( 790 views::Label* source_language_label = new views::Label(
608 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_PAGE_LANGUAGE)); 791 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_PAGE_LANGUAGE));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 view->SetLayoutManager(layout); 823 view->SetLayoutManager(layout);
641 824
642 using views::GridLayout; 825 using views::GridLayout;
643 826
644 enum { 827 enum {
645 COLUMN_SET_ID_LANGUAGES, 828 COLUMN_SET_ID_LANGUAGES,
646 COLUMN_SET_ID_BUTTONS, 829 COLUMN_SET_ID_BUTTONS,
647 }; 830 };
648 831
649 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_LANGUAGES); 832 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_LANGUAGES);
650 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 833 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
651 0, GridLayout::USE_PREF, 0, 0); 834 GridLayout::USE_PREF, 0, 0);
652 cs->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); 835 cs->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
653 cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 836 cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, GridLayout::USE_PREF,
654 0, GridLayout::USE_PREF, 0, 0); 837 0, 0);
655 cs->AddPaddingColumn(1, 0); 838 cs->AddPaddingColumn(1, 0);
656 839
657 cs = layout->AddColumnSet(COLUMN_SET_ID_BUTTONS); 840 cs = layout->AddColumnSet(COLUMN_SET_ID_BUTTONS);
658 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 841 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
659 0, GridLayout::USE_PREF, 0, 0); 842 GridLayout::USE_PREF, 0, 0);
660 cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); 843 cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing);
661 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 844 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
662 0, GridLayout::USE_PREF, 0, 0); 845 GridLayout::USE_PREF, 0, 0);
663 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 846 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
664 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 847 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
665 0, GridLayout::USE_PREF, 0, 0); 848 GridLayout::USE_PREF, 0, 0);
666 849
667 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); 850 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES);
668 layout->AddView(source_language_label); 851 layout->AddView(source_language_label);
669 layout->AddView(source_language_combobox_); 852 layout->AddView(source_language_combobox_);
670 853
671 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 854 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
672 855
673 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); 856 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES);
674 layout->AddView(target_language_label); 857 layout->AddView(target_language_label);
675 layout->AddView(target_language_combobox_); 858 layout->AddView(target_language_combobox_);
676 859
677 if (!is_in_incognito_window_) { 860 if (!is_in_incognito_window_) {
678 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 861 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
679 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); 862 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES);
680 layout->SkipColumns(1); 863 layout->SkipColumns(1);
681 layout->AddView(always_translate_checkbox_); 864 layout->AddView(always_translate_checkbox_);
682 } 865 }
683 866
684 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 867 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
685 868
686 layout->StartRow(0, COLUMN_SET_ID_BUTTONS); 869 layout->StartRow(0, COLUMN_SET_ID_BUTTONS);
687 layout->AddView(CreateLink(this, 870 layout->AddView(CreateLink(this, IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS,
688 IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS,
689 LINK_ID_LANGUAGE_SETTINGS)); 871 LINK_ID_LANGUAGE_SETTINGS));
690 advanced_done_button_ = CreateLabelButton( 872 advanced_done_button_ =
691 this, l10n_util::GetStringUTF16(IDS_DONE), BUTTON_ID_DONE); 873 Use2016Q2UI()
874 ? CreateBlueButton(this, l10n_util::GetStringUTF16(IDS_DONE),
875 BUTTON_ID_DONE)
876 : CreateLabelButton(this, l10n_util::GetStringUTF16(IDS_DONE),
877 BUTTON_ID_DONE);
692 advanced_done_button_->SetIsDefault(true); 878 advanced_done_button_->SetIsDefault(true);
693 advanced_cancel_button_ = CreateLabelButton( 879 advanced_cancel_button_ = CreateLabelButton(
694 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL); 880 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL);
695 layout->AddView(advanced_done_button_); 881 layout->AddView(advanced_done_button_);
696 layout->AddView(advanced_cancel_button_); 882 layout->AddView(advanced_cancel_button_);
697 883
698 UpdateAdvancedView(); 884 UpdateAdvancedView();
699 885
700 return view; 886 return view;
701 } 887 }
(...skipping 25 matching lines...) Expand all
727 base::string16 source_language_name = 913 base::string16 source_language_name =
728 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); 914 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex());
729 base::string16 target_language_name = 915 base::string16 target_language_name =
730 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); 916 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
731 917
732 // "Always translate" checkbox doesn't exist in an incognito window. 918 // "Always translate" checkbox doesn't exist in an incognito window.
733 if (always_translate_checkbox_) { 919 if (always_translate_checkbox_) {
734 always_translate_checkbox_->SetText( 920 always_translate_checkbox_->SetText(
735 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS)); 921 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS));
736 always_translate_checkbox_->SetChecked( 922 always_translate_checkbox_->SetChecked(
737 model_->ShouldAlwaysTranslate()); 923 Use2016Q2UI() ? model_->ShouldAlwaysTranslateBeCheckedByDefault()
924 : model_->ShouldAlwaysTranslate());
738 } 925 }
739 926
740 base::string16 label; 927 base::string16 label;
741 if (model_->IsPageTranslatedInCurrentLanguages()) 928 if (model_->IsPageTranslatedInCurrentLanguages())
742 label = l10n_util::GetStringUTF16(IDS_DONE); 929 label = l10n_util::GetStringUTF16(IDS_DONE);
743 else 930 else
744 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT); 931 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT);
745 advanced_done_button_->SetText(label); 932 advanced_done_button_->SetText(label);
746 advanced_done_button_->SizeToPreferredSize(); 933 advanced_done_button_->SizeToPreferredSize();
747 if (advanced_view_) 934 if (advanced_view_)
748 advanced_view_->Layout(); 935 advanced_view_->Layout();
749 } 936 }
937
938 void TranslateBubbleView::ReportUiAction(
939 translate::TranslateBubbleUiEvent action) {
940 UMA_HISTOGRAM_ENUMERATION(kTranslateBubbleUIEvent, action,
941 translate::TRANSLATE_BUBBLE_UI_EVENT_MAX);
942 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698