1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/autofill/core/browser/android/auxiliary_profile_loader_android.h" 6 7 #include <vector> 8 9 #include "base/android/jni_android.h" 10 #include "base/android/jni_array.h" 11 #include "base/android/jni_string.h" 12 #include "jni/PersonalAutofillPopulator_jni.h" 13 14 #define JAVA_METHOD(__jmethod__) Java_PersonalAutofillPopulator_##__jmethod__( \ 15 env_, \ 16 populator_.obj()) 17 18 namespace { 19 20 base::string16 SafeJavaStringToUTF16( 21 const ScopedJavaLocalRef<jstring>& jstring) { 22 if (jstring.is_null()) 23 return base::string16(); 24 25 return ConvertJavaStringToUTF16(jstring); 26 } 27 28 void SafeJavaStringArrayToStringVector( 29 const ScopedJavaLocalRef<jobjectArray>& jarray, 30 JNIEnv* env, 31 std::vector<base::string16>* string_vector) { 32 if (!jarray.is_null()) { 33 base::android::AppendJavaStringArrayToStringVector(env, 34 jarray.obj(), 35 string_vector); 36 } 37 } 38 39 } // namespace 40 41 namespace autofill { 42 43 bool RegisterAuxiliaryProfileLoader(JNIEnv* env) { 44 return RegisterNativesImpl(env); 45 } 46 47 AuxiliaryProfileLoaderAndroid::AuxiliaryProfileLoaderAndroid() {} 48 49 AuxiliaryProfileLoaderAndroid::~AuxiliaryProfileLoaderAndroid() {} 50 51 void AuxiliaryProfileLoaderAndroid::Init(JNIEnv* env, const jobject& context) { 52 env_ = env; 53 populator_ = Java_PersonalAutofillPopulator_create(env_, context); 54 } 55 56 bool AuxiliaryProfileLoaderAndroid::GetHasPermissions() const { 57 return (bool)JAVA_METHOD(getHasPermissions); 58 } 59 60 // Address info 61 base::string16 AuxiliaryProfileLoaderAndroid::GetStreet() const { 62 return SafeJavaStringToUTF16(JAVA_METHOD(getStreet)); 63 } 64 65 base::string16 AuxiliaryProfileLoaderAndroid::GetPostOfficeBox() const { 66 return SafeJavaStringToUTF16(JAVA_METHOD(getPobox)); 67 } 68 69 base::string16 AuxiliaryProfileLoaderAndroid::GetNeighborhood() const { 70 return SafeJavaStringToUTF16(JAVA_METHOD(getNeighborhood)); 71 } 72 73 base::string16 AuxiliaryProfileLoaderAndroid::GetRegion() const { 74 return SafeJavaStringToUTF16(JAVA_METHOD(getRegion)); 75 } 76 77 base::string16 AuxiliaryProfileLoaderAndroid::GetCity() const { 78 return SafeJavaStringToUTF16(JAVA_METHOD(getCity)); 79 } 80 81 base::string16 AuxiliaryProfileLoaderAndroid::GetPostalCode() const { 82 return SafeJavaStringToUTF16(JAVA_METHOD(getPostalCode)); 83 } 84 85 base::string16 AuxiliaryProfileLoaderAndroid::GetCountry() const { 86 return SafeJavaStringToUTF16(JAVA_METHOD(getCountry)); 87 } 88 89 // Name info 90 base::string16 AuxiliaryProfileLoaderAndroid::GetFirstName() const { 91 return SafeJavaStringToUTF16(JAVA_METHOD(getFirstName)); 92 } 93 94 base::string16 AuxiliaryProfileLoaderAndroid::GetMiddleName() const { 95 return SafeJavaStringToUTF16(JAVA_METHOD(getMiddleName)); 96 } 97 98 base::string16 AuxiliaryProfileLoaderAndroid::GetLastName() const { 99 return SafeJavaStringToUTF16(JAVA_METHOD(getLastName)); 100 } 101 102 base::string16 AuxiliaryProfileLoaderAndroid::GetSuffix() const { 103 return SafeJavaStringToUTF16(JAVA_METHOD(getSuffix)); 104 } 105 106 // Email info 107 void AuxiliaryProfileLoaderAndroid::GetEmailAddresses( 108 std::vector<base::string16>* email_addresses) const { 109 SafeJavaStringArrayToStringVector(JAVA_METHOD(getEmailAddresses), 110 env_, 111 email_addresses); 112 } 113 114 // Phone info 115 void AuxiliaryProfileLoaderAndroid::GetPhoneNumbers( 116 std::vector<base::string16>* phone_numbers) const { 117 SafeJavaStringArrayToStringVector(JAVA_METHOD(getPhoneNumbers), 118 env_, 119 phone_numbers); 120 } 121 122 } // namespace 123