From 388af6e7c57e7af8424c01ea15cbe7d0a315b664 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 12 Jun 2022 16:46:02 +0200 Subject: [PATCH] Attempt to workaround Android 8 block index bug --- .../java/eu/faircode/email/FixedEditText.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FixedEditText.java b/app/src/main/java/eu/faircode/email/FixedEditText.java index a497be7fdb..039a0199f8 100644 --- a/app/src/main/java/eu/faircode/email/FixedEditText.java +++ b/app/src/main/java/eu/faircode/email/FixedEditText.java @@ -25,6 +25,7 @@ import android.os.Build; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; +import android.view.View; import android.view.textclassifier.TextClassifier; import androidx.annotation.NonNull; @@ -123,14 +124,24 @@ public class FixedEditText extends AppCompatEditText { super.onDraw(canvas); } catch (Throwable ex) { Log.w(ex); - /* - java.lang.ArrayIndexOutOfBoundsException: length=39; index=-3 - at android.text.DynamicLayout.getBlockIndex(DynamicLayout.java:648) - at android.widget.Editor.drawHardwareAccelerated(Editor.java:1703) - at android.widget.Editor.onDraw(Editor.java:1672) - at android.widget.TextView.onDraw(TextView.java:6914) - at android.view.View.draw(View.java:19200) - */ + if (ex instanceof ArrayIndexOutOfBoundsException) + try { + /* + java.lang.ArrayIndexOutOfBoundsException: length=39; index=-3 + at android.text.DynamicLayout.getBlockIndex(DynamicLayout.java:648) + at android.widget.Editor.drawHardwareAccelerated(Editor.java:1703) + at android.widget.Editor.onDraw(Editor.java:1672) + at android.widget.TextView.onDraw(TextView.java:6914) + at android.view.View.draw(View.java:19200) + + Fixed in Android 9: + https://android-review.googlesource.com/c/platform/frameworks/base/+/634929 + */ + setLayerType(View.LAYER_TYPE_SOFTWARE, null); + super.onDraw(canvas); + } catch (Throwable exex) { + Log.w(exex); + } } }