From 3989c1348adce97d58e66539bba4cc42f3fa41bb Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sun, 5 Jan 2025 22:05:55 +0100 Subject: [PATCH] make remove redundant popup keys work on base layout only fixes #1052 --- app/src/main/java/helium314/keyboard/keyboard/Key.java | 1 - .../keyboard/keyboard/internal/KeyboardParams.java | 8 ++++++-- .../keyboard/keyboard/internal/PopupKeySpec.java | 4 ++-- .../keyboard/internal/keyboard_parser/KeyboardParser.kt | 2 ++ 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/keyboard/Key.java b/app/src/main/java/helium314/keyboard/keyboard/Key.java index f27d8c3c..edfd089d 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 @@ public class Key implements Comparable { 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 ca1f950e..2a1db5c8 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 class KeyboardParams { } 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 class KeyboardParams { 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 c39eaa6f..a1b41b79 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 final class PopupKeySpec { 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 d347f107..1b0a870f 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)