blob: 977f8ad735b1a673dcda385844a53c5353d1fa08 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/payments/core/strings_util.h"
#include <vector>
#include "base/logging.h"
#include "base/stl_util.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/field_types.h"
#include "components/strings/grit/components_strings.h"
#include "ui/base/l10n/l10n_util.h"
namespace payments {
namespace {
constexpr size_t kNone = 0;
constexpr size_t kCredit = 1;
constexpr size_t kDebit = 2;
constexpr size_t kPrepaid = 4;
size_t getCardTypeBitmask(
const std::set<autofill::CreditCard::CardType>& types) {
return (types.find(autofill::CreditCard::CARD_TYPE_CREDIT) != types.end()
? kCredit
: kNone) |
(types.find(autofill::CreditCard::CARD_TYPE_DEBIT) != types.end()
? kDebit
: kNone) |
(types.find(autofill::CreditCard::CARD_TYPE_PREPAID) != types.end()
? kPrepaid
: kNone);
}
} // namespace
base::string16 GetShippingAddressLabelFormAutofillProfile(
const autofill::AutofillProfile& profile,
const std::string& locale) {
// Name, phone number, and country are not included in the shipping address
// label.
static constexpr autofill::ServerFieldType kLabelFields[] = {
autofill::COMPANY_NAME,
autofill::ADDRESS_HOME_STREET_ADDRESS,
autofill::ADDRESS_HOME_DEPENDENT_LOCALITY,
autofill::ADDRESS_HOME_CITY,
autofill::ADDRESS_HOME_STATE,
autofill::ADDRESS_HOME_ZIP,
autofill::ADDRESS_HOME_SORTING_CODE,
};
return profile.ConstructInferredLabel(kLabelFields, base::size(kLabelFields),
base::size(kLabelFields), locale);
}
base::string16 GetBillingAddressLabelFromAutofillProfile(
const autofill::AutofillProfile& profile,
const std::string& locale) {
// Name, company, phone number, and country are not included in the billing
// address label.
static constexpr autofill::ServerFieldType kLabelFields[] = {
autofill::ADDRESS_HOME_STREET_ADDRESS,
autofill::ADDRESS_HOME_DEPENDENT_LOCALITY,
autofill::ADDRESS_HOME_CITY,
autofill::ADDRESS_HOME_STATE,
autofill::ADDRESS_HOME_ZIP,
autofill::ADDRESS_HOME_SORTING_CODE,
};
return profile.ConstructInferredLabel(kLabelFields, base::size(kLabelFields),
base::size(kLabelFields), locale);
}
base::string16 GetShippingAddressSelectorInfoMessage(
PaymentShippingType shipping_type) {
switch (shipping_type) {
case payments::PaymentShippingType::DELIVERY:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_SELECT_DELIVERY_ADDRESS_FOR_DELIVERY_METHODS);
case payments::PaymentShippingType::PICKUP:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_SELECT_PICKUP_ADDRESS_FOR_PICKUP_METHODS);
case payments::PaymentShippingType::SHIPPING:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_SELECT_SHIPPING_ADDRESS_FOR_SHIPPING_METHODS);
default:
NOTREACHED();
return base::string16();
}
}
base::string16 GetShippingAddressSectionString(
PaymentShippingType shipping_type) {
switch (shipping_type) {
case PaymentShippingType::DELIVERY:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_DELIVERY_ADDRESS_LABEL);
case PaymentShippingType::PICKUP:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_PICKUP_ADDRESS_LABEL);
case PaymentShippingType::SHIPPING:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_SHIPPING_ADDRESS_LABEL);
default:
NOTREACHED();
return base::string16();
}
}
#if defined(OS_IOS)
base::string16 GetChooseShippingAddressButtonLabel(
PaymentShippingType shipping_type) {
switch (shipping_type) {
case PaymentShippingType::DELIVERY:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_CHOOSE_DELIVERY_ADDRESS_LABEL);
case PaymentShippingType::PICKUP:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_CHOOSE_PICKUP_ADDRESS_LABEL);
case PaymentShippingType::SHIPPING:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_CHOOSE_SHIPPING_ADDRESS_LABEL);
default:
NOTREACHED();
return base::string16();
}
}
base::string16 GetAddShippingAddressButtonLabel(
PaymentShippingType shipping_type) {
switch (shipping_type) {
case PaymentShippingType::DELIVERY:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_ADD_DELIVERY_ADDRESS_LABEL);
case PaymentShippingType::PICKUP:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_ADD_PICKUP_ADDRESS_LABEL);
case PaymentShippingType::SHIPPING:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_ADD_SHIPPING_ADDRESS_LABEL);
default:
NOTREACHED();
return base::string16();
}
}
base::string16 GetChooseShippingOptionButtonLabel(
PaymentShippingType shipping_type) {
switch (shipping_type) {
case PaymentShippingType::DELIVERY:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_CHOOSE_DELIVERY_OPTION_LABEL);
case PaymentShippingType::PICKUP:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_CHOOSE_PICKUP_OPTION_LABEL);
case PaymentShippingType::SHIPPING:
return l10n_util::GetStringUTF16(
IDS_PAYMENTS_CHOOSE_SHIPPING_OPTION_LABEL);
default:
NOTREACHED();
return base::string16();
}
}
#endif // defined(OS_IOS)
base::string16 GetShippingOptionSectionString(
PaymentShippingType shipping_type) {
switch (shipping_type) {
case PaymentShippingType::DELIVERY:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_DELIVERY_OPTION_LABEL);
case PaymentShippingType::PICKUP:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_PICKUP_OPTION_LABEL);
case PaymentShippingType::SHIPPING:
return l10n_util::GetStringUTF16(IDS_PAYMENTS_SHIPPING_OPTION_LABEL);
default:
NOTREACHED();
return base::string16();
}
}
base::string16 GetAcceptedCardTypesText(
const std::set<autofill::CreditCard::CardType>& types) {
int string_ids[8];
string_ids[kNone] = IDS_PAYMENTS_ACCEPTED_CARDS_LABEL;
string_ids[kCredit | kDebit | kPrepaid] = IDS_PAYMENTS_ACCEPTED_CARDS_LABEL;
string_ids[kCredit] = IDS_PAYMENTS_ACCEPTED_CREDIT_CARDS_LABEL;
string_ids[kDebit] = IDS_PAYMENTS_ACCEPTED_DEBIT_CARDS_LABEL;
string_ids[kPrepaid] = IDS_PAYMENTS_ACCEPTED_PREPAID_CARDS_LABEL;
string_ids[kCredit | kDebit] = IDS_PAYMENTS_ACCEPTED_CREDIT_DEBIT_CARDS_LABEL;
string_ids[kCredit | kPrepaid] =
IDS_PAYMENTS_ACCEPTED_CREDIT_PREPAID_CARDS_LABEL;
string_ids[kDebit | kPrepaid] =
IDS_PAYMENTS_ACCEPTED_DEBIT_PREPAID_CARDS_LABEL;
return l10n_util::GetStringUTF16(string_ids[getCardTypeBitmask(types)]);
}
base::string16 GetCardTypesAreAcceptedText(
const std::set<autofill::CreditCard::CardType>& types) {
int string_ids[8];
string_ids[kNone] = 0;
string_ids[kCredit | kDebit | kPrepaid] = 0;
string_ids[kCredit] = IDS_PAYMENTS_CREDIT_CARDS_ARE_ACCEPTED_LABEL;
string_ids[kDebit] = IDS_PAYMENTS_DEBIT_CARDS_ARE_ACCEPTED_LABEL;
string_ids[kPrepaid] = IDS_PAYMENTS_PREPAID_CARDS_ARE_ACCEPTED_LABEL;
string_ids[kCredit | kDebit] =
IDS_PAYMENTS_CREDIT_DEBIT_CARDS_ARE_ACCEPTED_LABEL;
string_ids[kCredit | kPrepaid] =
IDS_PAYMENTS_CREDIT_PREPAID_CARDS_ARE_ACCEPTED_LABEL;
string_ids[kDebit | kPrepaid] =
IDS_PAYMENTS_DEBIT_PREPAID_CARDS_ARE_ACCEPTED_LABEL;
int string_id = string_ids[getCardTypeBitmask(types)];
return string_id == 0 ? base::string16()
: l10n_util::GetStringUTF16(string_id);
}
} // namespace payments