| OLD | NEW |
| 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/views/background.h" | 23 #include "ui/views/background.h" |
| 23 #include "ui/views/controls/button/checkbox.h" | 24 #include "ui/views/controls/button/checkbox.h" |
| 24 #include "ui/views/controls/combobox/combobox.h" | 25 #include "ui/views/controls/combobox/combobox.h" |
| 25 #include "ui/views/controls/image_view.h" | 26 #include "ui/views/controls/image_view.h" |
| 26 #include "ui/views/controls/label.h" | 27 #include "ui/views/controls/label.h" |
| 27 #include "ui/views/layout/box_layout.h" | 28 #include "ui/views/layout/box_layout.h" |
| 28 #include "ui/views/widget/widget.h" | 29 #include "ui/views/widget/widget.h" |
| 29 #include "ui/views/window/dialog_client_view.h" | 30 #include "ui/views/window/dialog_client_view.h" |
| 30 | 31 |
| 31 namespace autofill { | 32 namespace autofill { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 44 CardUnmaskPromptViews* view = new CardUnmaskPromptViews(controller); | 45 CardUnmaskPromptViews* view = new CardUnmaskPromptViews(controller); |
| 45 view->Show(); | 46 view->Show(); |
| 46 return view; | 47 return view; |
| 47 } | 48 } |
| 48 | 49 |
| 49 CardUnmaskPromptViews::CardUnmaskPromptViews( | 50 CardUnmaskPromptViews::CardUnmaskPromptViews( |
| 50 CardUnmaskPromptController* controller) | 51 CardUnmaskPromptController* controller) |
| 51 : controller_(controller), | 52 : controller_(controller), |
| 52 main_contents_(nullptr), | 53 main_contents_(nullptr), |
| 53 permanent_error_label_(nullptr), | 54 permanent_error_label_(nullptr), |
| 55 input_row_(nullptr), |
| 54 cvc_input_(nullptr), | 56 cvc_input_(nullptr), |
| 55 month_input_(nullptr), | 57 month_input_(nullptr), |
| 56 year_input_(nullptr), | 58 year_input_(nullptr), |
| 57 error_label_(nullptr), | 59 error_label_(nullptr), |
| 60 storage_row_(nullptr), |
| 58 storage_checkbox_(nullptr), | 61 storage_checkbox_(nullptr), |
| 59 progress_overlay_(nullptr), | 62 progress_overlay_(nullptr), |
| 60 progress_label_(nullptr), | 63 progress_label_(nullptr), |
| 64 overlay_animation_(this), |
| 61 weak_ptr_factory_(this) { | 65 weak_ptr_factory_(this) { |
| 62 } | 66 } |
| 63 | 67 |
| 64 CardUnmaskPromptViews::~CardUnmaskPromptViews() { | 68 CardUnmaskPromptViews::~CardUnmaskPromptViews() { |
| 65 if (controller_) | 69 if (controller_) |
| 66 controller_->OnUnmaskDialogClosed(); | 70 controller_->OnUnmaskDialogClosed(); |
| 67 } | 71 } |
| 68 | 72 |
| 69 void CardUnmaskPromptViews::Show() { | 73 void CardUnmaskPromptViews::Show() { |
| 70 constrained_window::ShowWebModalDialogViews(this, | 74 constrained_window::ShowWebModalDialogViews(this, |
| 71 controller_->GetWebContents()); | 75 controller_->GetWebContents()); |
| 72 } | 76 } |
| 73 | 77 |
| 74 void CardUnmaskPromptViews::ControllerGone() { | 78 void CardUnmaskPromptViews::ControllerGone() { |
| 75 controller_ = nullptr; | 79 controller_ = nullptr; |
| 76 ClosePrompt(); | 80 ClosePrompt(); |
| 77 } | 81 } |
| 78 | 82 |
| 79 void CardUnmaskPromptViews::DisableAndWaitForVerification() { | 83 void CardUnmaskPromptViews::DisableAndWaitForVerification() { |
| 80 SetInputsEnabled(false); | 84 SetInputsEnabled(false); |
| 85 progress_overlay_->SetOpacity(0.0); |
| 81 progress_overlay_->SetVisible(true); | 86 progress_overlay_->SetVisible(true); |
| 87 overlay_animation_.Show(); |
| 82 GetDialogClientView()->UpdateDialogButtons(); | 88 GetDialogClientView()->UpdateDialogButtons(); |
| 83 Layout(); | 89 Layout(); |
| 84 } | 90 } |
| 85 | 91 |
| 86 void CardUnmaskPromptViews::GotVerificationResult( | 92 void CardUnmaskPromptViews::GotVerificationResult( |
| 87 const base::string16& error_message, | 93 const base::string16& error_message, |
| 88 bool allow_retry) { | 94 bool allow_retry) { |
| 89 if (error_message.empty()) { | 95 if (error_message.empty()) { |
| 90 progress_label_->SetText(l10n_util::GetStringUTF16( | 96 progress_label_->SetText(l10n_util::GetStringUTF16( |
| 91 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_SUCCESS)); | 97 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_SUCCESS)); |
| 92 base::MessageLoop::current()->PostDelayedTask( | 98 base::MessageLoop::current()->PostDelayedTask( |
| 93 FROM_HERE, base::Bind(&CardUnmaskPromptViews::ClosePrompt, | 99 FROM_HERE, base::Bind(&CardUnmaskPromptViews::ClosePrompt, |
| 94 weak_ptr_factory_.GetWeakPtr()), | 100 weak_ptr_factory_.GetWeakPtr()), |
| 95 controller_->GetSuccessMessageDuration()); | 101 controller_->GetSuccessMessageDuration()); |
| 96 } else { | 102 } else { |
| 97 // TODO(estade): it's somewhat jarring when the error comes back too | 103 // TODO(estade): it's somewhat jarring when the error comes back too |
| 98 // quickly. | 104 // quickly. |
| 105 overlay_animation_.Reset(); |
| 106 storage_row_->SetOpacity(1.0); |
| 99 progress_overlay_->SetVisible(false); | 107 progress_overlay_->SetVisible(false); |
| 100 | 108 |
| 101 if (allow_retry) { | 109 if (allow_retry) { |
| 102 SetInputsEnabled(true); | 110 SetInputsEnabled(true); |
| 103 | 111 |
| 104 // If there is more than one input showing, don't mark anything as | 112 // If there is more than one input showing, don't mark anything as |
| 105 // invalid since we don't know the location of the problem. | 113 // invalid since we don't know the location of the problem. |
| 106 if (!controller_->ShouldRequestExpirationDate()) | 114 if (!controller_->ShouldRequestExpirationDate()) |
| 107 cvc_input_->SetInvalid(true); | 115 cvc_input_->SetInvalid(true); |
| 108 | 116 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 year_input_->SetEnabled(enabled); | 157 year_input_->SetEnabled(enabled); |
| 150 } | 158 } |
| 151 | 159 |
| 152 views::View* CardUnmaskPromptViews::GetContentsView() { | 160 views::View* CardUnmaskPromptViews::GetContentsView() { |
| 153 InitIfNecessary(); | 161 InitIfNecessary(); |
| 154 return this; | 162 return this; |
| 155 } | 163 } |
| 156 | 164 |
| 157 views::View* CardUnmaskPromptViews::CreateFootnoteView() { | 165 views::View* CardUnmaskPromptViews::CreateFootnoteView() { |
| 158 // Local storage checkbox and (?) tooltip. | 166 // Local storage checkbox and (?) tooltip. |
| 159 views::View* storage_row = new views::View(); | 167 storage_row_ = new FadeOutView(); |
| 160 views::BoxLayout* storage_row_layout = new views::BoxLayout( | 168 views::BoxLayout* storage_row_layout = new views::BoxLayout( |
| 161 views::BoxLayout::kHorizontal, kEdgePadding, kEdgePadding, 0); | 169 views::BoxLayout::kHorizontal, kEdgePadding, kEdgePadding, 0); |
| 162 storage_row->SetLayoutManager(storage_row_layout); | 170 storage_row_->SetLayoutManager(storage_row_layout); |
| 163 storage_row->SetBorder( | 171 storage_row_->SetBorder( |
| 164 views::Border::CreateSolidSidedBorder(1, 0, 0, 0, kSubtleBorderColor)); | 172 views::Border::CreateSolidSidedBorder(1, 0, 0, 0, kSubtleBorderColor)); |
| 165 storage_row->set_background( | 173 storage_row_->set_background( |
| 166 views::Background::CreateSolidBackground(kShadingColor)); | 174 views::Background::CreateSolidBackground(kShadingColor)); |
| 167 | 175 |
| 168 storage_checkbox_ = new views::Checkbox(l10n_util::GetStringUTF16( | 176 storage_checkbox_ = new views::Checkbox(l10n_util::GetStringUTF16( |
| 169 IDS_AUTOFILL_CARD_UNMASK_PROMPT_STORAGE_CHECKBOX)); | 177 IDS_AUTOFILL_CARD_UNMASK_PROMPT_STORAGE_CHECKBOX)); |
| 170 storage_checkbox_->SetChecked(controller_->GetStoreLocallyStartState()); | 178 storage_checkbox_->SetChecked(controller_->GetStoreLocallyStartState()); |
| 171 storage_row->AddChildView(storage_checkbox_); | 179 storage_row_->AddChildView(storage_checkbox_); |
| 172 storage_row_layout->SetFlexForView(storage_checkbox_, 1); | 180 storage_row_layout->SetFlexForView(storage_checkbox_, 1); |
| 173 | 181 |
| 174 storage_row->AddChildView(new TooltipIcon(l10n_util::GetStringUTF16( | 182 storage_row_->AddChildView(new TooltipIcon(l10n_util::GetStringUTF16( |
| 175 IDS_AUTOFILL_CARD_UNMASK_PROMPT_STORAGE_TOOLTIP))); | 183 IDS_AUTOFILL_CARD_UNMASK_PROMPT_STORAGE_TOOLTIP))); |
| 176 | 184 |
| 177 return storage_row; | 185 return storage_row_; |
| 178 } | 186 } |
| 179 | 187 |
| 180 gfx::Size CardUnmaskPromptViews::GetPreferredSize() const { | 188 gfx::Size CardUnmaskPromptViews::GetPreferredSize() const { |
| 181 // Must hardcode a width so the label knows where to wrap. TODO(estade): | 189 // Must hardcode a width so the label knows where to wrap. TODO(estade): |
| 182 // This can lead to a weird looking dialog if we end up getting allocated | 190 // This can lead to a weird looking dialog if we end up getting allocated |
| 183 // more width than we ask for, e.g. if the title is super long. | 191 // more width than we ask for, e.g. if the title is super long. |
| 184 const int kWidth = 375; | 192 const int kWidth = 375; |
| 185 return gfx::Size(kWidth, GetHeightForWidth(kWidth)); | 193 return gfx::Size(kWidth, GetHeightForWidth(kWidth)); |
| 186 } | 194 } |
| 187 | 195 |
| 188 void CardUnmaskPromptViews::Layout() { | 196 void CardUnmaskPromptViews::Layout() { |
| 189 for (int i = 0; i < child_count(); ++i) { | 197 gfx::Rect contents_bounds = GetContentsBounds(); |
| 190 child_at(i)->SetBoundsRect(GetContentsBounds()); | 198 main_contents_->SetBoundsRect(contents_bounds); |
| 191 } | 199 |
| 200 // The progress overlay extends from the top of the input row |
| 201 // to the bottom of the content area. |
| 202 gfx::RectF input_rect = input_row_->GetContentsBounds(); |
| 203 View::ConvertRectToTarget(input_row_, this, &input_rect); |
| 204 input_rect.set_height(contents_bounds.height()); |
| 205 contents_bounds.Intersect(gfx::ToNearestRect(input_rect)); |
| 206 progress_overlay_->SetBoundsRect(contents_bounds); |
| 192 } | 207 } |
| 193 | 208 |
| 194 int CardUnmaskPromptViews::GetHeightForWidth(int width) const { | 209 int CardUnmaskPromptViews::GetHeightForWidth(int width) const { |
| 195 if (!has_children()) | 210 if (!has_children()) |
| 196 return 0; | 211 return 0; |
| 197 const gfx::Insets insets = GetInsets(); | 212 const gfx::Insets insets = GetInsets(); |
| 198 return main_contents_->GetHeightForWidth(width - insets.width()) + | 213 return main_contents_->GetHeightForWidth(width - insets.width()) + |
| 199 insets.height(); | 214 insets.height(); |
| 200 } | 215 } |
| 201 | 216 |
| 202 void CardUnmaskPromptViews::OnNativeThemeChanged(const ui::NativeTheme* theme) { | 217 void CardUnmaskPromptViews::OnNativeThemeChanged(const ui::NativeTheme* theme) { |
| 203 SkColor bg_color = | 218 SkColor bg_color = |
| 204 theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); | 219 theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); |
| 205 bg_color = SkColorSetA(bg_color, 0xDD); | |
| 206 progress_overlay_->set_background( | 220 progress_overlay_->set_background( |
| 207 views::Background::CreateSolidBackground(bg_color)); | 221 views::Background::CreateSolidBackground(bg_color)); |
| 208 } | 222 } |
| 209 | 223 |
| 210 ui::ModalType CardUnmaskPromptViews::GetModalType() const { | 224 ui::ModalType CardUnmaskPromptViews::GetModalType() const { |
| 211 return ui::MODAL_TYPE_CHILD; | 225 return ui::MODAL_TYPE_CHILD; |
| 212 } | 226 } |
| 213 | 227 |
| 214 base::string16 CardUnmaskPromptViews::GetWindowTitle() const { | 228 base::string16 CardUnmaskPromptViews::GetWindowTitle() const { |
| 215 return controller_->GetWindowTitle(); | 229 return controller_->GetWindowTitle(); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 month_input_->SetInvalid(true); | 307 month_input_->SetInvalid(true); |
| 294 year_input_->SetInvalid(true); | 308 year_input_->SetInvalid(true); |
| 295 error_label_->SetMultiLine(true); | 309 error_label_->SetMultiLine(true); |
| 296 SetRetriableErrorMessage(l10n_util::GetStringUTF16( | 310 SetRetriableErrorMessage(l10n_util::GetStringUTF16( |
| 297 IDS_AUTOFILL_CARD_UNMASK_INVALID_EXPIRATION_DATE)); | 311 IDS_AUTOFILL_CARD_UNMASK_INVALID_EXPIRATION_DATE)); |
| 298 } | 312 } |
| 299 | 313 |
| 300 GetDialogClientView()->UpdateDialogButtons(); | 314 GetDialogClientView()->UpdateDialogButtons(); |
| 301 } | 315 } |
| 302 | 316 |
| 317 void CardUnmaskPromptViews::AnimationProgressed( |
| 318 const gfx::Animation* animation) { |
| 319 progress_overlay_->SetOpacity(animation->GetCurrentValue()); |
| 320 storage_row_->SetOpacity(1.0 - animation->GetCurrentValue()); |
| 321 } |
| 322 |
| 303 void CardUnmaskPromptViews::InitIfNecessary() { | 323 void CardUnmaskPromptViews::InitIfNecessary() { |
| 304 if (has_children()) | 324 if (has_children()) |
| 305 return; | 325 return; |
| 306 | 326 |
| 307 main_contents_ = new views::View(); | 327 main_contents_ = new views::View(); |
| 308 main_contents_->SetLayoutManager( | 328 main_contents_->SetLayoutManager( |
| 309 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 10)); | 329 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 10)); |
| 310 AddChildView(main_contents_); | 330 AddChildView(main_contents_); |
| 311 | 331 |
| 312 permanent_error_label_ = new views::Label(); | 332 permanent_error_label_ = new views::Label(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 328 main_contents_->AddChildView(controls_container); | 348 main_contents_->AddChildView(controls_container); |
| 329 | 349 |
| 330 views::Label* instructions = | 350 views::Label* instructions = |
| 331 new views::Label(controller_->GetInstructionsMessage()); | 351 new views::Label(controller_->GetInstructionsMessage()); |
| 332 | 352 |
| 333 instructions->SetMultiLine(true); | 353 instructions->SetMultiLine(true); |
| 334 instructions->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 354 instructions->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 335 instructions->SetBorder(views::Border::CreateEmptyBorder(0, 0, 15, 0)); | 355 instructions->SetBorder(views::Border::CreateEmptyBorder(0, 0, 15, 0)); |
| 336 controls_container->AddChildView(instructions); | 356 controls_container->AddChildView(instructions); |
| 337 | 357 |
| 338 views::View* input_row = new views::View(); | 358 input_row_ = new views::View(); |
| 339 input_row->SetLayoutManager( | 359 input_row_->SetLayoutManager( |
| 340 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 5)); | 360 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 5)); |
| 341 controls_container->AddChildView(input_row); | 361 controls_container->AddChildView(input_row_); |
| 342 | 362 |
| 343 if (controller_->ShouldRequestExpirationDate()) { | 363 if (controller_->ShouldRequestExpirationDate()) { |
| 344 month_input_ = new views::Combobox(&month_combobox_model_); | 364 month_input_ = new views::Combobox(&month_combobox_model_); |
| 345 month_input_->set_listener(this); | 365 month_input_->set_listener(this); |
| 346 input_row->AddChildView(month_input_); | 366 input_row_->AddChildView(month_input_); |
| 347 input_row->AddChildView(new views::Label(l10n_util::GetStringUTF16( | 367 input_row_->AddChildView(new views::Label(l10n_util::GetStringUTF16( |
| 348 IDS_AUTOFILL_CARD_UNMASK_EXPIRATION_DATE_SEPARATOR))); | 368 IDS_AUTOFILL_CARD_UNMASK_EXPIRATION_DATE_SEPARATOR))); |
| 349 year_input_ = new views::Combobox(&year_combobox_model_); | 369 year_input_ = new views::Combobox(&year_combobox_model_); |
| 350 year_input_->set_listener(this); | 370 year_input_->set_listener(this); |
| 351 input_row->AddChildView(year_input_); | 371 input_row_->AddChildView(year_input_); |
| 352 input_row->AddChildView(new views::Label(base::ASCIIToUTF16(" "))); | 372 input_row_->AddChildView(new views::Label(base::ASCIIToUTF16(" "))); |
| 353 } | 373 } |
| 354 | 374 |
| 355 cvc_input_ = new DecoratedTextfield( | 375 cvc_input_ = new DecoratedTextfield( |
| 356 base::string16(), | 376 base::string16(), |
| 357 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC), this); | 377 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC), this); |
| 358 cvc_input_->set_default_width_in_chars(8); | 378 cvc_input_->set_default_width_in_chars(8); |
| 359 input_row->AddChildView(cvc_input_); | 379 input_row_->AddChildView(cvc_input_); |
| 360 | 380 |
| 361 views::ImageView* cvc_image = new views::ImageView(); | 381 views::ImageView* cvc_image = new views::ImageView(); |
| 362 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 382 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| 363 cvc_image->SetImage(rb.GetImageSkiaNamed(controller_->GetCvcImageRid())); | 383 cvc_image->SetImage(rb.GetImageSkiaNamed(controller_->GetCvcImageRid())); |
| 364 input_row->AddChildView(cvc_image); | 384 input_row_->AddChildView(cvc_image); |
| 365 | 385 |
| 366 // Reserve vertical space for the error label, assuming it's one line. | 386 // Reserve vertical space for the error label, assuming it's one line. |
| 367 error_label_ = new views::Label(base::ASCIIToUTF16(" ")); | 387 error_label_ = new views::Label(base::ASCIIToUTF16(" ")); |
| 368 error_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 388 error_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 369 error_label_->SetEnabledColor(kWarningColor); | 389 error_label_->SetEnabledColor(kWarningColor); |
| 370 error_label_->SetBorder(views::Border::CreateEmptyBorder(3, 0, 5, 0)); | 390 error_label_->SetBorder(views::Border::CreateEmptyBorder(3, 0, 5, 0)); |
| 371 controls_container->AddChildView(error_label_); | 391 controls_container->AddChildView(error_label_); |
| 372 | 392 |
| 373 progress_overlay_ = new views::View(); | 393 progress_overlay_ = new FadeOutView(); |
| 394 progress_overlay_->set_fade_everything(true); |
| 374 views::BoxLayout* progress_layout = | 395 views::BoxLayout* progress_layout = |
| 375 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0); | 396 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0); |
| 376 progress_layout->set_main_axis_alignment( | 397 progress_layout->set_main_axis_alignment( |
| 377 views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); | 398 views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); |
| 378 progress_layout->set_cross_axis_alignment( | 399 progress_layout->set_cross_axis_alignment( |
| 379 views::BoxLayout::CROSS_AXIS_ALIGNMENT_CENTER); | 400 views::BoxLayout::CROSS_AXIS_ALIGNMENT_CENTER); |
| 380 progress_overlay_->SetLayoutManager(progress_layout); | 401 progress_overlay_->SetLayoutManager(progress_layout); |
| 381 | 402 |
| 382 progress_overlay_->SetVisible(false); | 403 progress_overlay_->SetVisible(false); |
| 383 AddChildView(progress_overlay_); | 404 AddChildView(progress_overlay_); |
| 384 | 405 |
| 385 progress_label_ = new views::Label(l10n_util::GetStringUTF16( | 406 progress_label_ = new views::Label(l10n_util::GetStringUTF16( |
| 386 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_IN_PROGRESS)); | 407 IDS_AUTOFILL_CARD_UNMASK_VERIFICATION_IN_PROGRESS)); |
| 387 progress_overlay_->AddChildView(progress_label_); | 408 progress_overlay_->AddChildView(progress_label_); |
| 388 } | 409 } |
| 389 | 410 |
| 390 bool CardUnmaskPromptViews::ExpirationDateIsValid() const { | 411 bool CardUnmaskPromptViews::ExpirationDateIsValid() const { |
| 391 if (!controller_->ShouldRequestExpirationDate()) | 412 if (!controller_->ShouldRequestExpirationDate()) |
| 392 return true; | 413 return true; |
| 393 | 414 |
| 394 return controller_->InputExpirationIsValid( | 415 return controller_->InputExpirationIsValid( |
| 395 month_input_->GetTextForRow(month_input_->selected_index()), | 416 month_input_->GetTextForRow(month_input_->selected_index()), |
| 396 year_input_->GetTextForRow(year_input_->selected_index())); | 417 year_input_->GetTextForRow(year_input_->selected_index())); |
| 397 } | 418 } |
| 398 | 419 |
| 399 void CardUnmaskPromptViews::ClosePrompt() { | 420 void CardUnmaskPromptViews::ClosePrompt() { |
| 400 GetWidget()->Close(); | 421 GetWidget()->Close(); |
| 401 } | 422 } |
| 402 | 423 |
| 424 CardUnmaskPromptViews::FadeOutView::FadeOutView() |
| 425 : fade_everything_(false), opacity_(1.0) { |
| 426 } |
| 427 CardUnmaskPromptViews::FadeOutView::~FadeOutView() { |
| 428 } |
| 429 |
| 430 void CardUnmaskPromptViews::FadeOutView::PaintChildren( |
| 431 gfx::Canvas* canvas, |
| 432 const views::CullSet& cull_set) { |
| 433 if (opacity_ > 0.99) |
| 434 return views::View::PaintChildren(canvas, cull_set); |
| 435 |
| 436 canvas->SaveLayerAlpha(0xff * opacity_); |
| 437 views::View::PaintChildren(canvas, cull_set); |
| 438 canvas->Restore(); |
| 439 } |
| 440 |
| 441 void CardUnmaskPromptViews::FadeOutView::OnPaint(gfx::Canvas* canvas) { |
| 442 if (!fade_everything_ || opacity_ > 0.99) |
| 443 return views::View::OnPaint(canvas); |
| 444 |
| 445 canvas->SaveLayerAlpha(0xff * opacity_); |
| 446 views::View::OnPaint(canvas); |
| 447 canvas->Restore(); |
| 448 } |
| 449 |
| 450 void CardUnmaskPromptViews::FadeOutView::SetOpacity(double opacity) { |
| 451 opacity_ = opacity; |
| 452 SchedulePaint(); |
| 453 } |
| 454 |
| 403 } // namespace autofill | 455 } // namespace autofill |
| OLD | NEW |