mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-14 05:52:47 +00:00
get rid of reflection for creating dyamic dictionary types
This commit is contained in:
parent
9f36109feb
commit
10d46619f9
5 changed files with 13 additions and 33 deletions
|
@ -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) {
|
||||
|
|
|
@ -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<String, Class<? extends ExpandableBinaryDictionary>>
|
||||
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<String, Boolean> 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<? extends ExpandableBinaryDictionary> 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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue