Chromium Code Reviews| Index: chrome/browser/ui/views/payments/payment_sheet_view_controller.cc |
| diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc |
| index 1992efaf4d9734a24c14d3a98de1653fe2424469..7da6e2da68c2b962cb7c84d998cc19bd2d25f14a 100644 |
| --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc |
| +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc |
| @@ -9,24 +9,113 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "chrome/browser/payments/payment_request_impl.h" |
| #include "chrome/browser/ui/views/payments/payment_request_dialog.h" |
| #include "chrome/browser/ui/views/payments/payment_request_views_util.h" |
| #include "chrome/grit/generated_resources.h" |
| +#include "components/strings/grit/components_strings.h" |
| +#include "third_party/skia/include/core/SkColor.h" |
| #include "ui/base/l10n/l10n_util.h" |
| +#include "ui/gfx/color_utils.h" |
| +#include "ui/gfx/font.h" |
| +#include "ui/gfx/geometry/insets.h" |
| +#include "ui/gfx/paint_vector_icon.h" |
| +#include "ui/gfx/range/range.h" |
| +#include "ui/gfx/vector_icons/vector_icons.h" |
| +#include "ui/views/border.h" |
| +#include "ui/views/controls/button/custom_button.h" |
| #include "ui/views/controls/button/label_button.h" |
| #include "ui/views/controls/button/md_text_button.h" |
| +#include "ui/views/controls/image_view.h" |
| +#include "ui/views/controls/label.h" |
| +#include "ui/views/controls/styled_label.h" |
| #include "ui/views/layout/grid_layout.h" |
| #include "ui/views/view.h" |
| +namespace payments { |
| + |
|
please use gerrit instead
2017/01/04 19:17:11
nit: no blank line
anthonyvd
2017/01/05 16:45:42
Done.
|
| namespace { |
| -// The tag for the button that navigates to the Order Summary sheet. |
| -constexpr int kOrderSummaryTag = 0; |
| +enum class PaymentSheetViewControllerTags { |
| + // The tag for the button that navigates to the Order Summary sheet. |
| + SHOW_ORDER_SUMMARY_BUTTON = static_cast<int>( |
| + payments::PaymentRequestCommonTags::PAYMENT_REQUEST_COMMON_TAG_MAX), |
| +}; |
| + |
| +// Creates a clickable row to be displayed in the Payment Sheet. It contains |
| +// a section name and some content, followed by a chevron as a clickability |
| +// affordance. Both, either, or none of |content_view| and |extra_content_view| |
| +// may be present, the difference between the two being that content is pinned |
| +// to the left and extra_content is pinned to the right. |
| +// The row also displays a light gray horizontal ruler on its lower boundary. |
| +// +----------------------------+ |
| +// | Name | Content | Extra | > | |
| +// +~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ <-- ruler |
| +class PaymentSheetRow : public views::CustomButton { |
| + public: |
| + PaymentSheetRow(views::ButtonListener* listener, |
| + const base::string16& section_name, |
| + std::unique_ptr<views::View> content_view, |
| + std::unique_ptr<views::View> extra_content_view) |
| + : views::CustomButton(listener) { |
| + SetBorder(views::CreateSolidSidedBorder(0, 0, 1, 0, SK_ColorLTGRAY)); |
| + views::GridLayout* layout = new views::GridLayout(this); |
| + |
| + constexpr int kRowVerticalInset = 18; |
| + // The rows have extra inset compared to the header so that their right edge |
| + // lines up with the close button's X rather than its invisible right edge. |
| + constexpr int kRowExtraRightInset = 8; |
| + layout->SetInsets( |
| + kRowVerticalInset, 0, kRowVerticalInset, kRowExtraRightInset); |
| + SetLayoutManager(layout); |
| + |
| + views::ColumnSet* columns = layout->AddColumnSet(0); |
| + // A column for the section name. |
| + columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, |
| + 0, views::GridLayout::USE_PREF, 0, 0); |
| + // A column for the content. |
| + columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, |
| + 1, views::GridLayout::USE_PREF, 0, 0); |
| + // A column for the extra content. |
| + columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, |
| + 0, views::GridLayout::USE_PREF, 0, 0); |
| + |
| + constexpr int kPaddingColumnsWidth = 25; |
| + columns->AddPaddingColumn(0, kPaddingColumnsWidth); |
| + // A column for the chevron. |
| + columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, |
| + 0, views::GridLayout::USE_PREF, 0, 0); |
| + |
| + layout->StartRow(0, 0); |
| + views::Label* name_label = new views::Label(section_name); |
| + layout->AddView(name_label); |
| + |
| + if (content_view) { |
| + layout->AddView(content_view.release()); |
| + } else { |
| + layout->SkipColumns(1); |
| + } |
| + |
| + if (extra_content_view) { |
| + layout->AddView(extra_content_view.release()); |
| + } else { |
| + layout->SkipColumns(1); |
| + } |
| + |
| + views::ImageView* chevron = new views::ImageView(); |
| + chevron->SetImage(gfx::CreateVectorIcon( |
| + gfx::VectorIconId::SUBMENU_ARROW, |
| + color_utils::DeriveDefaultIconColor(name_label->enabled_color()))); |
| + layout->AddView(chevron); |
| + |
| + SetFocusForPlatform(); |
|
anthonyvd
2017/01/04 19:15:30
Hmm it looks like this isn't the only call needed
anthonyvd
2017/01/05 16:45:42
It turns out focus is hard!
From what I can gathe
|
| + } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PaymentSheetRow); |
| +}; |
| } // namespace |
| -namespace payments { |
| - |
| PaymentSheetViewController::PaymentSheetViewController( |
| PaymentRequestImpl* impl, PaymentRequestDialog* dialog) |
| : PaymentRequestSheetController(impl, dialog) {} |
| @@ -39,26 +128,57 @@ std::unique_ptr<views::View> PaymentSheetViewController::CreateView() { |
| views::GridLayout* layout = new views::GridLayout(content_view.get()); |
| content_view->SetLayoutManager(layout); |
| views::ColumnSet* columns = layout->AddColumnSet(0); |
| - columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, |
| - 0, views::GridLayout::USE_PREF, 0, 0); |
| + columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, |
| + 1, views::GridLayout::USE_PREF, 0, 0); |
| layout->StartRow(0, 0); |
| - views::LabelButton* order_summary_button = |
| - views::MdTextButton::CreateSecondaryUiBlueButton( |
| - this, base::ASCIIToUTF16("Order Summary")); |
| - order_summary_button->set_tag(kOrderSummaryTag); |
| - layout->AddView(order_summary_button); |
| - |
| - return payments::CreatePaymentView( |
| - l10n_util::GetStringUTF16(IDS_PAYMENT_REQUEST_PAYMENT_SHEET_TITLE), |
| + layout->AddView(CreatePaymentSheetSummaryRow().release()); |
| + |
| + return CreatePaymentView( |
| + CreateSheetHeaderView( |
| + false, |
| + l10n_util::GetStringUTF16(IDS_PAYMENT_REQUEST_PAYMENT_SHEET_TITLE), |
| + this), |
| std::move(content_view)); |
| } |
| void PaymentSheetViewController::ButtonPressed( |
| views::Button* sender, const ui::Event& event) { |
| - DCHECK_EQ(kOrderSummaryTag, sender->tag()); |
| + switch (sender->tag()) { |
| + case static_cast<int>(PaymentRequestCommonTags::CLOSE_BUTTON_TAG): |
| + dialog()->CloseDialog(); |
| + break; |
| + case static_cast<int>( |
| + PaymentSheetViewControllerTags::SHOW_ORDER_SUMMARY_BUTTON): |
| + dialog()->ShowOrderSummary(); |
| + break; |
| + default: |
| + NOTREACHED(); |
| + } |
| +} |
| + |
| +std::unique_ptr<views::View> |
| +PaymentSheetViewController::CreateOrderSummarySectionContent() { |
| + base::string16 label_value = |
| + l10n_util::GetStringFUTF16( |
| + IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SECTION_TOTAL_FORMAT, |
| + base::ASCIIToUTF16(impl()->details()->total->label), |
| + base::ASCIIToUTF16(impl()->details()->total->amount->currency), |
| + base::ASCIIToUTF16(impl()->details()->total->amount->value)); |
| + |
| + return base::MakeUnique<views::Label>(label_value); |
| +} |
| - dialog()->ShowOrderSummary(); |
| +std::unique_ptr<views::View> |
| +PaymentSheetViewController::CreatePaymentSheetSummaryRow() { |
| + std::unique_ptr<PaymentSheetRow> section = base::MakeUnique<PaymentSheetRow>( |
| + this, |
| + l10n_util::GetStringUTF16(IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SECTION_NAME), |
| + std::unique_ptr<views::View>(nullptr), |
| + CreateOrderSummarySectionContent()); |
| + section->set_tag(static_cast<int>( |
| + PaymentSheetViewControllerTags::SHOW_ORDER_SUMMARY_BUTTON)); |
| + return section; |
| } |
| } // namespace payments |