diff --git a/app/src/main/java/helium314/keyboard/keyboard/Key.java b/app/src/main/java/helium314/keyboard/keyboard/Key.java index f27d8c3c2..edfd089d0 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/Key.java +++ b/app/src/main/java/helium314/keyboard/keyboard/Key.java @@ -1052,7 +1052,6 @@ private static int getPopupKeysColumnAndFlagsAndSetNullInArray(final KeyboardPar return popupKeysColumnAndFlags; } - // only for testing public String getOutputText() { return mOptionalAttributes == null ? null : mOptionalAttributes.mOutputText; } diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardParams.java b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardParams.java index ca1f950eb..2a1db5c83 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardParams.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardParams.java @@ -98,6 +98,9 @@ public class KeyboardParams { // should be enabled for all alphabet layouts, except for specific layouts when shifted public boolean mProximityCharsCorrectionEnabled; + // only for removing redundant popup keys + public List baseKeys; + @NonNull public final TouchPositionCorrection mTouchPositionCorrection = new TouchPositionCorrection(); @@ -145,12 +148,12 @@ public void onAddKey(@NonNull final Key newKey) { } public void removeRedundantPopupKeys() { - if (mAllowRedundantPopupKeys) { + if (mAllowRedundantPopupKeys || baseKeys == null) { return; } final PopupKeySpec.LettersOnBaseLayout lettersOnBaseLayout = new PopupKeySpec.LettersOnBaseLayout(); - for (final Key key : mSortedKeys) { + for (final Key.KeyParams key : baseKeys) { lettersOnBaseLayout.addLetter(key); } final ArrayList allKeys = new ArrayList<>(mSortedKeys); @@ -159,6 +162,7 @@ public void removeRedundantPopupKeys() { final Key filteredKey = Key.removeRedundantPopupKeys(key, lettersOnBaseLayout); mSortedKeys.add(mUniqueKeysCache.getUniqueKey(filteredKey)); } + baseKeys = null; } private int mMaxHeightCount = 0; diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java b/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java index c39eaa6f6..a1b41b79c 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/PopupKeySpec.java @@ -118,8 +118,8 @@ public static class LettersOnBaseLayout { private final SparseIntArray mCodes = new SparseIntArray(); private final HashSet mTexts = new HashSet<>(); - public void addLetter(@NonNull final Key key) { - final int code = key.getCode(); + public void addLetter(@NonNull final Key.KeyParams key) { + final int code = key.mCode; if (code > 32) { mCodes.put(code, 0); } else if (code == KeyCode.MULTIPLE_CODE_POINTS) { diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt index d347f1077..1b0a870fa 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt @@ -91,6 +91,8 @@ class KeyboardParser(private val params: KeyboardParams, private val context: Co if (params.mId.isAlphaOrSymbolKeyboard && params.mId.mNumberRowEnabled) baseKeys.add(0, numberRow .mapTo(mutableListOf()) { it.copy(newLabelFlags = Key.LABEL_FLAGS_DISABLE_HINT_LABEL or defaultLabelFlags) }) + if (!params.mAllowRedundantPopupKeys) + params.baseKeys = baseKeys.flatMap { it.map { it.toKeyParams(params) } } val allFunctionalKeys = RawKeyboardParser.parseLayout(params, context, true) adjustBottomFunctionalRowAndBaseKeys(allFunctionalKeys, baseKeys)