Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.mundodescuento.model.response.form;
- import android.support.annotation.NonNull;
- import android.support.design.widget.TextInputLayout;
- import android.util.Patterns;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ArrayAdapter;
- import android.widget.CheckBox;
- import android.widget.EditText;
- import android.widget.Spinner;
- import android.widget.TextView;
- import com.mundodescuento.R;
- import java.util.LinkedList;
- /**
- * Created by Pato on 8/10/16.
- */
- public abstract class LeadFormFieldType {
- private final boolean isRequired;
- private final String label;
- public LeadFormFieldType(FormResponseDataTemplatefieldsLeadfield field) {
- isRequired = field.isRequired();
- label = field.getLabel();
- }
- // public static LeadFormFieldType buildFromType(LeadFormField field) {
- // String type = field.getBasicType();
- // return buildFromBasicType(field, type);
- // }
- @NonNull
- protected static LeadFormFieldType buildFromBasicType(FormResponseDataTemplatefieldsLeadfield field, String type) {
- switch (type.toLowerCase()) {
- case "number":
- return new NumberField(field);
- case "bool":
- case "boolean":
- return new BooleanField(field);
- case "email"://El pola puede ser la verga
- case "mail":
- return new EmailField(field);
- case "phone":
- return new PhoneField(field);
- case "list":
- return new ListField(field);
- case "string":
- default:
- return new StringField(field);
- }
- }
- public boolean hasError() {
- return isRequired() && !isValid();
- }
- public String requiredExtra() {
- return !isRequired() ? " (Opcional)" : "";
- }
- protected String getLabel() {
- return label;
- }
- protected boolean isRequired() {
- return true;
- //return isRequired;
- }
- public abstract View inflateView(LayoutInflater inflater, ViewGroup parent);
- public abstract String getInsertedValue();
- public abstract boolean isValid();
- public abstract void showValidationError();
- public abstract void hideError();
- public static LeadFormFieldType buildFromType(FormResponseDataTemplatefieldsLeadfield formResponseDataTemplatefieldsLeadfield) {
- return LeadFormFieldType.buildFromBasicType(formResponseDataTemplatefieldsLeadfield, formResponseDataTemplatefieldsLeadfield.getDataType());
- }
- public static class StringField extends LeadFormFieldType {
- private EditText et;
- public StringField(FormResponseDataTemplatefieldsLeadfield field) {
- super(field);
- }
- @Override
- public View inflateView(LayoutInflater inflater, ViewGroup parent) {
- View view = inflater.inflate(R.layout.layout_form_field_string, parent, false);
- et = (EditText) view.findViewById(R.id.etField);
- ((TextInputLayout) view.findViewById(R.id.tiLyt)).setHint(getLabel() + requiredExtra());
- return view;
- }
- @Override
- public String getInsertedValue() {
- return et.getText().toString();
- }
- @Override
- public boolean isValid() {
- return getInsertedValue().length() > 1;
- }
- @Override
- public void showValidationError() {
- et.setError("El valor ingresado no es valido");
- }
- @Override
- public void hideError() {
- et.setError(null);
- }
- }
- private static class NumberField extends LeadFormFieldType {
- private EditText et;
- public NumberField(FormResponseDataTemplatefieldsLeadfield field) {
- super(field);
- }
- @Override
- public View inflateView(LayoutInflater inflater, ViewGroup parent) {
- View view = inflater.inflate(R.layout.layout_form_field_number, parent, false);
- et = (EditText) view.findViewById(R.id.etField);
- ((TextInputLayout) view.findViewById(R.id.tiLyt)).setHint(getLabel() + requiredExtra());
- return view;
- }
- @Override
- public String getInsertedValue() {
- return et.getText().toString();
- }
- @Override
- public boolean isValid() {
- return getInsertedValue().length() > 1;
- }
- @Override
- public void showValidationError() {
- et.setError("El valor ingresado no es valido");
- }
- @Override
- public void hideError() {
- et.setError(null);
- }
- }
- private static class PhoneField extends NumberField {
- public PhoneField(FormResponseDataTemplatefieldsLeadfield field) {
- super(field);
- }
- @Override
- public boolean isValid() {
- return getInsertedValue().length() > 7;
- }
- }
- private static class EmailField extends StringField {
- public EmailField(FormResponseDataTemplatefieldsLeadfield field) {
- super(field);
- }
- @Override
- public boolean isValid() {
- return Patterns.EMAIL_ADDRESS.matcher(getInsertedValue()).matches();
- }
- }
- private static class BooleanField extends LeadFormFieldType {
- private CheckBox checkbox;
- public BooleanField(FormResponseDataTemplatefieldsLeadfield field) {
- super(field);
- }
- @Override
- public View inflateView(LayoutInflater inflater, ViewGroup parent) {
- View view = inflater.inflate(R.layout.layout_form_field_boolean, parent, false);
- checkbox = (CheckBox) view.findViewById(R.id.chkField);
- TextView textField = (TextView) view.findViewById(R.id.textField);
- textField.setText(getLabel() + requiredExtra());
- textField.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- checkbox.toggle();
- }
- });
- return view;
- }
- @Override
- public String getInsertedValue() {
- return String.valueOf(checkbox.isChecked());
- }
- @Override
- public boolean isValid() {
- return true;
- }
- @Override
- public void showValidationError() {
- }
- @Override
- public void hideError() {
- }
- }
- private static class ListField extends LeadFormFieldType {
- private final LinkedList<String> labels;
- private final LinkedList<String> keys;
- private Spinner spinner;
- private TextView textField;
- public ListField(FormResponseDataTemplatefieldsLeadfield field) {
- super(field);
- labels = new LinkedList<>();
- keys = new LinkedList<>();
- keys.add(null);
- labels.add("Elegí una opción");
- for (LeadFormField.FieldOption option : field.getOptions()) {
- keys.add(option.getKey());
- labels.add(option.getValue());
- }
- }
- @Override
- public View inflateView(LayoutInflater inflater, ViewGroup parent) {
- View view = inflater.inflate(R.layout.layout_form_field_list, parent, false);
- textField = (TextView) view.findViewById(R.id.textField);
- textField.setText(getLabel() + requiredExtra());
- spinner = (Spinner) view.findViewById(R.id.spinnerField);
- ArrayAdapter<String> adapter = new ArrayAdapter<>(inflater.getContext(), android.R.layout.simple_spinner_item, labels);
- spinner.setAdapter(adapter);
- return view;
- }
- @Override
- public String getInsertedValue() {
- return keys.get(spinner.getSelectedItemPosition());
- }
- @Override
- public boolean isValid() {
- return getInsertedValue() != null;
- }
- @Override
- public void showValidationError() {
- textField.setError("Elegí un elemento de la lista");
- }
- @Override
- public void hideError() {
- textField.setError(null);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement