From cedbebf2d076d4405c0a607c681cf4e02a07c12b Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 10 Apr 2020 20:08:48 +0200 Subject: [PATCH] Prevent crash --- .../eu/faircode/email/EditTextCompose.java | 3 +- .../java/eu/faircode/email/EditTextPlain.java | 4 +- .../java/eu/faircode/email/FixedEditText.java | 70 +++++++++++++++++++ 3 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/FixedEditText.java diff --git a/app/src/main/java/eu/faircode/email/EditTextCompose.java b/app/src/main/java/eu/faircode/email/EditTextCompose.java index 7c06cb7f61..c5f7294b7d 100644 --- a/app/src/main/java/eu/faircode/email/EditTextCompose.java +++ b/app/src/main/java/eu/faircode/email/EditTextCompose.java @@ -32,14 +32,13 @@ import android.util.AttributeSet; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; -import androidx.appcompat.widget.AppCompatEditText; import androidx.core.view.inputmethod.EditorInfoCompat; import androidx.core.view.inputmethod.InputConnectionCompat; import androidx.core.view.inputmethod.InputContentInfoCompat; import org.jsoup.nodes.Document; -public class EditTextCompose extends AppCompatEditText { +public class EditTextCompose extends FixedEditText { private ISelection selectionListener = null; private IInputContentListener inputContentListener = null; diff --git a/app/src/main/java/eu/faircode/email/EditTextPlain.java b/app/src/main/java/eu/faircode/email/EditTextPlain.java index 90799b493e..004a549b16 100644 --- a/app/src/main/java/eu/faircode/email/EditTextPlain.java +++ b/app/src/main/java/eu/faircode/email/EditTextPlain.java @@ -24,9 +24,7 @@ import android.content.ClipboardManager; import android.content.Context; import android.util.AttributeSet; -import androidx.appcompat.widget.AppCompatEditText; - -public class EditTextPlain extends AppCompatEditText { +public class EditTextPlain extends FixedEditText { public EditTextPlain(Context context) { super(context); } diff --git a/app/src/main/java/eu/faircode/email/FixedEditText.java b/app/src/main/java/eu/faircode/email/FixedEditText.java new file mode 100644 index 0000000000..aa5cb5ae39 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/FixedEditText.java @@ -0,0 +1,70 @@ +package eu.faircode.email; + +/* + This file is part of FairEmail. + + FairEmail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + FairEmail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FairEmail. If not, see . + + Copyright 2018-2020 by Marcel Bokhorst (M66B) +*/ + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatEditText; + +public class FixedEditText extends AppCompatEditText { + public FixedEditText(@NonNull Context context) { + super(context); + } + + public FixedEditText(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public FixedEditText(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public void setSelection(int index) { + try { + super.setSelection(index); + } catch (Throwable ex) { + Log.e(ex); + /* + java.lang.IndexOutOfBoundsException: setSpan (2 ... 2) ends beyond length 0 + at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1265) + at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:684) + at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:677) + at android.text.Selection.setSelection(Selection.java:76) + at android.widget.EditText.setSelection(EditText.java:96) + at android.widget.NumberPicker$SetSelectionCommand.run(NumberPicker.java:2246) + at android.os.Handler.handleCallback(Handler.java:754) + at android.os.Handler.dispatchMessage(Handler.java:95) + */ + } + } + + @Override + public void setSelection(int start, int stop) { + try { + super.setSelection(start, stop); + } catch (Throwable ex) { + Log.e(ex); + } + } +}