| 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 8fbc5f0260c697055a589cb3f066b9367c048258..80043e1f9d6440c5a21280f25fe8bead9d8372c5 100644
|
| --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
|
| +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
|
| @@ -12,6 +12,7 @@
|
|
|
| #include "base/macros.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/browser_process.h"
|
| @@ -164,6 +165,25 @@ std::unique_ptr<views::Button> CreatePaymentSheetRow(
|
| return std::move(row);
|
| }
|
|
|
| +// Creates a GridLayout object to be used in the Order Summary section's list of
|
| +// items and the list of prices. |host| is the view that will be assigned the
|
| +// returned Layout Manager and |trailing| indicates whether the elements added
|
| +// to the manager should have trailing horizontal alignment. If trailing is
|
| +// |false|, their horizontal alignment is leading.
|
| +std::unique_ptr<views::GridLayout> CreateOrderSummarySectionContainerLayout(
|
| + views::View* host,
|
| + bool trailing) {
|
| + std::unique_ptr<views::GridLayout> layout =
|
| + base::MakeUnique<views::GridLayout>(host);
|
| +
|
| + views::ColumnSet* columns = layout->AddColumnSet(0);
|
| + columns->AddColumn(
|
| + trailing ? views::GridLayout::TRAILING : views::GridLayout::LEADING,
|
| + views::GridLayout::LEADING, 1, views::GridLayout::USE_PREF, 0, 0);
|
| +
|
| + return layout;
|
| +}
|
| +
|
| } // namespace
|
|
|
| PaymentSheetViewController::PaymentSheetViewController(
|
| @@ -288,33 +308,80 @@ void PaymentSheetViewController::UpdatePayButtonState(bool enabled) {
|
| pay_button_->SetEnabled(enabled);
|
| }
|
|
|
| -std::unique_ptr<views::View>
|
| -PaymentSheetViewController::CreateOrderSummarySectionContent() {
|
| - CurrencyFormatter* formatter = request()->GetOrCreateCurrencyFormatter(
|
| - request()->details()->total->amount->currency,
|
| - request()->details()->total->amount->currency_system,
|
| - g_browser_process->GetApplicationLocale());
|
| - base::string16 label_value = l10n_util::GetStringFUTF16(
|
| - IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SECTION_TOTAL_FORMAT,
|
| - base::UTF8ToUTF16(request()->details()->total->label),
|
| - base::UTF8ToUTF16(formatter->formatted_currency_code()),
|
| - formatter->Format(request()->details()->total->amount->value));
|
| -
|
| - return base::MakeUnique<views::Label>(label_value);
|
| -}
|
| -
|
| // Creates the Order Summary row, which contains an "Order Summary" label,
|
| -// a Total Amount label, and a Chevron.
|
| +// an inline list of display items, a Total Amount label, and a Chevron.
|
| // +----------------------------------------------+
|
| -// | Order Summary Total USD $12.34 > |
|
| +// | Order Summary Item 1 $ 1.34 |
|
| +// | Item 2 $ 2.00 > |
|
| +// | 2 more items... |
|
| +// | Total USD $12.34 |
|
| // +----------------------------------------------+
|
| std::unique_ptr<views::Button>
|
| PaymentSheetViewController::CreatePaymentSheetSummaryRow() {
|
| + std::unique_ptr<views::View> item_summaries = base::MakeUnique<views::View>();
|
| + std::unique_ptr<views::GridLayout> item_summaries_layout =
|
| + CreateOrderSummarySectionContainerLayout(item_summaries.get(),
|
| + /* trailing =*/false);
|
| +
|
| + std::unique_ptr<views::View> item_amounts = base::MakeUnique<views::View>();
|
| + std::unique_ptr<views::GridLayout> item_amounts_layout =
|
| + CreateOrderSummarySectionContainerLayout(item_amounts.get(),
|
| + /* trailing =*/true);
|
| +
|
| + const std::vector<mojom::PaymentItemPtr>& items =
|
| + request()->details()->display_items;
|
| + // The inline items section contains the first 2 display items of the
|
| + // request's details, followed by a label indicating "N more items..." if
|
| + // there are more than 2 items in the details. The total label and amount
|
| + // always follow.
|
| + constexpr int kMaxNumberOfItemsShown = 2;
|
| + for (size_t i = 0; i < items.size() && i < kMaxNumberOfItemsShown; ++i) {
|
| + item_summaries_layout->StartRow(0, 0);
|
| + item_summaries_layout->AddView(
|
| + new views::Label(base::ASCIIToUTF16(items[i]->label)));
|
| +
|
| + item_amounts_layout->StartRow(0, 0);
|
| + item_amounts_layout->AddView(new views::Label(
|
| + request()->GetFormattedCurrencyAmount(items[i]->amount->value)));
|
| + }
|
| +
|
| + int hidden_item_count = items.size() - kMaxNumberOfItemsShown;
|
| + if (hidden_item_count > 0) {
|
| + item_summaries_layout->StartRow(0, 0);
|
| + std::unique_ptr<views::Label> label = base::MakeUnique<views::Label>(
|
| + l10n_util::GetStringFUTF16(IDS_PAYMENT_REQUEST_ORDER_SUMMARY_MORE_ITEMS,
|
| + base::IntToString16(hidden_item_count)));
|
| + label->SetDisabledColor(label->GetNativeTheme()->GetSystemColor(
|
| + ui::NativeTheme::kColorId_LabelDisabledColor));
|
| + label->SetEnabled(false);
|
| + item_summaries_layout->AddView(label.release());
|
| +
|
| + item_amounts_layout->StartRow(0, 0);
|
| + item_amounts_layout->AddView(new views::Label(base::ASCIIToUTF16("")));
|
| + }
|
| +
|
| + item_summaries_layout->StartRow(0, 0);
|
| + item_summaries_layout->AddView(
|
| + CreateBoldLabel(base::ASCIIToUTF16(request()->details()->total->label))
|
| + .release());
|
| +
|
| + item_amounts_layout->StartRow(0, 0);
|
| + item_amounts_layout->AddView(
|
| + CreateBoldLabel(
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SHEET_TOTAL_FORMAT,
|
| + base::UTF8ToUTF16(request()->GetFormattedCurrencyCode()),
|
| + request()->GetFormattedCurrencyAmount(
|
| + request()->details()->total->amount->value)))
|
| + .release());
|
| +
|
| + item_summaries->SetLayoutManager(item_summaries_layout.release());
|
| + item_amounts->SetLayoutManager(item_amounts_layout.release());
|
| +
|
| std::unique_ptr<views::Button> section = CreatePaymentSheetRow(
|
| this,
|
| l10n_util::GetStringUTF16(IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SECTION_NAME),
|
| - std::unique_ptr<views::View>(nullptr),
|
| - CreateOrderSummarySectionContent(),
|
| + std::move(item_summaries), std::move(item_amounts),
|
| widest_name_column_view_width_);
|
| section->set_tag(static_cast<int>(
|
| PaymentSheetViewControllerTags::SHOW_ORDER_SUMMARY_BUTTON));
|
|
|