| Index: chrome/browser/ui/views/payments/editor_view_controller.cc
|
| diff --git a/chrome/browser/ui/views/payments/editor_view_controller.cc b/chrome/browser/ui/views/payments/editor_view_controller.cc
|
| index 64c2c4b42a64c02df2c7162ceb926187134408e0..809aaaa58f8ed7acc82da6a99b0c78c9f36215f9 100644
|
| --- a/chrome/browser/ui/views/payments/editor_view_controller.cc
|
| +++ b/chrome/browser/ui/views/payments/editor_view_controller.cc
|
| @@ -45,8 +45,9 @@ enum class EditorViewControllerTags : int {
|
| SAVE_BUTTON = kFirstTagValue,
|
| };
|
|
|
| -std::unique_ptr<views::View> CreateErrorLabelView(const base::string16& error,
|
| - const EditorField& field) {
|
| +std::unique_ptr<views::View> CreateErrorLabelView(
|
| + const base::string16& error,
|
| + autofill::ServerFieldType type) {
|
| std::unique_ptr<views::View> view = base::MakeUnique<views::View>();
|
|
|
| std::unique_ptr<views::BoxLayout> layout =
|
| @@ -62,7 +63,7 @@ std::unique_ptr<views::View> CreateErrorLabelView(const base::string16& error,
|
| std::unique_ptr<views::Label> error_label =
|
| base::MakeUnique<views::Label>(error);
|
| error_label->set_id(static_cast<int>(DialogViewID::ERROR_LABEL_OFFSET) +
|
| - field.type);
|
| + type);
|
| error_label->SetFontList(
|
| error_label->GetDefaultFontList().DeriveWithSizeDelta(-1));
|
| error_label->SetEnabledColor(error_label->GetNativeTheme()->GetSystemColor(
|
| @@ -86,26 +87,33 @@ EditorViewController::EditorViewController(
|
| EditorViewController::~EditorViewController() {}
|
|
|
| void EditorViewController::DisplayErrorMessageForField(
|
| - const EditorField& field,
|
| + autofill::ServerFieldType type,
|
| const base::string16& error_message) {
|
| - const auto& label_view_it = error_labels_.find(field);
|
| + const auto& label_view_it = error_labels_.find(type);
|
| DCHECK(label_view_it != error_labels_.end());
|
|
|
| label_view_it->second->RemoveAllChildViews(/*delete_children=*/true);
|
| if (!error_message.empty()) {
|
| label_view_it->second->AddChildView(
|
| - CreateErrorLabelView(error_message, field).release());
|
| + CreateErrorLabelView(error_message, type).release());
|
| }
|
| RelayoutPane();
|
| }
|
|
|
| +// static
|
| +int EditorViewController::GetInputFieldViewId(autofill::ServerFieldType type) {
|
| + return static_cast<int>(DialogViewID::INPUT_FIELD_TYPE_OFFSET) +
|
| + static_cast<int>(type);
|
| +}
|
| +
|
| std::unique_ptr<views::View> EditorViewController::CreateHeaderView() {
|
| return nullptr;
|
| }
|
|
|
| std::unique_ptr<views::View> EditorViewController::CreateCustomFieldView(
|
| autofill::ServerFieldType type,
|
| - views::View** focusable_field) {
|
| + views::View** focusable_field,
|
| + bool* valid) {
|
| return nullptr;
|
| }
|
|
|
| @@ -174,6 +182,21 @@ views::View* EditorViewController::GetFirstFocusedView() {
|
| return PaymentRequestSheetController::GetFirstFocusedView();
|
| }
|
|
|
| +std::unique_ptr<ValidatingCombobox>
|
| +EditorViewController::CreateComboboxForField(const EditorField& field) {
|
| + std::unique_ptr<ValidatingCombobox> combobox =
|
| + base::MakeUnique<ValidatingCombobox>(GetComboboxModelForType(field.type),
|
| + CreateValidationDelegate(field));
|
| + base::string16 initial_value = GetInitialValueForType(field.type);
|
| + if (!initial_value.empty())
|
| + combobox->SelectValue(initial_value);
|
| + // Using autofill field type as a view ID.
|
| + combobox->set_id(GetInputFieldViewId(field.type));
|
| + combobox->set_listener(this);
|
| + comboboxes_.insert(std::make_pair(combobox.get(), field));
|
| + return combobox;
|
| +}
|
| +
|
| void EditorViewController::ContentsChanged(views::Textfield* sender,
|
| const base::string16& new_contents) {
|
| static_cast<ValidatingTextfield*>(sender)->OnContentsChanged();
|
| @@ -317,7 +340,6 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout,
|
| layout->AddView(label.release());
|
|
|
| views::View* focusable_field = nullptr;
|
| -
|
| constexpr int kInputFieldHeight = 28;
|
| if (field.control_type == EditorField::ControlType::TEXTFIELD ||
|
| field.control_type == EditorField::ControlType::TEXTFIELD_NUMBER) {
|
| @@ -328,7 +350,7 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout,
|
| text_field->SetTextInputType(ui::TextInputType::TEXT_INPUT_TYPE_NUMBER);
|
| text_field->set_controller(this);
|
| // Using autofill field type as a view ID (for testing).
|
| - text_field->set_id(static_cast<int>(field.type));
|
| + text_field->set_id(GetInputFieldViewId(field.type));
|
| text_fields_.insert(std::make_pair(text_field, field));
|
| focusable_field = text_field;
|
| *valid = text_field->IsValid();
|
| @@ -337,29 +359,24 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout,
|
| layout->AddView(text_field, 1, 1, views::GridLayout::FILL,
|
| views::GridLayout::FILL, 0, kInputFieldHeight);
|
| } else if (field.control_type == EditorField::ControlType::COMBOBOX) {
|
| - ValidatingCombobox* combobox = new ValidatingCombobox(
|
| - GetComboboxModelForType(field.type), CreateValidationDelegate(field));
|
| - base::string16 initial_value = GetInitialValueForType(field.type);
|
| - if (!initial_value.empty())
|
| - combobox->SelectValue(initial_value);
|
| - // Using autofill field type as a view ID.
|
| - combobox->set_id(static_cast<int>(field.type));
|
| - combobox->set_listener(this);
|
| - comboboxes_.insert(std::make_pair(combobox, field));
|
| - focusable_field = combobox;
|
| + std::unique_ptr<ValidatingCombobox> combobox =
|
| + CreateComboboxForField(field);
|
| +
|
| + focusable_field = combobox.get();
|
| *valid = combobox->IsValid();
|
|
|
| // |combobox| will now be owned by |row|.
|
| - layout->AddView(combobox, 1, 1, views::GridLayout::FILL,
|
| + layout->AddView(combobox.release(), 1, 1, views::GridLayout::FILL,
|
| views::GridLayout::FILL, 0, kInputFieldHeight);
|
| } else {
|
| // Custom field view will now be owned by |row|. And it must be valid since
|
| // the derived class specified a custom view for this field.
|
| - DCHECK(!focusable_field);
|
| std::unique_ptr<views::View> field_view =
|
| - CreateCustomFieldView(field.type, &focusable_field);
|
| + CreateCustomFieldView(field.type, &focusable_field, valid);
|
| DCHECK(field_view);
|
| - layout->AddView(field_view.release());
|
| +
|
| + layout->AddView(field_view.release(), 1, 1, views::GridLayout::FILL,
|
| + views::GridLayout::FILL, 0, kInputFieldHeight);
|
| }
|
|
|
| // If an extra view needs to go alongside the input field view, add it to the
|
| @@ -373,7 +390,7 @@ views::View* EditorViewController::CreateInputField(views::GridLayout* layout,
|
| std::unique_ptr<views::View> error_label_view =
|
| base::MakeUnique<views::View>();
|
| error_label_view->SetLayoutManager(new views::FillLayout);
|
| - error_labels_[field] = error_label_view.get();
|
| + error_labels_[field.type] = error_label_view.get();
|
| layout->AddView(error_label_view.release());
|
|
|
| // Bottom padding for the row.
|
|
|