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

Side by Side Diff: chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc

Issue 1005603003: [views] Add checkmark throbber to card unmasking prompt (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/autofill/card_unmask_prompt_views.h" 5 #include "chrome/browser/ui/views/autofill/card_unmask_prompt_views.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/ui/autofill/autofill_dialog_types.h" 9 #include "chrome/browser/ui/autofill/autofill_dialog_types.h"
10 #include "chrome/browser/ui/autofill/card_unmask_prompt_controller.h" 10 #include "chrome/browser/ui/autofill/card_unmask_prompt_controller.h"
11 #include "chrome/browser/ui/views/autofill/decorated_textfield.h" 11 #include "chrome/browser/ui/views/autofill/decorated_textfield.h"
12 #include "chrome/browser/ui/views/autofill/tooltip_icon.h" 12 #include "chrome/browser/ui/views/autofill/tooltip_icon.h"
13 #include "chrome/grit/generated_resources.h" 13 #include "chrome/grit/generated_resources.h"
14 #include "components/constrained_window/constrained_window_views.h" 14 #include "components/constrained_window/constrained_window_views.h"
15 #include "components/web_modal/web_contents_modal_dialog_host.h" 15 #include "components/web_modal/web_contents_modal_dialog_host.h"
16 #include "components/web_modal/web_contents_modal_dialog_manager.h" 16 #include "components/web_modal/web_contents_modal_dialog_manager.h"
17 #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" 17 #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h"
18 #include "grit/theme_resources.h" 18 #include "grit/theme_resources.h"
19 #include "third_party/skia/include/core/SkColor.h" 19 #include "third_party/skia/include/core/SkColor.h"
20 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
21 #include "ui/base/resource/resource_bundle.h" 21 #include "ui/base/resource/resource_bundle.h"
22 #include "ui/gfx/canvas.h" 22 #include "ui/gfx/canvas.h"
23 #include "ui/views/background.h" 23 #include "ui/views/background.h"
24 #include "ui/views/controls/button/checkbox.h" 24 #include "ui/views/controls/button/checkbox.h"
25 #include "ui/views/controls/combobox/combobox.h" 25 #include "ui/views/controls/combobox/combobox.h"
26 #include "ui/views/controls/image_view.h" 26 #include "ui/views/controls/image_view.h"
27 #include "ui/views/controls/label.h" 27 #include "ui/views/controls/label.h"
28 #include "ui/views/controls/throbber.h"
28 #include "ui/views/layout/box_layout.h" 29 #include "ui/views/layout/box_layout.h"
29 #include "ui/views/widget/widget.h" 30 #include "ui/views/widget/widget.h"
30 #include "ui/views/window/dialog_client_view.h" 31 #include "ui/views/window/dialog_client_view.h"
31 32
32 namespace autofill { 33 namespace autofill {
33 34
34 // The number of pixels of blank space on the outer horizontal edges of the 35 // The number of pixels of blank space on the outer horizontal edges of the
35 // dialog. 36 // dialog.
36 const int kEdgePadding = 19; 37 const int kEdgePadding = 19;
37 38
(...skipping 15 matching lines...) Expand all
53 main_contents_(nullptr), 54 main_contents_(nullptr),
54 permanent_error_label_(nullptr), 55 permanent_error_label_(nullptr),
55 input_row_(nullptr), 56 input_row_(nullptr),
56 cvc_input_(nullptr), 57 cvc_input_(nullptr),
57 month_input_(nullptr), 58 month_input_(nullptr),
58 year_input_(nullptr), 59 year_input_(nullptr),
59 error_label_(nullptr), 60 error_label_(nullptr),
60 storage_row_(nullptr), 61 storage_row_(nullptr),
61 storage_checkbox_(nullptr), 62 storage_checkbox_(nullptr),
62 progress_overlay_(nullptr), 63 progress_overlay_(nullptr),
64 progress_throbber_(nullptr),
63 progress_label_(nullptr), 65 progress_label_(nullptr),
64 overlay_animation_(this), 66 overlay_animation_(this),
65 weak_ptr_factory_(this) { 67 weak_ptr_factory_(this) {
66 } 68 }
67 69
68 CardUnmaskPromptViews::~CardUnmaskPromptViews() { 70 CardUnmaskPromptViews::~CardUnmaskPromptViews() {
69 if (controller_) 71 if (controller_)
70 controller_->OnUnmaskDialogClosed(); 72 controller_->OnUnmaskDialogClosed();
71 } 73 }
72 74
73 void CardUnmaskPromptViews::Show() { 75 void CardUnmaskPromptViews::Show() {
74 constrained_window::ShowWebModalDialogViews(this, 76 constrained_window::ShowWebModalDialogViews(this,
75 controller_->GetWebContents()); 77 controller_->GetWebContents());
76 } 78 }
77 79
78 void CardUnmaskPromptViews::ControllerGone() { 80 void CardUnmaskPromptViews::ControllerGone() {
79 controller_ = nullptr; 81 controller_ = nullptr;
80 ClosePrompt(); 82 ClosePrompt();
81 } 83 }
82 84
83 void CardUnmaskPromptViews::DisableAndWaitForVerification() { 85 void CardUnmaskPromptViews::DisableAndWaitForVerification() {
84 SetInputsEnabled(false); 86 SetInputsEnabled(false);
85 progress_overlay_->SetOpacity(0.0); 87 progress_overlay_->SetOpacity(0.0);
86 progress_overlay_->SetVisible(true); 88 progress_overlay_->SetVisible(true);
89 progress_throbber_->Start();
87 overlay_animation_.Show(); 90 overlay_animation_.Show();
88 GetDialogClientView()->UpdateDialogButtons(); 91 GetDialogClientView()->UpdateDialogButtons();
89 Layout(); 92 Layout();
90 } 93 }
91 94
92 void CardUnmaskPromptViews::GotVerificationResult( 95 void CardUnmaskPromptViews::GotVerificationResult(
93 const base::string16& error_message, 96 const base::string16& error_message,
94 bool allow_retry) { 97 bool allow_retry) {
98 progress_throbber_->Stop();
95 if (error_message.empty()) { 99 if (error_message.empty()) {
96 progress_label_->SetText(l10n_util::GetStringUTF16( 100 progress_label_->SetText(l10n_util::GetStringUTF16(
97 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_SUCCESS)); 101 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_SUCCESS));
102 progress_throbber_->SetChecked(true);
98 base::MessageLoop::current()->PostDelayedTask( 103 base::MessageLoop::current()->PostDelayedTask(
99 FROM_HERE, base::Bind(&CardUnmaskPromptViews::ClosePrompt, 104 FROM_HERE, base::Bind(&CardUnmaskPromptViews::ClosePrompt,
100 weak_ptr_factory_.GetWeakPtr()), 105 weak_ptr_factory_.GetWeakPtr()),
101 controller_->GetSuccessMessageDuration()); 106 controller_->GetSuccessMessageDuration());
102 } else { 107 } else {
103 // TODO(estade): it's somewhat jarring when the error comes back too 108 // TODO(estade): it's somewhat jarring when the error comes back too
104 // quickly. 109 // quickly.
105 overlay_animation_.Reset(); 110 overlay_animation_.Reset();
106 storage_row_->SetOpacity(1.0); 111 storage_row_->SetOpacity(1.0);
107 progress_overlay_->SetVisible(false); 112 progress_overlay_->SetVisible(false);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 const gfx::Insets insets = GetInsets(); 220 const gfx::Insets insets = GetInsets();
216 return main_contents_->GetHeightForWidth(width - insets.width()) + 221 return main_contents_->GetHeightForWidth(width - insets.width()) +
217 insets.height(); 222 insets.height();
218 } 223 }
219 224
220 void CardUnmaskPromptViews::OnNativeThemeChanged(const ui::NativeTheme* theme) { 225 void CardUnmaskPromptViews::OnNativeThemeChanged(const ui::NativeTheme* theme) {
221 SkColor bg_color = 226 SkColor bg_color =
222 theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); 227 theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground);
223 progress_overlay_->set_background( 228 progress_overlay_->set_background(
224 views::Background::CreateSolidBackground(bg_color)); 229 views::Background::CreateSolidBackground(bg_color));
230 progress_label_->SetBackgroundColor(bg_color);
225 } 231 }
226 232
227 ui::ModalType CardUnmaskPromptViews::GetModalType() const { 233 ui::ModalType CardUnmaskPromptViews::GetModalType() const {
228 return ui::MODAL_TYPE_CHILD; 234 return ui::MODAL_TYPE_CHILD;
229 } 235 }
230 236
231 base::string16 CardUnmaskPromptViews::GetWindowTitle() const { 237 base::string16 CardUnmaskPromptViews::GetWindowTitle() const {
232 return controller_->GetWindowTitle(); 238 return controller_->GetWindowTitle();
233 } 239 }
234 240
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 // Reserve vertical space for the error label, assuming it's one line. 395 // Reserve vertical space for the error label, assuming it's one line.
390 error_label_ = new views::Label(base::ASCIIToUTF16(" ")); 396 error_label_ = new views::Label(base::ASCIIToUTF16(" "));
391 error_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 397 error_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
392 error_label_->SetEnabledColor(kWarningColor); 398 error_label_->SetEnabledColor(kWarningColor);
393 error_label_->SetBorder(views::Border::CreateEmptyBorder(3, 0, 5, 0)); 399 error_label_->SetBorder(views::Border::CreateEmptyBorder(3, 0, 5, 0));
394 controls_container->AddChildView(error_label_); 400 controls_container->AddChildView(error_label_);
395 401
396 progress_overlay_ = new FadeOutView(); 402 progress_overlay_ = new FadeOutView();
397 progress_overlay_->set_fade_everything(true); 403 progress_overlay_->set_fade_everything(true);
398 views::BoxLayout* progress_layout = 404 views::BoxLayout* progress_layout =
399 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0); 405 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 5);
406 progress_layout->set_cross_axis_alignment(
407 views::BoxLayout::CROSS_AXIS_ALIGNMENT_CENTER);
400 progress_layout->set_main_axis_alignment( 408 progress_layout->set_main_axis_alignment(
401 views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); 409 views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
402 progress_layout->set_cross_axis_alignment(
403 views::BoxLayout::CROSS_AXIS_ALIGNMENT_CENTER);
404 progress_overlay_->SetLayoutManager(progress_layout); 410 progress_overlay_->SetLayoutManager(progress_layout);
405 411
406 progress_overlay_->SetVisible(false); 412 progress_overlay_->SetVisible(false);
407 AddChildView(progress_overlay_); 413 AddChildView(progress_overlay_);
408 414
415 progress_throbber_ = new views::CheckmarkThrobber();
416 progress_overlay_->AddChildView(progress_throbber_);
417
409 progress_label_ = new views::Label(l10n_util::GetStringUTF16( 418 progress_label_ = new views::Label(l10n_util::GetStringUTF16(
410 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_IN_PROGRESS)); 419 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_IN_PROGRESS));
420 // Material blue. TODO(estade): find an appropriate place for this color.
421 progress_label_->SetEnabledColor(SkColorSetRGB(0x42, 0x85, 0xF4));
411 progress_overlay_->AddChildView(progress_label_); 422 progress_overlay_->AddChildView(progress_label_);
412 } 423 }
413 424
414 bool CardUnmaskPromptViews::ExpirationDateIsValid() const { 425 bool CardUnmaskPromptViews::ExpirationDateIsValid() const {
415 if (!controller_->ShouldRequestExpirationDate()) 426 if (!controller_->ShouldRequestExpirationDate())
416 return true; 427 return true;
417 428
418 return controller_->InputExpirationIsValid( 429 return controller_->InputExpirationIsValid(
419 month_input_->GetTextForRow(month_input_->selected_index()), 430 month_input_->GetTextForRow(month_input_->selected_index()),
420 year_input_->GetTextForRow(year_input_->selected_index())); 431 year_input_->GetTextForRow(year_input_->selected_index()));
(...skipping 28 matching lines...) Expand all
449 views::View::OnPaint(canvas); 460 views::View::OnPaint(canvas);
450 canvas->Restore(); 461 canvas->Restore();
451 } 462 }
452 463
453 void CardUnmaskPromptViews::FadeOutView::SetOpacity(double opacity) { 464 void CardUnmaskPromptViews::FadeOutView::SetOpacity(double opacity) {
454 opacity_ = opacity; 465 opacity_ = opacity;
455 SchedulePaint(); 466 SchedulePaint();
456 } 467 }
457 468
458 } // namespace autofill 469 } // namespace autofill
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/autofill/card_unmask_prompt_views.h ('k') | ui/resources/default_100_percent/common/checkmark.png » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698