Status Update
Comments
hb...@gmail.com <hb...@gmail.com> #2
mi...@mictale.com <mi...@mictale.com> #3
I can repro this on a Nexus 5 (hammerhead), Android 6 build MRA58K
al...@android.com <al...@android.com>
st...@gmail.com <st...@gmail.com> #4
text.setMovementMethod(LinkMovementMethod.getInstance());
text.setTextIsSelectable(true);
text.setFocusable(true);
text.setFocusableInTouchMode(true);
java.lang.IllegalArgumentException: Invalid offset: -1. Valid range is [0, 63]
at android.text.method.WordIterator.checkOffsetIsValid(WordIterator.java:380)
at android.text.method.WordIterator.isBoundary(WordIterator.java:101)
at android.widget.Editor$SelectionStartHandleView.positionAtCursorOffset(Editor.java:4260)
at android.widget.Editor$HandleView.updatePosition(Editor.java:3708)
at android.widget.Editor$PositionListener.onPreDraw(Editor.java:2507)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2055)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
st...@gmail.com <st...@gmail.com> #5
yu...@gmail.com <yu...@gmail.com> #7
be...@gmail.com <be...@gmail.com> #8
wb...@gmail.com <wb...@gmail.com> #9
03-09 12:10:19.680 28601 28601 E AndroidRuntime: Process: demo.crash.myapplication, PID: 28601
03-09 12:10:19.680 28601 28601 E AndroidRuntime: java.lang.IllegalArgumentException: Invalid offset: -1. Valid range is [0, 37]
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.text.method.WordIterator.checkOffsetIsValid(WordIterator.java:380)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.text.method.WordIterator.isBoundary(WordIterator.java:101)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.widget.Editor$SelectionStartHandleView.positionAtCursorOffset(Editor.java:4266)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.widget.Editor$HandleView.updatePosition(Editor.java:3714)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.widget.Editor$PositionListener.onPreDraw(Editor.java:2513)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2055)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:670)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:606)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5425)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
03-09 12:10:19.680 28601 28601 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ka...@gmail.com <ka...@gmail.com> #10
ka...@gmail.com <ka...@gmail.com> #11
ka...@gmail.com <ka...@gmail.com> #12
ka...@gmail.com <ka...@gmail.com> #13
java.lang.IllegalArgumentException: Invalid offset: -1. Valid range is [0, 801]
at android.text.method.WordIterator.checkOffsetIsValid(WordIterator.java:380)
at android.text.method.WordIterator.isBoundary(WordIterator.java:101)
at android.widget.Editor$SelectionStartHandleView.positionAtCursorOffset(Editor.java:4260)
at android.widget.Editor$HandleView.updatePosition(Editor.java:3708)
at android.widget.Editor$PositionListener.onPreDraw(Editor.java:2507)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2055)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java
[Deleted User] <[Deleted User]> #14
Process: app.desidime.debug, PID: 18658
java.lang.IllegalArgumentException: Invalid offset: -1. Valid range is [0, 62]
at android.text.method.WordIterator.checkOffsetIsValid(WordIterator.java:380)
at android.text.method.WordIterator.isBoundary(WordIterator.java:101)
at android.widget.Editor$SelectionStartHandleView.positionAtCursorOffset(Editor.java:4260)
at android.widget.Editor$HandleView.updatePosition(Editor.java:3708)
at android.widget.Editor$PositionListener.onPreDraw(Editor.java:2507)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2055)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
da...@gmail.com <da...@gmail.com> #15
vi...@hradecky.net <vi...@hradecky.net> #16
ro...@google.com <ro...@google.com>
cl...@google.com <cl...@google.com>
st...@google.com <st...@google.com> #17
si...@google.com <si...@google.com>
ka...@google.com <ka...@google.com> #20
sa...@google.com <sa...@google.com> #21
kt...@gmail.com <kt...@gmail.com> #22
th...@gmail.com <th...@gmail.com> #23
Google refused to fix this. If you support Android 6 and older in your app, you should manually handle the LinkMovementMethod like this:
Inmho, if Google decides to not update an OS anymore, then they should at least provide an official workaround RIGHT HERE at the bug report instead of just dumping it in the virtual trash bin. Not a way to build customer relationship.
pa...@gmail.com <pa...@gmail.com> #24
Re #23, they didn't refuse to fix it, it's not practically possible to fix anything for older APIs because they would need to issue a new release, and every vendor out there would need to pull that new code in as well and release it for all their devices.
The issue seems fixed in 24 and above from a quick testing. This is why they requested that we file a new issue if it still exists in later/recent versions.
Thanks for the link! It has some workable workarounds for supporting older devices.
pa...@outlook.com <pa...@outlook.com> #25
Just an update, this is still happening in 2024 on Android 8.1 and Android 10.
Description
1. Mark some text in a TextView
2. TextView highlights the text and shows the Copy-Share-SelectAll popup.
3. Tap onto the TextView but not on the popup.
I consistently get:
java.lang.IllegalArgumentException: Invalid offset: -1. Valid range is [0, 10562]
at android.text.method.WordIterator.checkOffsetIsValid(WordIterator.java:380)
at android.text.method.WordIterator.isBoundary(WordIterator.java:101)
at android.widget.Editor$SelectionStartHandleView.positionAtCursorOffset(Editor.java:4260)
at android.widget.Editor$HandleView.updatePosition(Editor.java:3708)
at android.widget.Editor$PositionListener.onPreDraw(Editor.java:2507)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2055)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)