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

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

Issue 2768133002: [Web Payments] Refactor sheet display to allow updating view content (Closed)
Patch Set: Add comments. Created 3 years, 9 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 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>
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 return layout; 187 return layout;
188 } 188 }
189 189
190 } // namespace 190 } // namespace
191 191
192 PaymentSheetViewController::PaymentSheetViewController( 192 PaymentSheetViewController::PaymentSheetViewController(
193 PaymentRequestSpec* spec, 193 PaymentRequestSpec* spec,
194 PaymentRequestState* state, 194 PaymentRequestState* state,
195 PaymentRequestDialogView* dialog) 195 PaymentRequestDialogView* dialog)
196 : PaymentRequestSheetController(spec, state, dialog), 196 : PaymentRequestSheetController(spec, state, dialog),
197 container_view_(base::MakeUnique<views::View>()),
198 pay_button_(nullptr), 197 pay_button_(nullptr),
199 widest_name_column_view_width_(ComputeWidestNameColumnViewWidth()) { 198 widest_name_column_view_width_(ComputeWidestNameColumnViewWidth()) {
200 container_view_->set_owned_by_client();
201 state->AddObserver(this); 199 state->AddObserver(this);
202 } 200 }
203 201
204 PaymentSheetViewController::~PaymentSheetViewController() { 202 PaymentSheetViewController::~PaymentSheetViewController() {
205 state()->RemoveObserver(this); 203 state()->RemoveObserver(this);
206 } 204 }
207 205
208 std::unique_ptr<views::View> PaymentSheetViewController::CreateView() {
209 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>();
210 content_view->SetLayoutManager(new views::FillLayout);
211
212 UpdateContentView();
213 content_view->AddChildView(container_view_.get());
214
215 return CreatePaymentView(
216 CreateSheetHeaderView(
217 false,
218 l10n_util::GetStringUTF16(IDS_PAYMENT_REQUEST_PAYMENT_SHEET_TITLE),
219 this),
220 std::move(content_view));
221 }
222
223 void PaymentSheetViewController::OnSelectedInformationChanged() { 206 void PaymentSheetViewController::OnSelectedInformationChanged() {
224 UpdatePayButtonState(state()->is_ready_to_pay()); 207 UpdatePayButtonState(state()->is_ready_to_pay());
225 UpdateContentView(); 208 UpdateContentView();
226 container_view_->Layout();
227 } 209 }
228 210
229 std::unique_ptr<views::Button> 211 std::unique_ptr<views::Button>
230 PaymentSheetViewController::CreatePrimaryButton() { 212 PaymentSheetViewController::CreatePrimaryButton() {
231 std::unique_ptr<views::Button> button( 213 std::unique_ptr<views::Button> button(
232 views::MdTextButton::CreateSecondaryUiBlueButton( 214 views::MdTextButton::CreateSecondaryUiBlueButton(
233 this, l10n_util::GetStringUTF16(IDS_PAYMENTS_PAY_BUTTON))); 215 this, l10n_util::GetStringUTF16(IDS_PAYMENTS_PAY_BUTTON)));
234 button->set_tag(static_cast<int>(PaymentRequestCommonTags::PAY_BUTTON_TAG)); 216 button->set_tag(static_cast<int>(PaymentRequestCommonTags::PAY_BUTTON_TAG));
235 button->set_id(static_cast<int>(DialogViewID::PAY_BUTTON)); 217 button->set_id(static_cast<int>(DialogViewID::PAY_BUTTON));
236 pay_button_ = button.get(); 218 pay_button_ = button.get();
237 UpdatePayButtonState(state()->is_ready_to_pay()); 219 UpdatePayButtonState(state()->is_ready_to_pay());
238 return button; 220 return button;
239 } 221 }
240 222
223 bool PaymentSheetViewController::ShouldShowHeaderBackArrow() {
224 return false;
225 }
226
227 base::string16 PaymentSheetViewController::GetSheetTitle() {
228 return l10n_util::GetStringUTF16(IDS_PAYMENT_REQUEST_PAYMENT_SHEET_TITLE);
229 }
230
231 void PaymentSheetViewController::FillContentView(views::View* content_view) {
232 views::GridLayout* layout = new views::GridLayout(content_view);
233 content_view->SetLayoutManager(layout);
234 views::ColumnSet* columns = layout->AddColumnSet(0);
235 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 1,
236 views::GridLayout::USE_PREF, 0, 0);
237
238 // The shipping address and contact info rows are optional.
239 layout->StartRow(0, 0);
240 layout->AddView(CreatePaymentSheetSummaryRow().release());
241
242 if (spec()->request_shipping()) {
243 layout->StartRow(0, 0);
244 layout->AddView(CreateShippingRow().release());
245 layout->StartRow(0, 0);
246 layout->AddView(CreateShippingOptionRow().release());
247 }
248 layout->StartRow(0, 0);
249 layout->AddView(CreatePaymentMethodRow().release());
250 if (spec()->request_payer_name() || spec()->request_payer_email() ||
251 spec()->request_payer_phone()) {
252 layout->StartRow(0, 0);
253 layout->AddView(CreateContactInfoRow().release());
254 }
255 }
256
241 // Adds the product logo to the footer. 257 // Adds the product logo to the footer.
242 // +---------------------------------------------------------+ 258 // +---------------------------------------------------------+
243 // | (•) chrome | PAY | CANCEL | 259 // | (•) chrome | PAY | CANCEL |
244 // +---------------------------------------------------------+ 260 // +---------------------------------------------------------+
245 std::unique_ptr<views::View> 261 std::unique_ptr<views::View>
246 PaymentSheetViewController::CreateExtraFooterView() { 262 PaymentSheetViewController::CreateExtraFooterView() {
247 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>(); 263 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>();
248 264
249 views::BoxLayout* layout = 265 views::BoxLayout* layout =
250 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); 266 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 default: 312 default:
297 PaymentRequestSheetController::ButtonPressed(sender, event); 313 PaymentRequestSheetController::ButtonPressed(sender, event);
298 break; 314 break;
299 } 315 }
300 } 316 }
301 317
302 void PaymentSheetViewController::UpdatePayButtonState(bool enabled) { 318 void PaymentSheetViewController::UpdatePayButtonState(bool enabled) {
303 pay_button_->SetEnabled(enabled); 319 pay_button_->SetEnabled(enabled);
304 } 320 }
305 321
306 void PaymentSheetViewController::UpdateContentView() {
307 container_view_->RemoveAllChildViews(/*delete_children=*/true);
308 views::GridLayout* layout = new views::GridLayout(container_view_.get());
309 container_view_->SetLayoutManager(layout);
310 views::ColumnSet* columns = layout->AddColumnSet(0);
311 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 1,
312 views::GridLayout::USE_PREF, 0, 0);
313
314 // The shipping address and contact info rows are optional.
315 layout->StartRow(0, 0);
316 layout->AddView(CreatePaymentSheetSummaryRow().release());
317
318 if (spec()->request_shipping()) {
319 layout->StartRow(0, 0);
320 layout->AddView(CreateShippingRow().release());
321 layout->StartRow(0, 0);
322 layout->AddView(CreateShippingOptionRow().release());
323 }
324 layout->StartRow(0, 0);
325 layout->AddView(CreatePaymentMethodRow().release());
326 if (spec()->request_payer_name() || spec()->request_payer_email() ||
327 spec()->request_payer_phone()) {
328 layout->StartRow(0, 0);
329 layout->AddView(CreateContactInfoRow().release());
330 }
331 }
332
333 // Creates the Order Summary row, which contains an "Order Summary" label, 322 // Creates the Order Summary row, which contains an "Order Summary" label,
334 // an inline list of display items, a Total Amount label, and a Chevron. 323 // an inline list of display items, a Total Amount label, and a Chevron.
335 // +----------------------------------------------+ 324 // +----------------------------------------------+
336 // | Order Summary Item 1 $ 1.34 | 325 // | Order Summary Item 1 $ 1.34 |
337 // | Item 2 $ 2.00 > | 326 // | Item 2 $ 2.00 > |
338 // | 2 more items... | 327 // | 2 more items... |
339 // | Total USD $12.34 | 328 // | Total USD $12.34 |
340 // +----------------------------------------------+ 329 // +----------------------------------------------+
341 std::unique_ptr<views::Button> 330 std::unique_ptr<views::Button>
342 PaymentSheetViewController::CreatePaymentSheetSummaryRow() { 331 PaymentSheetViewController::CreatePaymentSheetSummaryRow() {
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 std::move(option_label), std::unique_ptr<views::View>(nullptr), 520 std::move(option_label), std::unique_ptr<views::View>(nullptr),
532 widest_name_column_view_width_); 521 widest_name_column_view_width_);
533 section->set_tag(static_cast<int>( 522 section->set_tag(static_cast<int>(
534 PaymentSheetViewControllerTags::SHOW_SHIPPING_OPTION_BUTTON)); 523 PaymentSheetViewControllerTags::SHOW_SHIPPING_OPTION_BUTTON));
535 section->set_id( 524 section->set_id(
536 static_cast<int>(DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION)); 525 static_cast<int>(DialogViewID::PAYMENT_SHEET_SHIPPING_OPTION_SECTION));
537 return section; 526 return section;
538 } 527 }
539 528
540 } // namespace payments 529 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698