Index: chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
index f86e335d0d79d3c38abde3735daebfaf807cadce..4562c3355bb6b68a5de560009b3982c2e1ddb481 100644 |
--- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
+++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc |
@@ -41,6 +41,7 @@ |
#include "ui/views/controls/label.h" |
#include "ui/views/controls/textfield/textfield.h" |
#include "ui/views/layout/box_layout.h" |
+#include "ui/views/layout/fill_layout.h" |
#include "ui/views/layout/grid_layout.h" |
#include "ui/views/view.h" |
@@ -118,9 +119,12 @@ CreditCardEditorViewController::CreateHeaderView() { |
// 9dp is required between the first row (label) and second row (icons). |
constexpr int kRowVerticalSpacing = 9; |
+ // 6dp is added to the bottom padding, for a total of 12 between the icons and |
+ // the first input field. |
+ constexpr int kRowBottomPadding = 6; |
views::BoxLayout* layout = new views::BoxLayout( |
views::BoxLayout::kVertical, payments::kPaymentRequestRowHorizontalInsets, |
- 0, kRowVerticalSpacing); |
+ kRowBottomPadding, kRowVerticalSpacing); |
layout->set_main_axis_alignment(views::BoxLayout::MAIN_AXIS_ALIGNMENT_START); |
layout->set_cross_axis_alignment( |
views::BoxLayout::CROSS_AXIS_ALIGNMENT_START); |
@@ -160,66 +164,14 @@ CreditCardEditorViewController::CreateHeaderView() { |
return view; |
} |
-// Creates the "Billing Address" custom field view. |
-// +------------------------------------+ |
-// Label* | | Combobox | | Add button | | |
-// +------------------------------------+ |
std::unique_ptr<views::View> |
-CreditCardEditorViewController::CreateCustomFieldView( |
+CreditCardEditorViewController::CreateExtraViewForField( |
autofill::ServerFieldType type) { |
if (type != kBillingAddressType) |
- return std::unique_ptr<views::View>(); |
- std::unique_ptr<views::View> view = base::MakeUnique<views::View>(); |
- |
- std::unique_ptr<views::GridLayout> layout = |
- base::MakeUnique<views::GridLayout>(view.get()); |
- |
- // Combobox column. |
- views::ColumnSet* columns = layout->AddColumnSet(0); |
- columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 0, |
- views::GridLayout::FIXED, kMaximumLabelWidth, 0); |
- |
- // This is the horizontal padding between the combobox and the add button. |
- constexpr int kComboboxAddButtonHorizontalPadding = 8; |
- columns->AddPaddingColumn(0, kComboboxAddButtonHorizontalPadding); |
- |
- columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0, |
- views::GridLayout::USE_PREF, 0, 0); |
- |
- layout->StartRow(0, 0); |
- |
- EditorField billing_address_field( |
- kBillingAddressType, |
- l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_BILLING_ADDRESS), |
- EditorField::LengthHint::HINT_SHORT, /*required=*/true, |
- EditorField::ControlType::COMBOBOX); |
- |
- // The combobox filled with potential billing addresses. |
- std::unique_ptr<autofill::AddressComboboxModel> address_combobox_model = |
- base::MakeUnique<autofill::AddressComboboxModel>( |
- *state()->GetPersonalDataManager(), state()->GetApplicationLocale()); |
- int selected_index = -1; |
- if (credit_card_to_edit_ && |
- !credit_card_to_edit_->billing_address_id().empty()) { |
- selected_index = address_combobox_model->GetIndexOfIdentifier( |
- credit_card_to_edit_->billing_address_id()); |
- } |
- // This takes care of rare cases where the the billing address set on the |
- // current card isn't valid anymore. |
- if (selected_index == -1) |
- selected_index = address_combobox_model->GetDefaultIndex(); |
- |
- ValidatingCombobox* combobox = |
- new ValidatingCombobox(std::move(address_combobox_model), |
- CreateValidationDelegate(billing_address_field)); |
- combobox->SetSelectedIndex(selected_index); |
- |
- // Using autofill field type as a view ID (for testing). |
- combobox->set_id(static_cast<int>(billing_address_field.type)); |
- combobox->set_listener(this); |
+ return nullptr; |
- // |combobox| will now be owned by |row|. |
- layout->AddView(combobox); |
+ std::unique_ptr<views::View> button_view = base::MakeUnique<views::View>(); |
+ button_view->SetLayoutManager(new views::FillLayout); |
// The button to add new billing addresses. |
std::unique_ptr<views::Button> add_button( |
@@ -227,21 +179,18 @@ CreditCardEditorViewController::CreateCustomFieldView( |
add_button->set_id( |
static_cast<int>(DialogViewID::ADD_BILLING_ADDRESS_BUTTON)); |
add_button->set_tag(add_billing_address_button_tag_); |
- |
- // |add_button| will now be owned by |row|. |
- layout->AddView(add_button.release()); |
- view->SetLayoutManager(layout.release()); |
- return view; |
+ button_view->AddChildView(add_button.release()); |
+ return button_view; |
} |
std::vector<EditorField> CreditCardEditorViewController::GetFieldDefinitions() { |
return std::vector<EditorField>{ |
{autofill::CREDIT_CARD_NUMBER, |
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_CREDIT_CARD_NUMBER), |
- EditorField::LengthHint::HINT_LONG, /* required= */ true}, |
+ EditorField::LengthHint::HINT_SHORT, /* required= */ true}, |
{autofill::CREDIT_CARD_NAME_FULL, |
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_NAME_ON_CARD), |
- EditorField::LengthHint::HINT_LONG, /* required= */ true}, |
+ EditorField::LengthHint::HINT_SHORT, /* required= */ true}, |
{autofill::CREDIT_CARD_EXP_MONTH, |
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_EXPIRATION_MONTH), |
EditorField::LengthHint::HINT_SHORT, /* required= */ true, |
@@ -252,13 +201,13 @@ std::vector<EditorField> CreditCardEditorViewController::GetFieldDefinitions() { |
EditorField::ControlType::COMBOBOX}, |
{kBillingAddressType, |
l10n_util::GetStringUTF16(IDS_AUTOFILL_FIELD_LABEL_BILLING_ADDRESS), |
- EditorField::LengthHint::HINT_LONG, /* required= */ true, |
- EditorField::ControlType::CUSTOMFIELD}}; |
+ EditorField::LengthHint::HINT_SHORT, /* required= */ true, |
+ EditorField::ControlType::COMBOBOX}}; |
} |
base::string16 CreditCardEditorViewController::GetInitialValueForType( |
autofill::ServerFieldType type) { |
- if (!credit_card_to_edit_) |
+ if (!credit_card_to_edit_ || type == kBillingAddressType) |
return base::string16(); |
return credit_card_to_edit_->GetInfo(autofill::AutofillType(type), |
@@ -283,25 +232,26 @@ bool CreditCardEditorViewController::ValidateModelAndSave() { |
} |
for (const auto& field : comboboxes()) { |
// ValidatingCombobox* is the key, EditorField is the value. |
- DCHECK_EQ(autofill::CREDIT_CARD, |
- autofill::AutofillType(field.second.type).group()); |
ValidatingCombobox* combobox = field.first; |
if (combobox->invalid()) |
return false; |
- credit_card.SetInfo(autofill::AutofillType(field.second.type), |
- combobox->GetTextForRow(combobox->selected_index()), |
- locale); |
+ if (field.second.type == kBillingAddressType) { |
+ views::Combobox* address_combobox = static_cast<views::Combobox*>( |
+ dialog()->GetViewByID(kBillingAddressType)); |
+ autofill::AddressComboboxModel* model = |
+ static_cast<autofill::AddressComboboxModel*>( |
+ address_combobox->model()); |
+ |
+ credit_card.set_billing_address_id( |
+ model->GetItemIdentifierAt(address_combobox->selected_index())); |
+ } else { |
+ credit_card.SetInfo(autofill::AutofillType(field.second.type), |
+ combobox->GetTextForRow(combobox->selected_index()), |
+ locale); |
+ } |
} |
- views::Combobox* address_combobox = |
- static_cast<views::Combobox*>(dialog()->GetViewByID(kBillingAddressType)); |
- autofill::AddressComboboxModel* model = |
- static_cast<autofill::AddressComboboxModel*>(address_combobox->model()); |
- |
- credit_card.set_billing_address_id( |
- model->GetItemIdentifierAt(address_combobox->selected_index())); |
- |
// TODO(crbug.com/711365): Display global error message. |
if (autofill::GetCompletionStatusForCard( |
credit_card, locale, |
@@ -327,6 +277,10 @@ bool CreditCardEditorViewController::ValidateModelAndSave() { |
locale); |
} |
for (const auto& field : comboboxes()) { |
+ // The billing address is transfered above. |
+ if (field.second.type == kBillingAddressType) |
+ continue; |
+ |
credit_card_to_edit_->SetInfo( |
autofill::AutofillType(field.second.type), |
credit_card.GetInfo(autofill::AutofillType(field.second.type), |
@@ -366,6 +320,14 @@ CreditCardEditorViewController::GetComboboxModelForType( |
case autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR: |
return base::MakeUnique<ui::SimpleComboboxModel>( |
GetExpirationYearItems()); |
+ case kBillingAddressType: |
+ // The combobox filled with potential billing addresses. It's fine to pass |
+ // empty string as the default selected guid if there are no cards being |
+ // edited. |
+ return base::MakeUnique<autofill::AddressComboboxModel>( |
+ *state()->GetPersonalDataManager(), state()->GetApplicationLocale(), |
+ credit_card_to_edit_ ? credit_card_to_edit_->billing_address_id() |
+ : ""); |
default: |
NOTREACHED(); |
break; |