package br.com.concretesolutions.canarinho.watcher; import android.text.Editable; import android.text.InputFilter; import br.com.concretesolutions.canarinho.validator.Validador; import br.com.concretesolutions.canarinho.validator.ValidadorCEP; import br.com.concretesolutions.canarinho.watcher.evento.EventoDeValidacao; /** * {@link android.text.TextWatcher} responsável por formatar e validar um {@link android.widget.EditText} para CEPs. * Para usar este componente basta criar uma instância e chamar * {@link android.widget.EditText#addTextChangedListener(android.text.TextWatcher)}. */ public final class CEPTextWatcher extends BaseCanarinhoTextWatcher { private static final char[] CEP_DIGITOS = "#####-###".toCharArray(); private static final InputFilter[] FILTRO_OITO_DIGITOS = new InputFilter[]{ new InputFilter.LengthFilter(CEP_DIGITOS.length)}; private final Validador validador = ValidadorCEP.getInstance(); private final Validador.ResultadoParcial resultadoParcial = new Validador.ResultadoParcial(); /** * Inicializa o validador com um callback de erros. * * @param callbackErros Instância que será chamada quando houverem erros. */ public CEPTextWatcher(EventoDeValidacao callbackErros) { setEventoDeValidacao(callbackErros); } @Override public void afterTextChanged(Editable s) { if (isMudancaInterna()) { return; } s.setFilters(FILTRO_OITO_DIGITOS); final StringBuilder builder = trataAdicaoRemocaoDeCaracter(s, CEP_DIGITOS); atualizaTexto(validador, resultadoParcial, s, builder); } }