Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/payments/payment_sheet_view_controller.h" | 5 #include "chrome/browser/ui/views/payments/payment_sheet_view_controller.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/i18n/message_formatter.h" | |
| 13 #include "base/macros.h" | 14 #include "base/macros.h" |
| 14 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 15 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 16 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 18 #include "chrome/browser/browser_process.h" | 19 #include "chrome/browser/browser_process.h" |
| 19 #include "chrome/browser/ui/views/payments/payment_request_dialog_view.h" | 20 #include "chrome/browser/ui/views/payments/payment_request_dialog_view.h" |
| 20 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" | 21 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" |
| 21 #include "chrome/browser/ui/views/payments/payment_request_row_view.h" | 22 #include "chrome/browser/ui/views/payments/payment_request_row_view.h" |
| 22 #include "chrome/browser/ui/views/payments/payment_request_views_util.h" | 23 #include "chrome/browser/ui/views/payments/payment_request_views_util.h" |
| 23 #include "chrome/grit/generated_resources.h" | 24 #include "chrome/grit/generated_resources.h" |
| 24 #include "components/autofill/core/browser/field_types.h" | 25 #include "components/autofill/core/browser/field_types.h" |
| 25 #include "components/autofill/core/browser/personal_data_manager.h" | 26 #include "components/autofill/core/browser/personal_data_manager.h" |
| 26 #include "components/payments/content/payment_request_spec.h" | 27 #include "components/payments/content/payment_request_spec.h" |
| 27 #include "components/payments/content/payment_request_state.h" | 28 #include "components/payments/content/payment_request_state.h" |
| 28 #include "components/payments/core/currency_formatter.h" | 29 #include "components/payments/core/currency_formatter.h" |
| 29 #include "components/payments/core/payment_instrument.h" | 30 #include "components/payments/core/payment_instrument.h" |
| 30 #include "components/payments/core/strings_util.h" | 31 #include "components/payments/core/strings_util.h" |
| 31 #include "components/strings/grit/components_strings.h" | 32 #include "components/strings/grit/components_strings.h" |
| 32 #include "content/public/browser/web_contents.h" | 33 #include "content/public/browser/web_contents.h" |
| 33 #include "ui/base/l10n/l10n_util.h" | 34 #include "ui/base/l10n/l10n_util.h" |
| 34 #include "ui/base/resource/resource_bundle.h" | 35 #include "ui/base/resource/resource_bundle.h" |
| 35 #include "ui/gfx/color_utils.h" | 36 #include "ui/gfx/color_utils.h" |
| 36 #include "ui/gfx/font.h" | 37 #include "ui/gfx/font.h" |
| 37 #include "ui/gfx/paint_vector_icon.h" | 38 #include "ui/gfx/paint_vector_icon.h" |
| 38 #include "ui/gfx/range/range.h" | 39 #include "ui/gfx/range/range.h" |
| 40 #include "ui/gfx/text_elider.h" | |
| 41 #include "ui/gfx/text_utils.h" | |
| 39 #include "ui/views/controls/button/md_text_button.h" | 42 #include "ui/views/controls/button/md_text_button.h" |
| 40 #include "ui/views/controls/image_view.h" | 43 #include "ui/views/controls/image_view.h" |
| 41 #include "ui/views/controls/label.h" | 44 #include "ui/views/controls/label.h" |
| 42 #include "ui/views/controls/styled_label.h" | 45 #include "ui/views/controls/styled_label.h" |
| 43 #include "ui/views/layout/box_layout.h" | 46 #include "ui/views/layout/box_layout.h" |
| 44 #include "ui/views/layout/fill_layout.h" | 47 #include "ui/views/layout/fill_layout.h" |
| 45 #include "ui/views/layout/grid_layout.h" | 48 #include "ui/views/layout/grid_layout.h" |
| 46 #include "ui/views/vector_icons.h" | 49 #include "ui/views/vector_icons.h" |
| 47 #include "ui/views/view.h" | 50 #include "ui/views/view.h" |
| 48 | 51 |
| 49 namespace payments { | 52 namespace payments { |
| 50 namespace { | 53 namespace { |
| 51 | 54 |
| 52 constexpr int kFirstTagValue = static_cast<int>( | 55 constexpr int kFirstTagValue = static_cast<int>( |
| 53 payments::PaymentRequestCommonTags::PAYMENT_REQUEST_COMMON_TAG_MAX); | 56 payments::PaymentRequestCommonTags::PAYMENT_REQUEST_COMMON_TAG_MAX); |
| 54 | 57 |
| 55 enum class PaymentSheetViewControllerTags { | 58 enum class PaymentSheetViewControllerTags { |
| 56 // The tag for the button that navigates to the Order Summary sheet. | 59 // The tag for the button that navigates to the Order Summary sheet. |
| 57 SHOW_ORDER_SUMMARY_BUTTON = kFirstTagValue, | 60 SHOW_ORDER_SUMMARY_BUTTON = kFirstTagValue, |
| 58 SHOW_SHIPPING_BUTTON, | 61 SHOW_SHIPPING_BUTTON, |
| 59 SHOW_PAYMENT_METHOD_BUTTON, | 62 SHOW_PAYMENT_METHOD_BUTTON, |
| 60 SHOW_CONTACT_INFO_BUTTON, | 63 SHOW_CONTACT_INFO_BUTTON, |
| 61 SHOW_SHIPPING_OPTION_BUTTON, | 64 SHOW_SHIPPING_OPTION_BUTTON, |
| 62 PAY_BUTTON | 65 PAY_BUTTON |
| 63 }; | 66 }; |
| 64 | 67 |
| 68 // A class that ensures proper elision of labels in the form | |
| 69 // "[preview] and N more" where preview might be elided to allow "and N more" to | |
| 70 // be always visible. | |
| 71 class PreviewEliderLabel : public views::Label { | |
| 72 public: | |
| 73 // Creates a PreviewEliderLabel where |preview_text| might be elided, | |
| 74 // |format_string| is a the string with format argument numbers in ICU syntax | |
|
Mathieu
2017/04/24 19:09:01
*is the
anthonyvd
2017/04/24 20:24:25
Done.
| |
| 75 // and |n| is the "N more" item count. | |
| 76 PreviewEliderLabel(const base::string16& preview_text, | |
| 77 const base::string16& format_string, | |
| 78 int n) | |
| 79 : views::Label(base::ASCIIToUTF16("")), | |
| 80 preview_text_(preview_text), | |
| 81 format_string_(format_string), | |
| 82 n_(n) {} | |
| 83 | |
| 84 private: | |
| 85 // Formats |preview_text_|, |format_string_|, and |n_| into a string that fits | |
| 86 // inside of |pixel_width|, eliding |preview_text_| as required. | |
| 87 base::string16 CreateElidedString(int pixel_width) { | |
| 88 for (int preview_length = preview_text_.size(); preview_length > 0; | |
| 89 --preview_length) { | |
| 90 base::string16 elided_preview; | |
| 91 gfx::ElideRectangleString(preview_text_, 1, preview_length, | |
| 92 /*strict=*/false, &elided_preview); | |
| 93 base::string16 elided_string = | |
| 94 base::i18n::MessageFormatter::FormatWithNumberedArgs( | |
| 95 format_string_, "", elided_preview, n_); | |
| 96 if (gfx::GetStringWidth(elided_string, font_list()) <= width()) | |
| 97 return elided_string; | |
| 98 } | |
| 99 | |
| 100 // TODO(anthonyvd): Display something meaningful if the preview can't be | |
|
Mathieu
2017/04/24 19:09:01
let's have a crbug for it :)
anthonyvd
2017/04/24 20:24:25
Done.
| |
| 101 // elided enough for the string to fit. | |
| 102 return base::ASCIIToUTF16(""); | |
| 103 } | |
| 104 | |
| 105 // views::View: | |
| 106 void OnBoundsChanged(const gfx::Rect& previous_bounds) override { | |
| 107 SetText(CreateElidedString(width())); | |
| 108 views::Label::OnBoundsChanged(previous_bounds); | |
| 109 } | |
| 110 | |
| 111 base::string16 preview_text_; | |
| 112 base::string16 format_string_; | |
| 113 int n_; | |
| 114 | |
| 115 DISALLOW_COPY_AND_ASSIGN(PreviewEliderLabel); | |
| 116 }; | |
| 117 | |
| 65 int ComputeWidestNameColumnViewWidth() { | 118 int ComputeWidestNameColumnViewWidth() { |
| 66 // The name colums in each row should all have the same width, large enough to | 119 // The name colums in each row should all have the same width, large enough to |
| 67 // accomodate the longest piece of text they contain. Because of this, each | 120 // accomodate the longest piece of text they contain. Because of this, each |
| 68 // row's GridLayout requires its first column to have a fixed width of the | 121 // row's GridLayout requires its first column to have a fixed width of the |
| 69 // correct size. To measure the required size, layout a label with each | 122 // correct size. To measure the required size, layout a label with each |
| 70 // section name, measure its width, then initialize |widest_column_width| | 123 // section name, measure its width, then initialize |widest_column_width| |
| 71 // with the largest value. | 124 // with the largest value. |
| 72 std::vector<int> section_names{ | 125 std::vector<int> section_names{ |
| 73 IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SECTION_NAME, | 126 IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SECTION_NAME, |
| 74 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME, | 127 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 154 return std::move(row); | 207 return std::move(row); |
| 155 } | 208 } |
| 156 | 209 |
| 157 // Creates a row with a button in place of the chevron. | 210 // Creates a row with a button in place of the chevron. |
| 158 // +------------------------------------------+ | 211 // +------------------------------------------+ |
| 159 // | Name | truncated_content | button_string | | 212 // | Name | truncated_content | button_string | |
| 160 // +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ | 213 // +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ |
| 161 std::unique_ptr<views::Button> CreatePaymentSheetRowWithButton( | 214 std::unique_ptr<views::Button> CreatePaymentSheetRowWithButton( |
| 162 views::ButtonListener* listener, | 215 views::ButtonListener* listener, |
| 163 const base::string16& section_name, | 216 const base::string16& section_name, |
| 164 const base::string16& truncated_content, | 217 std::unique_ptr<views::View> content_view, |
| 165 const base::string16& button_string, | 218 const base::string16& button_string, |
| 166 int button_tag, | 219 int button_tag, |
| 167 int button_id, | 220 int button_id, |
| 168 int name_column_width) { | 221 int name_column_width) { |
| 169 std::unique_ptr<views::Button> button( | 222 std::unique_ptr<views::Button> button( |
| 170 views::MdTextButton::CreateSecondaryUiBlueButton(listener, | 223 views::MdTextButton::CreateSecondaryUiBlueButton(listener, |
| 171 button_string)); | 224 button_string)); |
| 172 button->set_tag(button_tag); | 225 button->set_tag(button_tag); |
| 173 button->set_id(button_id); | 226 button->set_id(button_id); |
| 174 std::unique_ptr<views::Label> content_view = | |
| 175 base::MakeUnique<views::Label>(truncated_content); | |
| 176 return CreatePaymentSheetRow(listener, section_name, std::move(content_view), | 227 return CreatePaymentSheetRow(listener, section_name, std::move(content_view), |
| 177 nullptr, std::move(button), | 228 nullptr, std::move(button), |
| 178 /*clickable=*/false, name_column_width); | 229 /*clickable=*/false, name_column_width); |
| 179 } | 230 } |
| 180 | 231 |
| 232 std::unique_ptr<views::Button> CreatePaymentSheetRowWithButton( | |
| 233 views::ButtonListener* listener, | |
| 234 const base::string16& section_name, | |
| 235 const base::string16& truncated_content, | |
| 236 const base::string16& button_string, | |
| 237 int button_tag, | |
| 238 int button_id, | |
| 239 int name_column_width) { | |
| 240 std::unique_ptr<views::Label> content_view = | |
| 241 base::MakeUnique<views::Label>(truncated_content); | |
| 242 content_view->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
| 243 return CreatePaymentSheetRowWithButton( | |
| 244 listener, section_name, std::move(content_view), button_string, | |
| 245 button_tag, button_id, name_column_width); | |
| 246 } | |
| 247 | |
| 248 std::unique_ptr<views::Button> CreatePaymentSheetRowWithButton( | |
|
Mathieu
2017/04/24 19:09:01
CreatePaymentSheetRowWithButtonAndPreview ?
anthonyvd
2017/04/24 20:24:25
The other one has a preview as well, it's just not
| |
| 249 views::ButtonListener* listener, | |
| 250 const base::string16& section_name, | |
| 251 const base::string16& preview_text, | |
| 252 const base::string16& format_string, | |
| 253 int n, | |
| 254 const base::string16& button_string, | |
| 255 int button_tag, | |
| 256 int button_id, | |
| 257 int name_column_width) { | |
| 258 std::unique_ptr<PreviewEliderLabel> content_view = | |
| 259 base::MakeUnique<PreviewEliderLabel>(preview_text, format_string, n); | |
| 260 content_view->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
| 261 return CreatePaymentSheetRowWithButton( | |
| 262 listener, section_name, std::move(content_view), button_string, | |
| 263 button_tag, button_id, name_column_width); | |
| 264 } | |
| 265 | |
| 181 // Creates a clickable row to be displayed in the Payment Sheet. It contains | 266 // Creates a clickable row to be displayed in the Payment Sheet. It contains |
| 182 // a section name and some content, followed by a chevron as a clickability | 267 // a section name and some content, followed by a chevron as a clickability |
| 183 // affordance. Both, either, or none of |content_view| and |extra_content_view| | 268 // affordance. Both, either, or none of |content_view| and |extra_content_view| |
| 184 // may be present, the difference between the two being that content is pinned | 269 // may be present, the difference between the two being that content is pinned |
| 185 // to the left and extra_content is pinned to the right. | 270 // to the left and extra_content is pinned to the right. |
| 186 // The row also displays a light gray horizontal ruler on its lower boundary. | 271 // The row also displays a light gray horizontal ruler on its lower boundary. |
| 187 // The name column has a fixed width equal to |name_column_width|. | 272 // The name column has a fixed width equal to |name_column_width|. |
| 188 // +----------------------------+ | 273 // +----------------------------+ |
| 189 // | Name | Content | Extra | > | | 274 // | Name | Content | Extra | > | |
| 190 // +~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ <-- ruler | 275 // +~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ <-- ruler |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 508 this, GetShippingAddressSectionString(spec()->shipping_type()), | 593 this, GetShippingAddressSectionString(spec()->shipping_type()), |
| 509 CreateShippingSectionContent(), nullptr, | 594 CreateShippingSectionContent(), nullptr, |
| 510 static_cast<int>(PaymentSheetViewControllerTags::SHOW_SHIPPING_BUTTON), | 595 static_cast<int>(PaymentSheetViewControllerTags::SHOW_SHIPPING_BUTTON), |
| 511 static_cast<int>(DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION), | 596 static_cast<int>(DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION), |
| 512 widest_name_column_view_width_); | 597 widest_name_column_view_width_); |
| 513 } else { | 598 } else { |
| 514 base::string16 button_string = state()->shipping_profiles().size() | 599 base::string16 button_string = state()->shipping_profiles().size() |
| 515 ? l10n_util::GetStringUTF16(IDS_CHOOSE) | 600 ? l10n_util::GetStringUTF16(IDS_CHOOSE) |
| 516 : l10n_util::GetStringUTF16(IDS_ADD); | 601 : l10n_util::GetStringUTF16(IDS_ADD); |
| 517 | 602 |
| 518 section = CreatePaymentSheetRowWithButton( | 603 if (state()->shipping_profiles().size() == 0) { |
| 519 this, GetShippingAddressSectionString(spec()->shipping_type()), | 604 section = CreatePaymentSheetRowWithButton( |
| 520 base::ASCIIToUTF16(""), button_string, | 605 this, GetShippingAddressSectionString(spec()->shipping_type()), |
| 521 static_cast<int>(PaymentSheetViewControllerTags::SHOW_SHIPPING_BUTTON), | 606 base::ASCIIToUTF16(""), button_string, |
| 522 static_cast<int>( | 607 static_cast<int>( |
| 523 DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION_BUTTON), | 608 PaymentSheetViewControllerTags::SHOW_SHIPPING_BUTTON), |
| 524 widest_name_column_view_width_); | 609 static_cast<int>( |
| 610 DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION_BUTTON), | |
| 611 widest_name_column_view_width_); | |
| 612 } else if (state()->shipping_profiles().size() == 1) { | |
| 613 base::string16 truncated_content = | |
| 614 state()->shipping_profiles()[0]->ConstructInferredLabel( | |
| 615 { | |
| 616 autofill::ADDRESS_HOME_LINE1, autofill::ADDRESS_HOME_LINE2, | |
| 617 autofill::ADDRESS_HOME_CITY, autofill::ADDRESS_HOME_STATE, | |
| 618 autofill::ADDRESS_HOME_COUNTRY, | |
| 619 }, | |
| 620 6, state()->GetApplicationLocale()); | |
| 621 section = CreatePaymentSheetRowWithButton( | |
| 622 this, GetShippingAddressSectionString(spec()->shipping_type()), | |
| 623 truncated_content, button_string, | |
| 624 static_cast<int>( | |
| 625 PaymentSheetViewControllerTags::SHOW_SHIPPING_BUTTON), | |
| 626 static_cast<int>( | |
| 627 DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION_BUTTON), | |
| 628 widest_name_column_view_width_); | |
| 629 } else { | |
| 630 base::string16 format = l10n_util::GetPluralStringFUTF16( | |
| 631 IDS_PAYMENT_REQUEST_SHIPPING_ADDRESSES_PREVIEW, | |
| 632 state()->shipping_profiles().size() - 1); | |
| 633 base::string16 label = | |
| 634 state()->shipping_profiles()[0]->ConstructInferredLabel( | |
| 635 { | |
| 636 autofill::ADDRESS_HOME_LINE1, autofill::ADDRESS_HOME_LINE2, | |
| 637 autofill::ADDRESS_HOME_CITY, autofill::ADDRESS_HOME_STATE, | |
| 638 autofill::ADDRESS_HOME_COUNTRY, | |
| 639 }, | |
| 640 6, state()->GetApplicationLocale()); | |
| 641 section = CreatePaymentSheetRowWithButton( | |
| 642 this, GetShippingAddressSectionString(spec()->shipping_type()), label, | |
| 643 format, state()->shipping_profiles().size() - 1, button_string, | |
| 644 static_cast<int>( | |
| 645 PaymentSheetViewControllerTags::SHOW_SHIPPING_BUTTON), | |
| 646 static_cast<int>( | |
| 647 DialogViewID::PAYMENT_SHEET_SHIPPING_ADDRESS_SECTION_BUTTON), | |
| 648 widest_name_column_view_width_); | |
| 649 } | |
| 525 } | 650 } |
| 526 | 651 |
| 527 return section; | 652 return section; |
| 528 } | 653 } |
| 529 | 654 |
| 530 // Creates the Payment Method row, which contains a "Payment" label, the user's | 655 // Creates the Payment Method row, which contains a "Payment" label, the user's |
| 531 // masked Credit Card details, the icon for the selected card, and a chevron. | 656 // masked Credit Card details, the icon for the selected card, and a chevron. |
| 532 // If no option is selected or none is available, the Chevron and icon are | 657 // If no option is selected or none is available, the Chevron and icon are |
| 533 // replaced with a button | 658 // replaced with a button |
| 534 // +----------------------------------------------+ | 659 // +----------------------------------------------+ |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 568 std::move(content_view), std::move(card_icon_view), | 693 std::move(content_view), std::move(card_icon_view), |
| 569 static_cast<int>( | 694 static_cast<int>( |
| 570 PaymentSheetViewControllerTags::SHOW_PAYMENT_METHOD_BUTTON), | 695 PaymentSheetViewControllerTags::SHOW_PAYMENT_METHOD_BUTTON), |
| 571 static_cast<int>(DialogViewID::PAYMENT_SHEET_PAYMENT_METHOD_SECTION), | 696 static_cast<int>(DialogViewID::PAYMENT_SHEET_PAYMENT_METHOD_SECTION), |
| 572 widest_name_column_view_width_); | 697 widest_name_column_view_width_); |
| 573 } else { | 698 } else { |
| 574 base::string16 button_string = state()->available_instruments().size() | 699 base::string16 button_string = state()->available_instruments().size() |
| 575 ? l10n_util::GetStringUTF16(IDS_CHOOSE) | 700 ? l10n_util::GetStringUTF16(IDS_CHOOSE) |
| 576 : l10n_util::GetStringUTF16(IDS_ADD); | 701 : l10n_util::GetStringUTF16(IDS_ADD); |
| 577 | 702 |
| 578 section = CreatePaymentSheetRowWithButton( | 703 if (state()->available_instruments().size() == 0) { |
|
Mathieu
2017/04/24 19:09:01
I like .empty()
anthonyvd
2017/04/24 20:24:26
Done.
| |
| 579 this, | 704 section = CreatePaymentSheetRowWithButton( |
| 580 l10n_util::GetStringUTF16( | 705 this, |
| 581 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME), | 706 l10n_util::GetStringUTF16( |
| 582 base::ASCIIToUTF16(""), button_string, | 707 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME), |
| 583 static_cast<int>( | 708 base::ASCIIToUTF16(""), button_string, |
| 584 PaymentSheetViewControllerTags::SHOW_PAYMENT_METHOD_BUTTON), | 709 static_cast<int>( |
| 585 static_cast<int>( | 710 PaymentSheetViewControllerTags::SHOW_PAYMENT_METHOD_BUTTON), |
| 586 DialogViewID::PAYMENT_SHEET_PAYMENT_METHOD_SECTION_BUTTON), | 711 static_cast<int>( |
| 587 widest_name_column_view_width_); | 712 DialogViewID::PAYMENT_SHEET_PAYMENT_METHOD_SECTION_BUTTON), |
| 713 widest_name_column_view_width_); | |
| 714 } else if (state()->available_instruments().size() == 1) { | |
| 715 section = CreatePaymentSheetRowWithButton( | |
| 716 this, | |
| 717 l10n_util::GetStringUTF16( | |
| 718 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME), | |
| 719 state()->available_instruments()[0]->label(), button_string, | |
| 720 static_cast<int>( | |
| 721 PaymentSheetViewControllerTags::SHOW_PAYMENT_METHOD_BUTTON), | |
| 722 static_cast<int>( | |
| 723 DialogViewID::PAYMENT_SHEET_PAYMENT_METHOD_SECTION_BUTTON), | |
| 724 widest_name_column_view_width_); | |
| 725 } else { | |
| 726 base::string16 format = l10n_util::GetPluralStringFUTF16( | |
| 727 IDS_PAYMENT_REQUEST_PAYMENT_METHODS_PREVIEW, | |
| 728 state()->available_instruments().size() - 1); | |
| 729 section = CreatePaymentSheetRowWithButton( | |
| 730 this, | |
| 731 l10n_util::GetStringUTF16( | |
| 732 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME), | |
| 733 state()->available_instruments()[0]->label(), format, | |
| 734 state()->available_instruments().size() - 1, button_string, | |
| 735 static_cast<int>( | |
| 736 PaymentSheetViewControllerTags::SHOW_PAYMENT_METHOD_BUTTON), | |
| 737 static_cast<int>( | |
| 738 DialogViewID::PAYMENT_SHEET_PAYMENT_METHOD_SECTION_BUTTON), | |
| 739 widest_name_column_view_width_); | |
| 740 } | |
| 588 } | 741 } |
| 589 | 742 |
| 590 return section; | 743 return section; |
| 591 } | 744 } |
| 592 | 745 |
| 593 std::unique_ptr<views::View> | 746 std::unique_ptr<views::View> |
| 594 PaymentSheetViewController::CreateContactInfoSectionContent() { | 747 PaymentSheetViewController::CreateContactInfoSectionContent() { |
| 595 autofill::AutofillProfile* profile = state()->selected_contact_profile(); | 748 autofill::AutofillProfile* profile = state()->selected_contact_profile(); |
| 596 return profile ? payments::GetContactInfoLabel( | 749 return profile ? payments::GetContactInfoLabel( |
| 597 AddressStyleType::SUMMARY, | 750 AddressStyleType::SUMMARY, |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 617 CreateContactInfoSectionContent(), nullptr, | 770 CreateContactInfoSectionContent(), nullptr, |
| 618 static_cast<int>( | 771 static_cast<int>( |
| 619 PaymentSheetViewControllerTags::SHOW_CONTACT_INFO_BUTTON), | 772 PaymentSheetViewControllerTags::SHOW_CONTACT_INFO_BUTTON), |
| 620 static_cast<int>(DialogViewID::PAYMENT_SHEET_CONTACT_INFO_SECTION), | 773 static_cast<int>(DialogViewID::PAYMENT_SHEET_CONTACT_INFO_SECTION), |
| 621 widest_name_column_view_width_); | 774 widest_name_column_view_width_); |
| 622 } else { | 775 } else { |
| 623 base::string16 button_string = state()->contact_profiles().size() | 776 base::string16 button_string = state()->contact_profiles().size() |
| 624 ? l10n_util::GetStringUTF16(IDS_CHOOSE) | 777 ? l10n_util::GetStringUTF16(IDS_CHOOSE) |
| 625 : l10n_util::GetStringUTF16(IDS_ADD); | 778 : l10n_util::GetStringUTF16(IDS_ADD); |
| 626 | 779 |
| 627 section = CreatePaymentSheetRowWithButton( | 780 if (state()->contact_profiles().size() == 0) { |
| 628 this, | 781 section = CreatePaymentSheetRowWithButton( |
| 629 l10n_util::GetStringUTF16( | 782 this, |
| 630 IDS_PAYMENT_REQUEST_CONTACT_INFO_SECTION_NAME), | 783 l10n_util::GetStringUTF16( |
| 631 base::ASCIIToUTF16(""), button_string, | 784 IDS_PAYMENT_REQUEST_CONTACT_INFO_SECTION_NAME), |
| 632 static_cast<int>( | 785 base::ASCIIToUTF16(""), button_string, |
| 633 PaymentSheetViewControllerTags::SHOW_CONTACT_INFO_BUTTON), | 786 static_cast<int>( |
| 634 static_cast<int>( | 787 PaymentSheetViewControllerTags::SHOW_CONTACT_INFO_BUTTON), |
| 635 DialogViewID::PAYMENT_SHEET_CONTACT_INFO_SECTION_BUTTON), | 788 static_cast<int>( |
| 636 widest_name_column_view_width_); | 789 DialogViewID::PAYMENT_SHEET_CONTACT_INFO_SECTION_BUTTON), |
| 790 widest_name_column_view_width_); | |
| 791 } else if (state()->contact_profiles().size() == 1) { | |
| 792 base::string16 truncated_content = | |
| 793 state()->contact_profiles()[0]->ConstructInferredLabel( | |
| 794 { | |
| 795 autofill::ADDRESS_HOME_LINE1, autofill::ADDRESS_HOME_LINE2, | |
| 796 autofill::ADDRESS_HOME_CITY, autofill::ADDRESS_HOME_STATE, | |
| 797 autofill::ADDRESS_HOME_COUNTRY, | |
| 798 }, | |
| 799 6, state()->GetApplicationLocale()); | |
| 800 section = CreatePaymentSheetRowWithButton( | |
| 801 this, | |
| 802 l10n_util::GetStringUTF16( | |
| 803 IDS_PAYMENT_REQUEST_CONTACT_INFO_SECTION_NAME), | |
| 804 truncated_content, button_string, | |
| 805 static_cast<int>( | |
| 806 PaymentSheetViewControllerTags::SHOW_CONTACT_INFO_BUTTON), | |
| 807 static_cast<int>( | |
| 808 DialogViewID::PAYMENT_SHEET_CONTACT_INFO_SECTION_BUTTON), | |
| 809 widest_name_column_view_width_); | |
| 810 } else { | |
| 811 base::string16 preview = | |
| 812 state()->contact_profiles()[0]->ConstructInferredLabel( | |
| 813 { | |
| 814 autofill::ADDRESS_HOME_LINE1, autofill::ADDRESS_HOME_LINE2, | |
| 815 autofill::ADDRESS_HOME_CITY, autofill::ADDRESS_HOME_STATE, | |
| 816 autofill::ADDRESS_HOME_COUNTRY, | |
| 817 }, | |
| 818 6, state()->GetApplicationLocale()); | |
| 819 base::string16 format = l10n_util::GetPluralStringFUTF16( | |
| 820 IDS_PAYMENT_REQUEST_CONTACTS_PREVIEW, | |
| 821 state()->contact_profiles().size() - 1); | |
| 822 section = CreatePaymentSheetRowWithButton( | |
| 823 this, | |
| 824 l10n_util::GetStringUTF16( | |
| 825 IDS_PAYMENT_REQUEST_CONTACT_INFO_SECTION_NAME), | |
| 826 preview, format, state()->contact_profiles().size() - 1, | |
| 827 button_string, | |
| 828 static_cast<int>( | |
| 829 PaymentSheetViewControllerTags::SHOW_CONTACT_INFO_BUTTON), | |
| 830 static_cast<int>( | |
| 831 DialogViewID::PAYMENT_SHEET_CONTACT_INFO_SECTION_BUTTON), | |
| 832 widest_name_column_view_width_); | |
| 833 } | |
| 637 } | 834 } |
| 638 | 835 |
| 639 return section; | 836 return section; |
| 640 } | 837 } |
| 641 | 838 |
| 642 std::unique_ptr<views::Button> | 839 std::unique_ptr<views::Button> |
| 643 PaymentSheetViewController::CreateShippingOptionRow() { | 840 PaymentSheetViewController::CreateShippingOptionRow() { |
| 644 mojom::PaymentShippingOption* selected_option = | 841 mojom::PaymentShippingOption* selected_option = |
| 645 spec()->selected_shipping_option(); | 842 spec()->selected_shipping_option(); |
| 646 // The shipping option section displays the currently selected option if there | 843 // The shipping option section displays the currently selected option if there |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 680 PaymentSheetViewControllerTags::SHOW_SHIPPING_OPTION_BUTTON), | 877 PaymentSheetViewControllerTags::SHOW_SHIPPING_OPTION_BUTTON), |
| 681 static_cast<int>( | 878 static_cast<int>( |
| 682 DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION_BUTTON), | 879 DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION_BUTTON), |
| 683 widest_name_column_view_width_); | 880 widest_name_column_view_width_); |
| 684 } | 881 } |
| 685 | 882 |
| 686 return section; | 883 return section; |
| 687 } | 884 } |
| 688 | 885 |
| 689 } // namespace payments | 886 } // namespace payments |
| OLD | NEW |