@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)
@khalid-hussain asked me to help him with khalid-hussain/HisnulMuslim#35 - i looked into it and the reason there's an
IndexOutOfBoundsException
is thattmpstart
andtmpend
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.