Skip to content

Commit ba7ad8f

Browse files
committed
feat(expander): immediate expand & fix revert
1 parent 7877afb commit ba7ad8f

3 files changed

Lines changed: 45 additions & 1 deletion

File tree

app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1450,6 +1450,32 @@ private void handleNonSeparatorEvent(final Event event, final SettingsValues set
14501450
mWordComposer.setCapitalizedModeAtStartComposingTime(inputTransaction.getShiftState());
14511451
}
14521452
setComposingTextInternal(getTextWithUnderline(mWordComposer.getTypedWord()), 1);
1453+
if (helium314.keyboard.latin.utils.TextExpanderUtils.INSTANCE.isEnabled(mLatinIME)
1454+
&& helium314.keyboard.latin.utils.TextExpanderUtils.INSTANCE.isImmediateEnabled(mLatinIME)) {
1455+
final String typedWord = mWordComposer.getTypedWord();
1456+
final String prefix = helium314.keyboard.latin.utils.TextExpanderUtils.INSTANCE.getPrefix(mLatinIME);
1457+
if (prefix.isEmpty()) {
1458+
final String expanded = helium314.keyboard.latin.utils.TextExpanderUtils.INSTANCE.getExpandedWord(typedWord, mLatinIME);
1459+
if (expanded != null) {
1460+
commitExpandedText(typedWord, expanded);
1461+
resetComposingState(true);
1462+
}
1463+
} else {
1464+
final CharSequence textBefore = mConnection.getTextBeforeCursor(50, 0);
1465+
if (textBefore != null) {
1466+
final String textStr = textBefore.toString();
1467+
final String targetSuffix = prefix + typedWord;
1468+
if (textStr.toLowerCase(java.util.Locale.US).endsWith(targetSuffix.toLowerCase(java.util.Locale.US))) {
1469+
final String expanded = helium314.keyboard.latin.utils.TextExpanderUtils.INSTANCE.getExpandedWord(targetSuffix, mLatinIME);
1470+
if (expanded != null) {
1471+
mConnection.deleteTextBeforeCursor(prefix.length());
1472+
commitExpandedText(targetSuffix, expanded);
1473+
resetComposingState(true);
1474+
}
1475+
}
1476+
}
1477+
}
1478+
}
14531479
} else {
14541480
final boolean swapWeakSpace = tryStripSpaceAndReturnWhetherShouldSwapInstead(event, inputTransaction);
14551481

@@ -1640,7 +1666,7 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu
16401666
final String expectedAfter = mLastExpandedText.substring(beforeLen);
16411667
if (textBefore != null && textBefore.toString().equals(expectedBefore)
16421668
&& textAfter != null && textAfter.toString().equals(expectedAfter)) {
1643-
mConnection.deleteSurroundingText(beforeLen, afterLen);
1669+
mConnection.setSelection(expectedCursor - beforeLen, expectedCursor + afterLen);
16441670
mConnection.commitText(mLastShortcutText, 1);
16451671
mLastExpandedText = null;
16461672
mLastShortcutText = null;

app/src/main/java/helium314/keyboard/latin/utils/TextExpanderUtils.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ import java.util.Locale
1515
object TextExpanderUtils {
1616
const val PREF_ENABLED = "pref_text_expander_enabled"
1717
const val PREF_PREFIX = "pref_text_expander_prefix"
18+
const val PREF_IMMEDIATE = "pref_text_expander_immediate"
1819
const val PREF_DATA = "pref_text_expander_data"
1920
const val REGEX_PREFIX = "__regex__:"
2021

2122
fun isEnabled(context: Context): Boolean {
2223
return context.prefs().getBoolean(PREF_ENABLED, false)
2324
}
2425

26+
fun isImmediateEnabled(context: Context): Boolean {
27+
return context.prefs().getBoolean(PREF_IMMEDIATE, false)
28+
}
29+
2530
fun getPrefix(context: Context): String {
2631
return context.prefs().getString(PREF_PREFIX, "") ?: ""
2732
}

app/src/main/java/helium314/keyboard/settings/screens/TextExpanderScreen.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ fun TextExpanderScreen(onClickBack: () -> Unit) {
7979
mutableStateOf(TextExpanderUtils.isEnabled(context))
8080
}
8181

82+
var isImmediateEnabled by remember {
83+
mutableStateOf(TextExpanderUtils.isImmediateEnabled(context))
84+
}
85+
8286
var shortcutsMap by remember {
8387
mutableStateOf(TextExpanderUtils.getShortcuts(context))
8488
}
@@ -311,6 +315,15 @@ fun TextExpanderScreen(onClickBack: () -> Unit) {
311315
onCheckedChange = { isExpanderEnabled = it }
312316
)
313317

318+
SwitchPreference(
319+
name = "Expand immediately",
320+
key = TextExpanderUtils.PREF_IMMEDIATE,
321+
default = false,
322+
description = "Expand shortcuts immediately without pressing space.",
323+
enabled = isExpanderEnabled,
324+
onCheckedChange = { isImmediateEnabled = it }
325+
)
326+
314327
// 2. Custom Prefix Configuration
315328
OutlinedTextField(
316329
value = prefixText,

0 commit comments

Comments
 (0)