#ifndef COMPONENTS_ANDROID_AUTOFILL_BROWSER_FORM_FIELD_DATA_ANDROID_H_
#define COMPONENTS_ANDROID_AUTOFILL_BROWSER_FORM_FIELD_DATA_ANDROID_H_
#include <memory>
#include <string>
#include <string_view>
#include <vector>
#include "base/android/scoped_java_ref.h"
#include "base/memory/raw_ref.h"
#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/common/form_field_data.h"
#include "components/autofill/core/common/unique_ids.h"
namespace autofill {
class FormFieldDataAndroidBridge;
class FormFieldDataAndroid {
public:
struct FieldTypes {
FieldTypes();
explicit FieldTypes(FieldType type);
FieldTypes(FieldType heuristic_type,
FieldType server_type,
std::string_view overall_type,
std::vector<FieldType> server_predictions);
FieldTypes(FieldTypes&&);
FieldTypes& operator=(FieldTypes&&);
~FieldTypes();
bool operator==(FieldType type) const;
FieldType heuristic_type = UNKNOWN_TYPE;
FieldType server_type = UNKNOWN_TYPE;
std::string overall_type;
std::vector<FieldType> server_predictions;
};
explicit FormFieldDataAndroid(FormFieldData* field);
FormFieldDataAndroid(const FormFieldDataAndroid&) = delete;
FormFieldDataAndroid& operator=(const FormFieldDataAndroid&) = delete;
virtual ~FormFieldDataAndroid();
base::android::ScopedJavaLocalRef<jobject> GetJavaPeer();
void UpdateFromJava();
void OnFormFieldDidChange(std::u16string_view value);
void OnFormFieldVisibilityDidChange(const FormFieldData& field);
bool SimilarFieldAs(const FormFieldData& field) const;
void UpdateFieldTypes(FieldTypes field_types);
const FieldTypes& field_types() const { return field_types_; }
FieldGlobalId global_id() const { return field_.get().global_id(); }
private:
std::unique_ptr<FormFieldDataAndroidBridge> bridge_;
FieldTypes field_types_;
const raw_ref<FormFieldData> field_;
};
}
#endif