From 382bdb6ff69138a76dbde0dc07192ce126345fba Mon Sep 17 00:00:00 2001 From: Helium314 Date: Mon, 15 Apr 2024 22:59:33 +0200 Subject: [PATCH] fix spellchecker crash when keyboard has never been initialized, fixes #684 --- .../helium314/keyboard/latin/InputAttributes.java | 1 + .../keyboard/latin/RichInputMethodManager.java | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/InputAttributes.java b/app/src/main/java/helium314/keyboard/latin/InputAttributes.java index ce231aa8f..c57fec006 100644 --- a/app/src/main/java/helium314/keyboard/latin/InputAttributes.java +++ b/app/src/main/java/helium314/keyboard/latin/InputAttributes.java @@ -100,6 +100,7 @@ public final class InputAttributes { final boolean noMicrophone = mIsPasswordField || InputTypeUtils.isEmailVariation(variation) || hasNoMicrophoneKeyOption() + || !RichInputMethodManager.isInitialized() // avoid crash when only using spell checker || !RichInputMethodManager.getInstance().hasShortcutIme(); mShouldShowVoiceInputKey = !noMicrophone; diff --git a/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java b/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java index 50837395d..a4bc4a432 100644 --- a/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java +++ b/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java @@ -69,24 +69,27 @@ public class RichInputMethodManager { sInstance.initInternal(context); } - private boolean isInitialized() { + private boolean isInitializedInternal() { return mImm != null; } + public static boolean isInitialized() { + return sInstance.isInitializedInternal(); + } + private void checkInitialized() { - if (!isInitialized()) { + if (!isInitializedInternal()) { throw new RuntimeException(TAG + " is used before initialization"); } } private void initInternal(final Context context) { - if (isInitialized()) { + if (isInitializedInternal()) { return; } mImm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); mContext = context; - mInputMethodInfoCache = new InputMethodInfoCache( - mImm, context.getPackageName()); + mInputMethodInfoCache = new InputMethodInfoCache(mImm, context.getPackageName()); // Initialize subtype utils. SubtypeLocaleUtils.init(context);