diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java index 0fe4a85f..e5219999 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java @@ -13,6 +13,8 @@ import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.os.Build; import android.text.InputType; + +import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.LocaleKeyTexts; import org.dslul.openboard.inputmethod.latin.utils.Log; import android.util.SparseArray; import android.util.Xml; @@ -62,6 +64,7 @@ public final class KeyboardLayoutSet { private final Context mContext; @NonNull private final Params mParams; + public final LocaleKeyTexts mLocaleKeyTexts; // How many layouts we forcibly keep in cache. This only includes ALPHABET (default) and // ALPHABET_AUTOMATIC_SHIFTED layouts - other layouts may stay in memory in the map of @@ -122,8 +125,7 @@ public final class KeyboardLayoutSet { // whether the user has enabled it, and the keyboard layout supports it. boolean mIsSplitLayoutEnabled; // Sparse array of KeyboardLayoutSet element parameters indexed by element's id. - final SparseArray mKeyboardLayoutSetElementIdToParamsMap = - new SparseArray<>(); + final SparseArray mKeyboardLayoutSetElementIdToParamsMap = new SparseArray<>(); } public static void onSystemLocaleChanged() { @@ -154,6 +156,7 @@ public final class KeyboardLayoutSet { KeyboardLayoutSet(final Context context, @NonNull final Params params) { mContext = context; mParams = params; + mLocaleKeyTexts = LocaleKeyTextsKt.getOrCreate(context, params.mSubtype.getLocale()); } @NonNull diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java index c877a043..f98731a1 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java @@ -23,7 +23,6 @@ import org.dslul.openboard.inputmethod.keyboard.KeyboardLayoutSet.KeyboardLayout import org.dslul.openboard.inputmethod.keyboard.clipboard.ClipboardHistoryView; import org.dslul.openboard.inputmethod.keyboard.emoji.EmojiPalettesView; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardState; -import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardTextsSet; import org.dslul.openboard.inputmethod.latin.InputView; import org.dslul.openboard.inputmethod.latin.KeyboardWrapperView; import org.dslul.openboard.inputmethod.latin.LatinIME; @@ -55,8 +54,6 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private KeyboardState mState; private KeyboardLayoutSet mKeyboardLayoutSet; - // TODO: The following {@link KeyboardTextsSet} should be in {@link KeyboardLayoutSet}. - private final KeyboardTextsSet mKeyboardTextsSet = new KeyboardTextsSet(); private KeyboardTheme mKeyboardTheme; private Context mThemeContext; @@ -133,7 +130,6 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { .build(); try { mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState, oneHandedModeEnabled); - mKeyboardTextsSet.setLocale(mRichImm.getCurrentSubtypeLocale(), mThemeContext); } catch (KeyboardLayoutSetException e) { Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause()); } @@ -302,7 +298,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { // @see LatinIME#onComputeInset(android.inputmethodservice.InputMethodService.Insets) mKeyboardView.setVisibility(View.GONE); mEmojiPalettesView.startEmojiPalettes( - mKeyboardTextsSet.getText(KeyboardTextsSet.SWITCH_TO_ALPHA_KEY_LABEL), + mKeyboardLayoutSet.mLocaleKeyTexts.getLabelAlphabet(), mKeyboardView.getKeyVisualAttribute(), keyboard.mIconsSet); mEmojiPalettesView.setVisibility(View.VISIBLE); } @@ -321,7 +317,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { mKeyboardView.setVisibility(View.GONE); mClipboardHistoryView.startClipboardHistory( mLatinIME.getClipboardHistoryManager(), - mKeyboardTextsSet.getText(KeyboardTextsSet.SWITCH_TO_ALPHA_KEY_LABEL), + mKeyboardLayoutSet.mLocaleKeyTexts.getLabelAlphabet(), mKeyboardView.getKeyVisualAttribute(), keyboard.mIconsSet); mClipboardHistoryView.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt index f2d26d4b..cb103dd4 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt @@ -234,9 +234,14 @@ private fun addFixedColumnOrder(moreKeys: Array): Array { } } +fun getOrCreate(context: Context, locale: Locale): LocaleKeyTexts = + localeKeyTextsCache.getOrPut(locale.toString()) { + LocaleKeyTexts(getStreamForLocale(locale, context), locale) + } + fun addLocaleKeyTextsToParams(context: Context, params: KeyboardParams, moreKeysSetting: Int) { val locales = params.mSecondaryLocales + params.mId.locale - params.mLocaleKeyTexts = moreKeysAndLabels.getOrPut(locales.joinToString { it.toString() }) { + params.mLocaleKeyTexts = localeKeyTextsCache.getOrPut(locales.joinToString { it.toString() }) { createLocaleKeyTexts(context, params, moreKeysSetting) } } @@ -266,10 +271,10 @@ private fun getStreamForLocale(locale: Locale, context: Context) = } } -fun clearCache() = moreKeysAndLabels.clear() +fun clearCache() = localeKeyTextsCache.clear() // cache the texts, so they don't need to be read over and over -private val moreKeysAndLabels = hashMapOf() +private val localeKeyTextsCache = hashMapOf() private const val READER_MODE_NONE = 0 private const val READER_MODE_MORE_KEYS = 1