blob: c1e0837fa6adbe32c5e2b953b49da21514a44abf [file] [log] [blame]
// Copyright 2018 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 "chrome/browser/android/autofill_assistant/assistant_collect_user_data_delegate.h"
#include <memory>
#include <utility>
#include "base/android/jni_string.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantCollectUserDataNativeDelegate_jni.h"
#include "chrome/browser/android/autofill_assistant/ui_controller_android.h"
#include "chrome/browser/autofill/android/personal_data_manager_android.h"
#include "chrome/browser/autofill/personal_data_manager_factory.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "components/autofill/core/browser/autofill_data_util.h"
using base::android::AttachCurrentThread;
using base::android::JavaParamRef;
namespace {
// Converts a java string to native. Returns an empty string if input is null.
std::string SafeConvertJavaStringToNative(
JNIEnv* env,
const base::android::JavaParamRef<jstring>& jstring) {
std::string native_string;
if (jstring) {
base::android::ConvertJavaStringToUTF8(env, jstring, &native_string);
}
return native_string;
}
} // namespace
namespace autofill_assistant {
AssistantCollectUserDataDelegate::AssistantCollectUserDataDelegate(
UiControllerAndroid* ui_controller)
: ui_controller_(ui_controller) {
java_assistant_collect_user_data_delegate_ =
Java_AssistantCollectUserDataNativeDelegate_create(
AttachCurrentThread(), reinterpret_cast<intptr_t>(this));
}
AssistantCollectUserDataDelegate::~AssistantCollectUserDataDelegate() {
Java_AssistantCollectUserDataNativeDelegate_clearNativePtr(
AttachCurrentThread(), java_assistant_collect_user_data_delegate_);
}
void AssistantCollectUserDataDelegate::OnContactInfoChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jstring>& jpayer_name,
const base::android::JavaParamRef<jstring>& jpayer_phone,
const base::android::JavaParamRef<jstring>& jpayer_email) {
std::string name = SafeConvertJavaStringToNative(env, jpayer_name);
std::string phone = SafeConvertJavaStringToNative(env, jpayer_phone);
std::string email = SafeConvertJavaStringToNative(env, jpayer_email);
auto contact_profile = std::make_unique<autofill::AutofillProfile>();
contact_profile->SetRawInfo(autofill::ServerFieldType::NAME_FULL,
base::UTF8ToUTF16(name));
autofill::data_util::NameParts parts =
autofill::data_util::SplitName(base::UTF8ToUTF16(name));
contact_profile->SetRawInfo(autofill::ServerFieldType::NAME_FIRST,
parts.given);
contact_profile->SetRawInfo(autofill::ServerFieldType::NAME_MIDDLE,
parts.middle);
contact_profile->SetRawInfo(autofill::ServerFieldType::NAME_LAST,
parts.family);
contact_profile->SetRawInfo(autofill::ServerFieldType::EMAIL_ADDRESS,
base::UTF8ToUTF16(email));
contact_profile->SetRawInfo(
autofill::ServerFieldType::PHONE_HOME_WHOLE_NUMBER,
base::UTF8ToUTF16(phone));
ui_controller_->OnContactInfoChanged(std::move(contact_profile));
}
void AssistantCollectUserDataDelegate::OnShippingAddressChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jobject>& jaddress) {
if (!jaddress) {
ui_controller_->OnShippingAddressChanged(nullptr);
return;
}
auto shipping_address = std::make_unique<autofill::AutofillProfile>();
autofill::PersonalDataManagerAndroid::PopulateNativeProfileFromJava(
jaddress, env, shipping_address.get());
ui_controller_->OnShippingAddressChanged(std::move(shipping_address));
}
void AssistantCollectUserDataDelegate::OnCreditCardChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jobject>& jcard) {
if (!jcard) {
ui_controller_->OnCreditCardChanged(nullptr);
return;
}
auto card = std::make_unique<autofill::CreditCard>();
autofill::PersonalDataManagerAndroid::PopulateNativeCreditCardFromJava(
jcard, env, card.get());
ui_controller_->OnCreditCardChanged(std::move(card));
}
void AssistantCollectUserDataDelegate::OnTermsAndConditionsChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
jint state) {
ui_controller_->OnTermsAndConditionsChanged(
static_cast<TermsAndConditionsState>(state));
}
void AssistantCollectUserDataDelegate::OnTermsAndConditionsLinkClicked(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
jint link) {
ui_controller_->OnTermsAndConditionsLinkClicked(link);
}
void AssistantCollectUserDataDelegate::OnLoginChoiceChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jstring>& jidentifier) {
std::string identifier = SafeConvertJavaStringToNative(env, jidentifier);
ui_controller_->OnLoginChoiceChanged(identifier);
}
void AssistantCollectUserDataDelegate::OnDateTimeRangeStartChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
jint year,
jint month,
jint day,
jint hour,
jint minute,
jint second) {
ui_controller_->OnDateTimeRangeStartChanged(year, month, day, hour, minute,
second);
}
void AssistantCollectUserDataDelegate::OnDateTimeRangeEndChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
jint year,
jint month,
jint day,
jint hour,
jint minute,
jint second) {
ui_controller_->OnDateTimeRangeEndChanged(year, month, day, hour, minute,
second);
}
base::android::ScopedJavaGlobalRef<jobject>
AssistantCollectUserDataDelegate::GetJavaObject() {
return java_assistant_collect_user_data_delegate_;
}
} // namespace autofill_assistant