| Index: chrome/browser/ui/views/payments/payment_method_view_controller.cc
|
| diff --git a/chrome/browser/ui/views/payments/payment_method_view_controller.cc b/chrome/browser/ui/views/payments/payment_method_view_controller.cc
|
| index 438237e4ac337794fff59ca26654fe22b46ff1b0..2e8245cfcc12178441c3fcc613b02f8473e04a68 100644
|
| --- a/chrome/browser/ui/views/payments/payment_method_view_controller.cc
|
| +++ b/chrome/browser/ui/views/payments/payment_method_view_controller.cc
|
| @@ -44,8 +44,14 @@ class PaymentMethodListItem : public payments::PaymentRequestItemList::Item,
|
| public views::ButtonListener {
|
| public:
|
| // Does not take ownership of |card|, which should not be null and should
|
| - // outlive this object.
|
| - explicit PaymentMethodListItem(autofill::CreditCard* card) : card_(card) {}
|
| + // outlive this object. |list| is the PaymentRequestItemList object that will
|
| + // own this.
|
| + PaymentMethodListItem(autofill::CreditCard* card,
|
| + PaymentRequest* request,
|
| + PaymentRequestItemList* list,
|
| + bool selected)
|
| + : payments::PaymentRequestItemList::Item(request, list, selected),
|
| + card_(card) {}
|
| ~PaymentMethodListItem() override {}
|
|
|
| private:
|
| @@ -72,6 +78,8 @@ class PaymentMethodListItem : public payments::PaymentRequestItemList::Item,
|
| columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER,
|
| 0, views::GridLayout::USE_PREF, 0, 0);
|
|
|
| + columns->AddPaddingColumn(0, kPaymentRequestButtonSpacing);
|
| +
|
| // A column for the card icon
|
| columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER,
|
| 0, views::GridLayout::USE_PREF, 0, 0);
|
| @@ -97,14 +105,18 @@ class PaymentMethodListItem : public payments::PaymentRequestItemList::Item,
|
| card_info_container->AddChildView(new views::Label(
|
| card_->GetInfo(autofill::AutofillType(autofill::CREDIT_CARD_NAME_FULL),
|
| g_browser_process->GetApplicationLocale())));
|
| + // TODO(anthonyvd): Add the "card is incomplete" label once the
|
| + // completedness logic is implemented.
|
| layout->AddView(card_info_container.release());
|
|
|
| - std::unique_ptr<views::ImageView> checkmark =
|
| - base::MakeUnique<views::ImageView>();
|
| - checkmark->set_interactive(false);
|
| - checkmark->SetImage(
|
| + checkmark_ = base::MakeUnique<views::ImageView>();
|
| + checkmark_->set_owned_by_client();
|
| + checkmark_->set_interactive(false);
|
| + checkmark_->SetImage(
|
| gfx::CreateVectorIcon(views::kMenuCheckIcon, 0xFF609265));
|
| - layout->AddView(checkmark.release());
|
| + layout->AddView(checkmark_.get());
|
| + if (!selected())
|
| + checkmark_->SetVisible(false);
|
|
|
| std::unique_ptr<views::ImageView> card_icon_view =
|
| CreateCardIconView(card_->type());
|
| @@ -114,10 +126,33 @@ class PaymentMethodListItem : public payments::PaymentRequestItemList::Item,
|
| return std::move(row);
|
| }
|
|
|
| + void SelectedStateChanged() override {
|
| + // This could be called before CreateItemView, so before |checkmark_| is
|
| + // instantiated.
|
| + if (checkmark_)
|
| + checkmark_->SetVisible(selected());
|
| +
|
| + request()->set_selected_credit_card(card_);
|
| + }
|
| +
|
| // views::ButtonListener:
|
| - void ButtonPressed(views::Button* sender, const ui::Event& event) override {}
|
| + void ButtonPressed(views::Button* sender, const ui::Event& event) override {
|
| + if (IsComplete()) {
|
| + list()->SelectItem(this);
|
| + } else {
|
| + // TODO(anthonyvd): Display the editor, pre-populated with the data that
|
| + // already exists in |card|.
|
| + }
|
| + }
|
| +
|
| + bool IsComplete() const {
|
| + // TODO(anthonyvd): Hook this up to the card completedness logic when it's
|
| + // implemented in PaymentRequest.
|
| + return true;
|
| + }
|
|
|
| autofill::CreditCard* card_;
|
| + std::unique_ptr<views::ImageView> checkmark_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PaymentMethodListItem);
|
| };
|
| @@ -132,7 +167,11 @@ PaymentMethodViewController::PaymentMethodViewController(
|
| request->credit_cards();
|
|
|
| for (autofill::CreditCard* card : available_cards) {
|
| - payment_method_list_.AddItem(base::MakeUnique<PaymentMethodListItem>(card));
|
| + std::unique_ptr<PaymentMethodListItem> item =
|
| + base::MakeUnique<PaymentMethodListItem>(
|
| + card, request, &payment_method_list_,
|
| + card == request->selected_credit_card());
|
| + payment_method_list_.AddItem(std::move(item));
|
| }
|
| }
|
|
|
|
|