| Index: chrome/browser/autofill/auxiliary_profile_impl_android.cc
|
| diff --git a/chrome/browser/autofill/auxiliary_profile_impl_android.cc b/chrome/browser/autofill/auxiliary_profile_impl_android.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ba2ac601d38f788ee8eaf807434cad835bf9a36e
|
| --- /dev/null
|
| +++ b/chrome/browser/autofill/auxiliary_profile_impl_android.cc
|
| @@ -0,0 +1,118 @@
|
| +// Copyright (c) 2013 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.
|
| +
|
| +// Populates default autofill profile from user's own Android contact.
|
| +#include <vector>
|
| +#include "base/guid.h"
|
| +#include "base/logging.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/scoped_vector.h"
|
| +#include "base/string16.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/autofill/auxiliary_profile_impl_android.h"
|
| +#include "chrome/browser/autofill/auxiliary_profile_loader_android.h"
|
| +#include "chrome/browser/autofill/phone_number.h"
|
| +
|
| +/*
|
| + * Generates the autofill profile by accessing the Android
|
| + * ContactsContract.Profile API through PersonalAutofillPopulator via JNI.
|
| + * The generated profile corresponds to the user's "ME" contact in the
|
| + * "People" app. The caller passes a vector of profiles into the constructor
|
| + * then initiates a fetch using |GetContactsProfile()| method. This clears
|
| + * any existing addresses.
|
| + */
|
| +
|
| +static const char kAndroidMeContactA[] = "9A9E1C06-7A3B-48FA-AA4F-135CA6FC25D9";
|
| +
|
| +void AuxiliaryProfilesImpl::GetContactsProfile() {
|
| + profiles_.clear();
|
| +
|
| + scoped_ptr<AutofillProfile> profile(new AutofillProfile(kAndroidMeContactA));
|
| + DCHECK(base::IsValidGUID(profile->guid()));
|
| + LoadName(profile.get());
|
| + LoadEmailAddress(profile.get());
|
| + LoadPhoneNumbers(profile.get());
|
| +
|
| + /*
|
| + * Android user's profile contact does not prase its address
|
| + * into constituent parts. Instead we just get a long string blob.
|
| + * Disable address population until we implement a way to parse the
|
| + * data.
|
| + * LoadAddress(profile.get());
|
| + */
|
| +
|
| + profiles_.push_back(profile.release());
|
| +}
|
| +/*
|
| + * Takes misc. address information strings from Android API and collapses
|
| + * into single string for "address line 2"
|
| + */
|
| +
|
| +string16 AuxiliaryProfilesImpl::CollapseAddress(string16 pobox,
|
| + string16 neighborhood) {
|
| + std::vector<string16> accVector;
|
| + if (!pobox.empty()) {
|
| + accVector.push_back(pobox);
|
| + }
|
| + if (!neighborhood.empty()) {
|
| + accVector.push_back(neighborhood);
|
| + }
|
| +
|
| + if (accVector.empty()) {
|
| + return string16();
|
| + } else {
|
| + string16 acc;
|
| + string16 delimeter = ASCIIToUTF16(", ");
|
| + for (std::vector<string16>::size_type i = 0; i < accVector.size() - 1; i++){
|
| + acc += accVector[i] + delimeter;
|
| + }
|
| + acc += accVector[accVector.size() - 1];
|
| + return acc;
|
| + }
|
| +}
|
| +
|
| +void AuxiliaryProfilesImpl::LoadAddress(AutofillProfile* profile) {
|
| + string16 street = profileLoader_.GetStreet();
|
| + string16 pobox = profileLoader_.GetPobox();
|
| + string16 neighborhood = profileLoader_.GetNeighborhood();
|
| + string16 city = profileLoader_.GetCity();
|
| + string16 postalCode = profileLoader_.GetPostalCode();
|
| + string16 region = profileLoader_.GetRegion();
|
| + string16 country = profileLoader_.GetCountry();
|
| +
|
| + string16 street2 = CollapseAddress(pobox, neighborhood);
|
| +
|
| + profile->SetRawInfo(ADDRESS_HOME_LINE1, street);
|
| + profile->SetRawInfo(ADDRESS_HOME_LINE2, street2);
|
| + profile->SetRawInfo(ADDRESS_HOME_CITY, city);
|
| + profile->SetRawInfo(ADDRESS_HOME_STATE, region);
|
| + profile->SetRawInfo(ADDRESS_HOME_ZIP, postalCode);
|
| + profile->SetRawInfo(ADDRESS_HOME_COUNTRY, country);
|
| +}
|
| +
|
| +void AuxiliaryProfilesImpl::LoadName(AutofillProfile* profile) {
|
| + string16 firstName = profileLoader_.GetFirstName();
|
| + string16 middleName = profileLoader_.GetMiddleName();
|
| + string16 lastName = profileLoader_.GetLastName();
|
| +
|
| + profile->SetRawInfo(NAME_FIRST, firstName);
|
| + profile->SetRawInfo(NAME_LAST, lastName);
|
| + profile->SetRawInfo(NAME_MIDDLE, middleName);
|
| +
|
| +/* Trips NOTREACHED assertion in |NameInfo| due
|
| + * to absense of NAME_SUFFIX case handler
|
| + * string16 suffix = profileLoader_.GetSuffix();
|
| + * profile->SetRawInfo(NAME_SUFFIX, suffix);
|
| +*/
|
| +}
|
| +
|
| +void AuxiliaryProfilesImpl::LoadEmailAddress(AutofillProfile* profile) {
|
| + std::vector<string16> emailAddressVector = profileLoader_.GetEmailAddresses();
|
| + profile->SetRawMultiInfo(EMAIL_ADDRESS, emailAddressVector);
|
| +}
|
| +
|
| +void AuxiliaryProfilesImpl::LoadPhoneNumbers(AutofillProfile* profile) {
|
| + std::vector<string16> phoneNumbersVector = profileLoader_.GetPhoneNumbers();
|
| + profile->SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, phoneNumbersVector);
|
| +}
|
|
|