From 18125df95889bb5e2ebf3e19bc252dd01afff1c2 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 12 Oct 2020 10:22:46 +0200 Subject: [PATCH] Prevent crash --- .../java/eu/faircode/email/FixedEditText.java | 10 ++++ .../java/eu/faircode/email/FixedTextView.java | 53 ++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/email/FixedEditText.java b/app/src/main/java/eu/faircode/email/FixedEditText.java index 6ca850c68e..7225cd15a5 100644 --- a/app/src/main/java/eu/faircode/email/FixedEditText.java +++ b/app/src/main/java/eu/faircode/email/FixedEditText.java @@ -87,6 +87,16 @@ public class FixedEditText extends AppCompatEditText { } } + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + try { + return super.dispatchTouchEvent(event); + } catch (Throwable ex) { + Log.w(ex); + return false; + } + } + @Override public boolean onTouchEvent(MotionEvent event) { try { diff --git a/app/src/main/java/eu/faircode/email/FixedTextView.java b/app/src/main/java/eu/faircode/email/FixedTextView.java index a96df457fe..ab54299cdc 100644 --- a/app/src/main/java/eu/faircode/email/FixedTextView.java +++ b/app/src/main/java/eu/faircode/email/FixedTextView.java @@ -119,7 +119,58 @@ public class FixedTextView extends AppCompatTextView { setText(text); } - return super.dispatchTouchEvent(event); + try { + return super.dispatchTouchEvent(event); + } catch (Throwable ex) { + /* + Attempt to fix + java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0 + at android.text.SpannableStringInternal.checkRange(SpannableStringInternal.java:434) + at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:155) + at android.text.SpannableString.setSpan(SpannableString.java:46) + at android.text.Selection.setSelection(Selection.java:76) + at android.widget.Editor$SelectionHandleView.updateSelection(Editor.java:4687) + at android.widget.Editor$HandleView.positionAtCursorOffset(Editor.java:4262) + at android.widget.Editor$SelectionHandleView.positionAtCursorOffset(Editor.java:4870) + at android.widget.Editor$SelectionHandleView.positionAndAdjustForCrossingHandles(Editor.java:4918) + at android.widget.Editor$SelectionHandleView.updatePosition(Editor.java:4863) + at android.widget.Editor$HandleView.onTouchEvent(Editor.java:4407) + at android.widget.Editor$SelectionHandleView.onTouchEvent(Editor.java:4876) + at android.view.View.dispatchTouchEvent(View.java:10024) + at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632) + at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321) + at android.widget.PopupWindow$PopupDecorView.dispatchTouchEvent(PopupWindow.java:2277) + at android.view.View.dispatchPointerEvent(View.java:10244) + at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4468) + at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4336) + at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3883) + at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3936) + at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3902) + at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4029) + at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3910) + at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4086) + at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3883) + at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3936) + at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3902) + at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3910) + at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3883) + at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6284) + at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6258) + at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6219) + at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6387) + at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) + at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) + at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176) + at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6358) + at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6410) + at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) + at android.view.Choreographer.doCallbacks(Choreographer.java:686) + at android.view.Choreographer.doFrame(Choreographer.java:615) + at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) + at android.os.Handler.handleCallback(Handler.java:751) + */ + return false; + } } @Override