aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/org/kelar/inputmethod/latin/DictionaryFacilitator.java
diff options
context:
space:
mode:
authorAmin Bandali <bandali@kelar.org>2024-12-16 21:45:41 -0500
committerAmin Bandali <bandali@kelar.org>2025-01-11 14:17:35 -0500
commite9a0e66716dab4dd3184d009d8920de1961efdfa (patch)
tree02dcc096643d74645bf28459c2834c3d4a2ad7f2 /java/src/org/kelar/inputmethod/latin/DictionaryFacilitator.java
parentfb3b9360d70596d7e921de8bf7d3ca99564a077e (diff)
downloadlatinime-e9a0e66716dab4dd3184d009d8920de1961efdfa.tar.gz
latinime-e9a0e66716dab4dd3184d009d8920de1961efdfa.tar.xz
latinime-e9a0e66716dab4dd3184d009d8920de1961efdfa.zip
Rename to Kelar Keyboard (org.kelar.inputmethod.latin)
Diffstat (limited to 'java/src/org/kelar/inputmethod/latin/DictionaryFacilitator.java')
-rw-r--r--java/src/org/kelar/inputmethod/latin/DictionaryFacilitator.java176
1 files changed, 176 insertions, 0 deletions
diff --git a/java/src/org/kelar/inputmethod/latin/DictionaryFacilitator.java b/java/src/org/kelar/inputmethod/latin/DictionaryFacilitator.java
new file mode 100644
index 000000000..319015c90
--- /dev/null
+++ b/java/src/org/kelar/inputmethod/latin/DictionaryFacilitator.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.kelar.inputmethod.latin;
+
+import android.content.Context;
+import android.util.LruCache;
+
+import org.kelar.inputmethod.annotations.UsedForTesting;
+import org.kelar.inputmethod.keyboard.Keyboard;
+import org.kelar.inputmethod.latin.common.ComposedData;
+import org.kelar.inputmethod.latin.settings.SettingsValuesForSuggestion;
+import org.kelar.inputmethod.latin.utils.SuggestionResults;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+/**
+ * Interface that facilitates interaction with different kinds of dictionaries. Provides APIs to
+ * instantiate and select the correct dictionaries (based on language or account), update entries
+ * and fetch suggestions. Currently AndroidSpellCheckerService and LatinIME both use
+ * DictionaryFacilitator as a client for interacting with dictionaries.
+ */
+public interface DictionaryFacilitator {
+
+ public static final String[] ALL_DICTIONARY_TYPES = new String[] {
+ Dictionary.TYPE_MAIN,
+ Dictionary.TYPE_CONTACTS,
+ Dictionary.TYPE_USER_HISTORY,
+ Dictionary.TYPE_USER};
+
+ public static final String[] DYNAMIC_DICTIONARY_TYPES = new String[] {
+ Dictionary.TYPE_CONTACTS,
+ Dictionary.TYPE_USER_HISTORY,
+ Dictionary.TYPE_USER};
+
+ /**
+ * The facilitator will put words into the cache whenever it decodes them.
+ * @param cache
+ */
+ void setValidSpellingWordReadCache(final LruCache<String, Boolean> cache);
+
+ /**
+ * The facilitator will get words from the cache whenever it needs to check their spelling.
+ * @param cache
+ */
+ void setValidSpellingWordWriteCache(final LruCache<String, Boolean> cache);
+
+ /**
+ * Returns whether this facilitator is exactly for this locale.
+ *
+ * @param locale the locale to test against
+ */
+ boolean isForLocale(final Locale locale);
+
+ /**
+ * Returns whether this facilitator is exactly for this account.
+ *
+ * @param account the account to test against.
+ */
+ boolean isForAccount(@Nullable final String account);
+
+ interface DictionaryInitializationListener {
+ void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
+ }
+
+ /**
+ * Called every time {@link LatinIME} starts on a new text field.
+ * Dot not affect {@link AndroidSpellCheckerService}.
+ *
+ * WARNING: The service methods that call start/finish are very spammy.
+ */
+ void onStartInput();
+
+ /**
+ * Called every time the {@link LatinIME} finishes with the current text field.
+ * May be followed by {@link #onStartInput} again in another text field,
+ * or it may be done for a while.
+ * Dot not affect {@link AndroidSpellCheckerService}.
+ *
+ * WARNING: The service methods that call start/finish are very spammy.
+ */
+ void onFinishInput(Context context);
+
+ boolean isActive();
+
+ Locale getLocale();
+
+ boolean usesContacts();
+
+ String getAccount();
+
+ void resetDictionaries(
+ final Context context,
+ final Locale newLocale,
+ final boolean useContactsDict,
+ final boolean usePersonalizedDicts,
+ final boolean forceReloadMainDictionary,
+ @Nullable final String account,
+ final String dictNamePrefix,
+ @Nullable final DictionaryInitializationListener listener);
+
+ @UsedForTesting
+ void resetDictionariesForTesting(
+ final Context context,
+ final Locale locale,
+ final ArrayList<String> dictionaryTypes,
+ final HashMap<String, File> dictionaryFiles,
+ final Map<String, Map<String, String>> additionalDictAttributes,
+ @Nullable final String account);
+
+ void closeDictionaries();
+
+ @UsedForTesting
+ ExpandableBinaryDictionary getSubDictForTesting(final String dictName);
+
+ // The main dictionaries are loaded asynchronously. Don't cache the return value
+ // of these methods.
+ boolean hasAtLeastOneInitializedMainDictionary();
+
+ boolean hasAtLeastOneUninitializedMainDictionary();
+
+ void waitForLoadingMainDictionaries(final long timeout, final TimeUnit unit)
+ throws InterruptedException;
+
+ @UsedForTesting
+ void waitForLoadingDictionariesForTesting(final long timeout, final TimeUnit unit)
+ throws InterruptedException;
+
+ void addToUserHistory(final String suggestion, final boolean wasAutoCapitalized,
+ @Nonnull final NgramContext ngramContext, final long timeStampInSeconds,
+ final boolean blockPotentiallyOffensive);
+
+ void unlearnFromUserHistory(final String word,
+ @Nonnull final NgramContext ngramContext, final long timeStampInSeconds,
+ final int eventType);
+
+ // TODO: Revise the way to fusion suggestion results.
+ @Nonnull SuggestionResults getSuggestionResults(final ComposedData composedData,
+ final NgramContext ngramContext, @Nonnull final Keyboard keyboard,
+ final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId,
+ final int inputStyle);
+
+ boolean isValidSpellingWord(final String word);
+
+ boolean isValidSuggestionWord(final String word);
+
+ boolean clearUserHistoryDictionary(final Context context);
+
+ String dump(final Context context);
+
+ void dumpDictionaryForDebug(final String dictName);
+
+ @Nonnull List<DictionaryStats> getDictionaryStats(final Context context);
+}