From 8026cef5afddf0da018657f8d877d1c9829a09a6 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 30 May 2021 15:44:42 +0200 Subject: [PATCH] Workaround Samsung text classifier crash --- .../java/eu/faircode/email/FixedEditText.java | 38 +++++++++++++++++++ .../main/java/eu/faircode/email/Helper.java | 4 ++ 2 files changed, 42 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/FixedEditText.java b/app/src/main/java/eu/faircode/email/FixedEditText.java index 2dde0d2b6c..9d6d1493d7 100644 --- a/app/src/main/java/eu/faircode/email/FixedEditText.java +++ b/app/src/main/java/eu/faircode/email/FixedEditText.java @@ -21,11 +21,14 @@ package eu.faircode.email; import android.content.Context; import android.graphics.Canvas; +import android.os.Build; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.textclassifier.TextClassifier; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.appcompat.widget.AppCompatEditText; public class FixedEditText extends AppCompatEditText { @@ -168,4 +171,39 @@ public class FixedEditText extends AppCompatEditText { return false; } } + + @NonNull + @Override + @RequiresApi(api = Build.VERSION_CODES.O) + public TextClassifier getTextClassifier() { + /* + https://issuetracker.google.com/issues/188103468 + + java.lang.RuntimeException: An error occurred while executing doInBackground() + at android.os.AsyncTask$3.done(AsyncTask.java:353) + at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) + at java.util.concurrent.FutureTask.setException(FutureTask.java:252) + at java.util.concurrent.FutureTask.run(FutureTask.java:271) + at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) + at java.lang.Thread.run(Thread.java:764) + Caused by: java.lang.IllegalArgumentException + at com.android.internal.util.Preconditions.checkArgument(Preconditions.java:33) + at android.view.textclassifier.TextClassifierImpl.validateInput(TextClassifierImpl.java:520) + at android.view.textclassifier.TextClassifierImpl.classifyText(TextClassifierImpl.java:152) + at android.widget.SelectionActionModeHelper$TextClassificationHelper.performClassification(SelectionActionModeHelper.java:707) + at android.widget.SelectionActionModeHelper$TextClassificationHelper.classifyText(SelectionActionModeHelper.java:655) + at android.widget.SelectionActionModeHelper.-android_widget_SelectionActionModeHelper-mthref-1(SelectionActionModeHelper.java:94) + at android.widget.-$Lambda$tTszxdFZ0V9nXhnBpPsqeBMO0fw$1.$m$2(Unknown Source:4) + at android.widget.-$Lambda$tTszxdFZ0V9nXhnBpPsqeBMO0fw$1.get(Unknown Source:21) + at android.widget.SelectionActionModeHelper$TextClassificationAsyncTask.doInBackground(SelectionActionModeHelper.java:572) + at android.widget.SelectionActionModeHelper$TextClassificationAsyncTask.doInBackground(SelectionActionModeHelper.java:567) + at android.os.AsyncTask$2.call(AsyncTask.java:333) + */ + if (BuildConfig.DEBUG || Helper.isSamsung()) + return TextClassifier.NO_OP; + else + return super.getTextClassifier(); + } } diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index e77394df82..2ff66cac5a 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -871,6 +871,10 @@ public class Helper { return true; } + static boolean isSamsung() { + return "Samsung".equalsIgnoreCase(Build.MANUFACTURER); + } + static boolean isXiaomi() { return "Xiaomi".equalsIgnoreCase(Build.MANUFACTURER); }