Skip to content

[TextInputEditText] Crash with textAllCaps=true #613

@SolaBe

Description

@SolaBe

Description: When set textAllCaps=true TextInputLayout doesn't move cursor after text changed and crash after start edit pasted text

Expected behavior: All letters changed to upper case

Source code: Crash log (after start edit pasted 4-characters word):
java.lang.IndexOutOfBoundsException: charAt: 4 >= length 4
at android.text.SpannableStringBuilder.charAt(SpannableStringBuilder.java:123)
at android.text.TextLine.handleText(TextLine.java:899)
at android.text.TextLine.handleRun(TextLine.java:1141)
at android.text.TextLine.drawRun(TextLine.java:509)
at android.text.TextLine.draw(TextLine.java:244)
at android.text.Layout.drawText(Layout.java:581)
at android.widget.Editor.drawHardwareAcceleratedInner(Editor.java:2062)
at android.widget.Editor.drawHardwareAccelerated(Editor.java:1981)
at android.widget.Editor.onDraw(Editor.java:1921)
at android.widget.TextView.onDraw(TextView.java:8101)
at android.view.View.draw(View.java:21868)
at android.view.View.updateDisplayListIfDirty(View.java:20741)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514)
at android.view.View.updateDisplayListIfDirty(View.java:20696)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:725)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:731)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:840)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3963)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3737)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3048)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1911)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8526)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
2019-09-20 10:43:45.279 20529-20529/de.autodoc.club.debug E/AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:696)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7078)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

Android API version: api 28

Material Library version: lib version 1.1.0-alpha06
Device: Samsung A9 2018, Pixel 2 (emulator)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions