Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(379)

Side by Side Diff: chrome/browser/ui/views/payments/payment_request_item_list.cc

Issue 2923533002: [Merge M60][Payments] Do not select an address if the merchant doesn't support it (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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_request_item_list.h" 5 #include "chrome/browser/ui/views/payments/payment_request_item_list.h"
6 6
7 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" 7 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
8 #include "chrome/browser/ui/views/payments/payment_request_row_view.h" 8 #include "chrome/browser/ui/views/payments/payment_request_row_view.h"
9 #include "chrome/browser/ui/views/payments/payment_request_views_util.h" 9 #include "chrome/browser/ui/views/payments/payment_request_views_util.h"
10 #include "components/payments/content/payment_request_state.h" 10 #include "components/payments/content/payment_request_state.h"
(...skipping 23 matching lines...) Expand all
34 bool selected, 34 bool selected,
35 bool show_edit_button) 35 bool show_edit_button)
36 : spec_(spec), 36 : spec_(spec),
37 state_(state), 37 state_(state),
38 list_(list), 38 list_(list),
39 selected_(selected), 39 selected_(selected),
40 show_edit_button_(show_edit_button) {} 40 show_edit_button_(show_edit_button) {}
41 41
42 PaymentRequestItemList::Item::~Item() {} 42 PaymentRequestItemList::Item::~Item() {}
43 43
44 views::View* PaymentRequestItemList::Item::GetItemView() {
45 if (!item_view_) {
46 item_view_ = CreateItemView();
47 item_view_->set_owned_by_client();
48 }
49
50 return item_view_.get();
51 }
52
53 void PaymentRequestItemList::Item::SetSelected(bool selected, bool notify) {
54 selected_ = selected;
55
56 // This could be called before CreateItemView, so before |checkmark_| is
57 // instantiated.
58 if (checkmark_)
59 checkmark_->SetVisible(selected_);
60
61 if (notify)
62 SelectedStateChanged();
63 }
64
65 std::unique_ptr<views::ImageView> PaymentRequestItemList::Item::CreateCheckmark(
66 bool selected) {
67 std::unique_ptr<views::ImageView> checkmark =
68 base::MakeUnique<views::ImageView>();
69 checkmark->set_id(static_cast<int>(DialogViewID::CHECKMARK_VIEW));
70 checkmark->set_can_process_events_within_subtree(false);
71 checkmark->set_owned_by_client();
72 checkmark->SetImage(
73 gfx::CreateVectorIcon(views::kMenuCheckIcon, kCheckmarkColor));
74 checkmark->SetVisible(selected);
75 return checkmark;
76 }
77
78 std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateExtraView() {
79 return nullptr;
80 }
81
82 std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateItemView() { 44 std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateItemView() {
83 std::unique_ptr<views::View> content = CreateContentView(); 45 std::unique_ptr<views::View> content = CreateContentView();
84 46
85 const gfx::Insets row_insets( 47 const gfx::Insets row_insets(
86 kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets, 48 kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets,
87 kPaymentRequestRowVerticalInsets, 49 kPaymentRequestRowVerticalInsets,
88 kPaymentRequestRowHorizontalInsets + kPaymentRequestRowExtraRightInset); 50 kPaymentRequestRowHorizontalInsets + kPaymentRequestRowExtraRightInset);
89 std::unique_ptr<PaymentRequestRowView> row = 51 std::unique_ptr<PaymentRequestRowView> row =
90 base::MakeUnique<PaymentRequestRowView>(this, 52 base::MakeUnique<PaymentRequestRowView>(this,
91 /* clickable= */ IsEnabled(), 53 /* clickable= */ IsEnabled(),
(...skipping 26 matching lines...) Expand all
118 // Add a column for the edit_button if it exists. 80 // Add a column for the edit_button if it exists.
119 columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 81 columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER,
120 0, views::GridLayout::FIXED, kEditIconSize, 82 0, views::GridLayout::FIXED, kEditIconSize,
121 kEditIconSize); 83 kEditIconSize);
122 } 84 }
123 85
124 layout->StartRow(0, 0); 86 layout->StartRow(0, 0);
125 content->set_can_process_events_within_subtree(false); 87 content->set_can_process_events_within_subtree(false);
126 layout->AddView(content.release()); 88 layout->AddView(content.release());
127 89
128 checkmark_ = CreateCheckmark(selected()); 90 checkmark_ = CreateCheckmark(selected() && IsEnabled());
129 layout->AddView(checkmark_.get()); 91 layout->AddView(checkmark_.get());
130 92
131 if (extra_view) 93 if (extra_view)
132 layout->AddView(extra_view.release()); 94 layout->AddView(extra_view.release());
133 95
134 if (show_edit_button_) { 96 if (show_edit_button_) {
135 views::ImageButton* edit_button = views::CreateVectorImageButton(this); 97 views::ImageButton* edit_button = views::CreateVectorImageButton(this);
136 const SkColor icon_color = 98 const SkColor icon_color =
137 color_utils::DeriveDefaultIconColor(SK_ColorBLACK); 99 color_utils::DeriveDefaultIconColor(SK_ColorBLACK);
138 edit_button->SetImage( 100 edit_button->SetImage(
139 views::Button::STATE_NORMAL, 101 views::Button::STATE_NORMAL,
140 gfx::CreateVectorIcon(ui::kEditIcon, kEditIconSize, icon_color)); 102 gfx::CreateVectorIcon(ui::kEditIcon, kEditIconSize, icon_color));
141 edit_button->set_ink_drop_base_color(icon_color); 103 edit_button->set_ink_drop_base_color(icon_color);
142 edit_button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); 104 edit_button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS);
143 edit_button->set_id(static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON)); 105 edit_button->set_id(static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON));
144 layout->AddView(edit_button); 106 layout->AddView(edit_button);
145 } 107 }
146 108
147 return std::move(row); 109 return std::move(row);
148 } 110 }
149 111
112 void PaymentRequestItemList::Item::SetSelected(bool selected, bool notify) {
113 selected_ = selected;
114
115 // This could be called before CreateItemView, so before |checkmark_| is
116 // instantiated.
117 if (checkmark_)
118 checkmark_->SetVisible(selected_);
119
120 if (notify)
121 SelectedStateChanged();
122 }
123
124 std::unique_ptr<views::ImageView> PaymentRequestItemList::Item::CreateCheckmark(
125 bool selected) {
126 std::unique_ptr<views::ImageView> checkmark =
127 base::MakeUnique<views::ImageView>();
128 checkmark->set_id(static_cast<int>(DialogViewID::CHECKMARK_VIEW));
129 checkmark->set_can_process_events_within_subtree(false);
130 checkmark->set_owned_by_client();
131 checkmark->SetImage(
132 gfx::CreateVectorIcon(views::kMenuCheckIcon, kCheckmarkColor));
133 checkmark->SetVisible(selected);
134 return checkmark;
135 }
136
137 std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateExtraView() {
138 return nullptr;
139 }
140
150 void PaymentRequestItemList::Item::ButtonPressed(views::Button* sender, 141 void PaymentRequestItemList::Item::ButtonPressed(views::Button* sender,
151 const ui::Event& event) { 142 const ui::Event& event) {
152 if (sender->id() == static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON)) { 143 if (sender->id() == static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON)) {
153 EditButtonPressed(); 144 EditButtonPressed();
154 } else if (CanBeSelected()) { 145 } else if (CanBeSelected()) {
155 list()->SelectItem(this); 146 list()->SelectItem(this);
156 } else { 147 } else {
157 PerformSelectionFallback(); 148 PerformSelectionFallback();
158 } 149 }
159 } 150 }
(...skipping 13 matching lines...) Expand all
173 } 164 }
174 } 165 }
175 166
176 std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() { 167 std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() {
177 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>(); 168 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>();
178 169
179 views::BoxLayout* layout = new views::BoxLayout( 170 views::BoxLayout* layout = new views::BoxLayout(
180 views::BoxLayout::kVertical, 0, kPaymentRequestRowVerticalInsets, 0); 171 views::BoxLayout::kVertical, 0, kPaymentRequestRowVerticalInsets, 0);
181 content_view->SetLayoutManager(layout); 172 content_view->SetLayoutManager(layout);
182 173
183 for (auto& item : items_) { 174 for (auto& item : items_)
184 content_view->AddChildView(item->GetItemView()); 175 content_view->AddChildView(item->CreateItemView().release());
185 }
186 176
187 return content_view; 177 return content_view;
188 } 178 }
189 179
190 void PaymentRequestItemList::SelectItem(PaymentRequestItemList::Item* item) { 180 void PaymentRequestItemList::SelectItem(PaymentRequestItemList::Item* item) {
191 DCHECK_EQ(this, item->list()); 181 DCHECK_EQ(this, item->list());
192 if (selected_item_ == item) 182 if (selected_item_ == item)
193 return; 183 return;
194 184
195 UnselectSelectedItem(); 185 UnselectSelectedItem();
196 186
197 selected_item_ = item; 187 selected_item_ = item;
198 item->SetSelected(/*selected=*/true, /*notify=*/true); 188 item->SetSelected(/*selected=*/true, /*notify=*/true);
199 } 189 }
200 190
201 void PaymentRequestItemList::UnselectSelectedItem() { 191 void PaymentRequestItemList::UnselectSelectedItem() {
202 // It's possible that no item is currently selected, either during list 192 // It's possible that no item is currently selected, either during list
203 // creation or in the middle of the selection operation when the previously 193 // creation or in the middle of the selection operation when the previously
204 // selected item has been deselected but the new one isn't selected yet. 194 // selected item has been deselected but the new one isn't selected yet.
205 if (selected_item_) 195 if (selected_item_)
206 selected_item_->SetSelected(/*selected=*/false, /*notify=*/true); 196 selected_item_->SetSelected(/*selected=*/false, /*notify=*/true);
207 197
208 selected_item_ = nullptr; 198 selected_item_ = nullptr;
209 } 199 }
210 200
211 } // namespace payments 201 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698