mathew-kurian/TextJustify-Android

IndexOutOfBoundsException in Styled.drawUniformRun on 5.1

Opened this issue · 1 comments

@khalid-hussain asked me to help him with khalid-hussain/HisnulMuslim#35 - i looked into it and the reason there's an IndexOutOfBoundsException is that tmpstart and tmpend are wrong (they extend beyond the string's length (in his specific case, tmpstart is 327, tmpend is 337, and the length of the string is 331).

i (unfortunately) didn't have time to investigate the root cause, but according to @khalid-hussain, this only happens on 5.1. i was able to repro 100% on his app on a 5.1.0 emulator.

06-05 00:48:26.116  16045-16045/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.khalid.hisnulmuslim, PID: 16045
    java.lang.IndexOutOfBoundsException
            at android.view.GLES20Canvas.drawText(GLES20Canvas.java:888)
            at com.bluejamesbond.text.Styled.drawUniformRun(Styled.java:156)
            at com.bluejamesbond.text.Styled.drawDirectionalRun(Styled.java:319)
            at com.bluejamesbond.text.Styled.drawText(Styled.java:383)
            at com.bluejamesbond.text.SpannableDocumentLayout.onDraw(SpannableDocumentLayout.java:512)
            at com.bluejamesbond.text.IDocumentLayout.draw(IDocumentLayout.java:143)
            at com.bluejamesbond.text.DocumentView.drawLayout(DocumentView.java:184)
            at com.bluejamesbond.text.DocumentView.onDraw(DocumentView.java:620)
            at android.view.View.draw(View.java:15239)
            at android.widget.FrameLayout.draw(FrameLayout.java:598)
            at android.widget.ScrollView.draw(ScrollView.java:1689)
            at android.view.View.updateDisplayListIfDirty(View.java:14175)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.View.draw(View.java:14967)
            at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
            at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
            at android.view.View.updateDisplayListIfDirty(View.java:14170)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.View.draw(View.java:14967)
            at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
            at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
            at android.view.View.draw(View.java:15242)
            at android.widget.FrameLayout.draw(FrameLayout.java:598)
            at android.view.View.updateDisplayListIfDirty(View.java:14175)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.View.draw(View.java:14967)
            at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
            at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
            at android.view.View.updateDisplayListIfDirty(View.java:14170)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.View.draw(View.java:14967)
            at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
            at android.widget.ListView.drawChild(ListView.java:3396)
            at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
            at android.widget.AbsListView.dispatchDraw(AbsListView.java:2605)
            at android.widget.ListView.dispatchDraw(ListView.java:3391)
            at android.view.View.draw(View.java:15242)
            at android.widget.AbsListView.draw(AbsListView.java:4116)
            at android.view.View.updateDisplayListIfDirty(View.java:14175)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
            at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
            at android.view.View.updateDisplayListIfDirty(View.java:14135)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
            at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
            at android.view.View.updateDisplayListIfDirty(View.java:14135)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
            at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
            at android.view.View.updateDisplayListIfDirty(View.java:14135)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
            at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
            at android.view.View.updateDisplayListIfDirty(View.java:14135)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
            at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
            at android.view.View.updateDisplayListIfDirty(View.java:14135)
            at android.view.View.getDisplayList(View.java:14197)
            at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
            at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
            at android.view.View.updateDisplayListIfDirty(View.java:14135)
            at android.view.View.getDisplayList(View.java:14197)

Is there any solution for this? I have same problem