diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java index 2f67c706b..b9cecee64 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java @@ -50,7 +50,6 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary reloadDictionaryIfRequired(); } - // Note: This method is called by {@link DictionaryFacilitator} using Java reflection. @ExternallyReferenced public static ContactsBinaryDictionary getDictionary(final Context context, final Locale locale, final File dictFile, final String dictNamePrefix, @Nullable final String account) { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java index a87916f26..09293a486 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java @@ -34,8 +34,6 @@ import org.dslul.openboard.inputmethod.latin.utils.SuggestionResults; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; @@ -76,19 +74,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator { private String mChangeFrom = ""; private String mChangeTo = ""; - public static final Map> - DICT_TYPE_TO_CLASS = new HashMap<>(); - - static { - DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER_HISTORY, UserHistoryDictionary.class); - DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER, UserBinaryDictionary.class); - DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_CONTACTS, ContactsBinaryDictionary.class); - } - - private static final String DICT_FACTORY_METHOD_NAME = "getDictionary"; - private static final Class[] DICT_FACTORY_METHOD_ARG_TYPES = - new Class[] { Context.class, Locale.class, File.class, String.class, String.class }; - // todo: write cache never set, and never read (only written) // tried to use read cache for a while, but small performance improvements are not worth the work (https://github.com/Helium314/openboard/issues/307) private LruCache mValidSpellingWordReadCache; @@ -314,21 +299,20 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator { private static ExpandableBinaryDictionary getSubDict(final String dictType, final Context context, final Locale locale, final File dictFile, final String dictNamePrefix, @Nullable final String account) { - final Class dictClass = DICT_TYPE_TO_CLASS.get(dictType); - if (dictClass == null) { - Log.e(TAG, "Cannot create dictionary: no class for " + dictType); - return null; - } + ExpandableBinaryDictionary dict = null; try { - final Method factoryMethod = dictClass.getMethod(DICT_FACTORY_METHOD_NAME, - DICT_FACTORY_METHOD_ARG_TYPES); - final Object dict = factoryMethod.invoke(null, context, locale, dictFile, dictNamePrefix, account); - return (ExpandableBinaryDictionary) dict; - } catch (final NoSuchMethodException | SecurityException | IllegalAccessException - | IllegalArgumentException | InvocationTargetException e) { + dict = switch (dictType) { + case Dictionary.TYPE_USER_HISTORY -> UserHistoryDictionary.getDictionary(context, locale, dictFile, dictNamePrefix, account); + case Dictionary.TYPE_USER -> UserBinaryDictionary.getDictionary(context, locale, dictFile, dictNamePrefix, account); + case Dictionary.TYPE_CONTACTS -> ContactsBinaryDictionary.getDictionary(context, locale, dictFile, dictNamePrefix, account); + default -> null; + }; + } catch (final SecurityException | IllegalArgumentException e) { Log.e(TAG, "Cannot create dictionary: " + dictType, e); - return null; } + if (dict == null) + Log.e(TAG, "Cannot create dictionary for " + dictType); + return dict; } @Nullable diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java index 4732961ef..3e9408d8e 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java @@ -82,7 +82,6 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary { reloadDictionaryIfRequired(); } - // Note: This method is called by {@link DictionaryFacilitator} using Java reflection. @ExternallyReferenced public static UserBinaryDictionary getDictionary( final Context context, final Locale locale, final File dictFile, diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java index fad65aae2..a3d9aa061 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java @@ -49,8 +49,6 @@ public class UserHistoryDictionary extends ExpandableBinaryDictionary { return getDictName(name, locale, dictFile); } - // Note: This method is called by {@link DictionaryFacilitator} using Java reflection. - @SuppressWarnings("unused") @ExternallyReferenced public static UserHistoryDictionary getDictionary(final Context context, final Locale locale, final File dictFile, final String dictNamePrefix, @Nullable final String account) { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/DebugSettingsFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/DebugSettingsFragment.java index 3da5711cb..a349a7663 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/DebugSettingsFragment.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/DebugSettingsFragment.java @@ -19,7 +19,7 @@ import androidx.preference.TwoStatePreference; import org.dslul.openboard.inputmethod.keyboard.KeyboardSwitcher; import org.dslul.openboard.inputmethod.latin.BuildConfig; import org.dslul.openboard.inputmethod.latin.DictionaryDumpBroadcastReceiver; -import org.dslul.openboard.inputmethod.latin.DictionaryFacilitatorImpl; +import org.dslul.openboard.inputmethod.latin.DictionaryFacilitator; import org.dslul.openboard.inputmethod.latin.R; /** @@ -41,7 +41,7 @@ public final class DebugSettingsFragment extends SubScreenFragment addPreferencesFromResource(R.xml.prefs_screen_debug); final PreferenceGroup dictDumpPreferenceGroup = findPreference(PREF_KEY_DUMP_DICTS); - for (final String dictName : DictionaryFacilitatorImpl.DICT_TYPE_TO_CLASS.keySet()) { + for (final String dictName : DictionaryFacilitator.DYNAMIC_DICTIONARY_TYPES) { final Preference pref = new DictDumpPreference(getActivity(), dictName); pref.setOnPreferenceClickListener(this); dictDumpPreferenceGroup.addPreference(pref);