concretesolutions / canarinho

Utilitários Android para padrões Brasileiros
Apache License 2.0
178 stars 42 forks source link

br.com.concretesolutions.canarinho.watcher.BaseCanarinhoTextWatcher.trataRemocaoDeCaracter #13

Closed botanju closed 7 years ago

botanju commented 7 years ago

java.lang.ArrayIndexOutOfBoundsException: length=51; index=52 at br.com.concretesolutions.canarinho.watcher.BaseCanarinhoTextWatcher.trataRemocaoDeCaracter(BaseCanarinhoTextWatcher.java:139) at br.com.concretesolutions.canarinho.watcher.BaseCanarinhoTextWatcher.trataAdicaoRemocaoDeCaracter(BaseCanarinhoTextWatcher.java:109) at br.com.concretesolutions.canarinho.watcher.BoletoBancarioTextWatcher.afterTextChanged(BoletoBancarioTextWatcher.java:67) at android.widget.TextView.sendAfterTextChanged(TextView.java:8017) at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10178) at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1043) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:560) at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:224) at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:106) at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:51) at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:215) at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138) at android.widget.TextView.doKeyDown(TextView.java:6106) at android.widget.TextView.onKeyDown(TextView.java:5919) at android.view.KeyEvent.dispatch(KeyEvent.java:2654) at android.view.View.dispatchKeyEvent(View.java:9237) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:379) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395) at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727) at android.app.Activity.dispatchKeyEvent(Activity.java:2729) at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:543) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:53) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:315) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:53) at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4139) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4101) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3654) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3707) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3673) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3799) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3681) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3856) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3654) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3707) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3673) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3681) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3654) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5969) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5908) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5869) at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3446) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5443) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

davidtcdeveloper commented 7 years ago

Mesmo problema aqui, versão 1.1.0. Posso tentar reunir mais informações, se necessário.

cs-victor-nascimento commented 7 years ago

Se tiver mais informações para reproduzir agradeço @davidtcdeveloper :)

Me parece ser modificações em lote (e acho que houve um problema de publicação do fix quando migramos o repositório para o github da Concrete). Vou lançar uma versão com uma mini feature e algumas modificações, mas ainda não consegui reproduzir aqui local.

davidtcdeveloper commented 7 years ago

Eu também não consigo reproduzir o erro, tenho somente os reports que recebo do Crashlytics. Esta é a stack trace:

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=14; index=14
       at br.com.concretesolutions.canarinho.watcher.BaseCanarinhoTextWatcher.trataRemocaoDeCaracter(BaseCanarinhoTextWatcher.java:139)
       at br.com.concretesolutions.canarinho.watcher.BaseCanarinhoTextWatcher.trataAdicaoRemocaoDeCaracter(BaseCanarinhoTextWatcher.java:109)
       at br.com.concretesolutions.canarinho.watcher.CPFCNPJTextWatcher.afterTextChanged(CPFCNPJTextWatcher.java:51)
       at android.widget.TextView.sendAfterTextChanged(TextView.java:9303)
       at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:12051)
       at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1047)
       at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:564)
       at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225)
       at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:34)
  ...

Pelo stacktrace, acredito que seja alguma inconsistência neste trecho:

   // Caso haja mais de um caracter de formatação (da máscara) faz um loop
        // até chegar em um caracter que não seja de formatação
        while (builder.length() > 0 && mascara[builder.length() - 1] != '#') {
            builder.deleteCharAt(builder.length() - 1);
        }

Não recebi grande quantidade de relatórios, mas até o momento todos foram reportados à partir de dispositivos da Samsung com Android 6.0.1.

cs-victor-nascimento commented 7 years ago

@davidtcdeveloper Esse é realmente o bug de apagar em lote. Repare que nós lançamos uma versão 1.1.1 (pelo histórico de commits) que se perdeu aí no meio. Ela não está no bintray.

Para reproduzir, basta digitar em uma máscara e apagar em lote (seguro o apagar).

davidtcdeveloper commented 7 years ago

Beleza, entendi. Tem como pegar essa versão 1.1.1? Se disponibilizarem outra versão nova por favor avisem :)

cs-victor-nascimento commented 7 years ago

Vou publicar já já uma 1.2.0 para evitar qualquer problema!

Eu aviso aqui.

On Mon, Nov 28, 2016 at 3:42 PM, David Tiago Conceição < notifications@github.com> wrote:

Beleza, entendi. Tem como pegar essa versão 1.1.1? Se disponibilizarem outra versão nova por favor avisem :)

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/concretesolutions/canarinho/issues/13#issuecomment-263339757, or mute the thread https://github.com/notifications/unsubscribe-auth/AGuSAHKnTnhRX6x4bbZx3sWTU5DEWcM3ks5rCxJtgaJpZM4K7ndy .

-- Victor Oliveira Nascimento Concrete Solutions Senior Analyst/Developer victor.nascimento@concretesolutions.com.br http://www.concretesolutions.com.br Mobile: +55 11 9 8923-8061

Rio de Janeiro São Paulo Rua São José 90, sala 2121 Rua Sansão Alves dos Santos, 433 / 4º Andar Cep: 20010-020 Cep: 04571-923 Centro - Rio de Janeiro - Brasil Brooklin - São Paulo – Brasil Phone : +55 21 2240-2030 Phone: +55 11 4119 0449

cs-victor-nascimento commented 7 years ago

Lançada versão 1.2.0.

Deve sanar estes problemas :) Também incluí algumas configurações do watcher de valor financeiro e melhorei a documentação do mesmo no README.

Por favor, testem :) Fecharei este issue, mas se continuar aparencendo o problema, não hesitem em reabrí-lo.

davidtcdeveloper commented 7 years ago

Ótimo @cs-victor-nascimento Vamos atualizar aqui e avisamos em caso de outros problemas. Obrigado :+1: