package br.com.concretesolutions.canarinho.sample.ui.model; import android.content.Context; import android.support.design.widget.TextInputLayout; import android.support.v4.app.FragmentActivity; import android.support.v7.app.AlertDialog; import android.text.TextWatcher; import br.com.concretesolutions.canarinho.sample.ui.fragment.BaseWatcherFragment; import br.com.concretesolutions.canarinho.sample.ui.fragment.CanarinhoValorMonetarioWatcherFragment; import br.com.concretesolutions.canarinho.sample.ui.fragment.WatcherFragment; import br.com.concretesolutions.canarinho.validator.Validador; import br.com.concretesolutions.canarinho.watcher.BoletoBancarioTextWatcher; import br.com.concretesolutions.canarinho.watcher.CEPTextWatcher; import br.com.concretesolutions.canarinho.watcher.CPFCNPJTextWatcher; import br.com.concretesolutions.canarinho.watcher.MascaraNumericaTextWatcher; import br.com.concretesolutions.canarinho.watcher.TelefoneTextWatcher; import br.com.concretesolutions.canarinho.watcher.evento.EventoDeValidacao; import br.com.concretesolutions.canarinho.watcher.evento.EventoDeValidacaoDeBoleto; /** */ public enum Watchers { BOLETO_BANCARIO("Boleto Bancário", "Digite um boleto válido") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new BoletoBancarioTextWatcher(new SampleEventoDeValidacao(context))); } }, BOLETO_BANCARIO_MSG_CUSTOM("Boleto Bancário com mensagem", "Digite um boleto válido") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new BoletoBancarioTextWatcher(new EventoDeValidacaoBoleto(context))); } }, CPF("CPF", "Digite um CPF válido") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new MascaraNumericaTextWatcher.Builder() .paraMascara("###.###.###-##") .comCallbackDeValidacao(new SampleEventoDeValidacao(context)) .comValidador(Validador.CPF) .build()); } }, CNPJ("CNPJ", "Digite um CNPJ válido") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new MascaraNumericaTextWatcher.Builder() .paraMascara("##.###.###/####-##") .comCallbackDeValidacao(new SampleEventoDeValidacao(context)) .comValidador(Validador.CNPJ) .build()); } }, TELEFONE("Telefone", "Digite um telefone válido") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new TelefoneTextWatcher(new SampleEventoDeValidacao(context))); } }, CPF_CNPJ("CPF e CNPJ", "Digite um CPF ou CNPJ válido") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new CPFCNPJTextWatcher(new SampleEventoDeValidacao(context))); } }, CEP("CEP", "Digite um CEP válido") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new CEPTextWatcher(new SampleEventoDeValidacao(context))); } }, MASCARA_GENERICA("Máscara genérica", "5 números") { @Override public WatcherFragment buildFragment(Context context) { return WatcherFragment.newInstance(this, new MascaraNumericaTextWatcher("#-#-#-#-#")); } }, VALOR_MONETARIO("Valor monetário", "Digite um valor monetário") { @Override public CanarinhoValorMonetarioWatcherFragment buildFragment(Context context) { return new CanarinhoValorMonetarioWatcherFragment(); } }; private final String title; private final String hint; Watchers(String title, String hint) { this.hint = hint; this.title = title; } public String getTitle() { return title; } public String getHint() { return hint; } public abstract BaseWatcherFragment buildFragment(Context context); public static class SampleEventoDeValidacao implements EventoDeValidacao { protected TextInputLayout textInputLayout; private Context context; public SampleEventoDeValidacao(Context context) { this.context = context; } @Override public void invalido(String valorAtual, String mensagem) { textInputLayout.setError(mensagem); } @Override public void parcialmenteValido(String valorAtual) { textInputLayout.setErrorEnabled(false); textInputLayout.setError(null); } @Override public void totalmenteValido(String valorAtual) { new AlertDialog.Builder(context) .setTitle("Campo válido!") .setMessage(valorAtual) .show(); } public void setTextInputLayout(TextInputLayout textInputLayout) { this.textInputLayout = textInputLayout; } } public static class EventoDeValidacaoBoleto extends SampleEventoDeValidacao implements EventoDeValidacaoDeBoleto { public EventoDeValidacaoBoleto(Context context) { super(context); } @Override public void invalido(String valorAtual, int blocoInvalido) { if (blocoInvalido == 1) textInputLayout.setError("Primeira mensagem"); else if (blocoInvalido == 2) textInputLayout.setError("Segunda mensagem"); else if (blocoInvalido == 3) textInputLayout.setError("Terceira mensagem"); else if (blocoInvalido == 4) textInputLayout.setError("Quarta mensagem"); } } }