1
0
Fork 0

textField.getWordBeforeCursor() is no longer called when recomposing is not supported or on every key press (when searching for word pairs)

This commit is contained in:
sspanak 2025-03-28 14:44:57 +02:00 committed by Dimo Karaivanov
parent 675c6e9f23
commit 464e2001be
7 changed files with 33 additions and 20 deletions

View file

@ -147,8 +147,8 @@ public abstract class TypingHandler extends KeyPadHandler {
} }
if (settings.getBackspaceRecomposing() && repeat == 0 && suggestionOps.isEmpty() && !DictionaryLoader.getInstance(this).isRunning()) { if (settings.getBackspaceRecomposing() && repeat == 0 && suggestionOps.isEmpty() && !DictionaryLoader.getInstance(this).isRunning()) {
final String previousWord = textField.getWordBeforeCursor(mLanguage, 0, false); final String previousWord = mInputMode.recompose();
if (mInputMode.recompose(previousWord) && textField.recompose(previousWord)) { if (textField.recompose(previousWord)) {
getSuggestions(previousWord); getSuggestions(previousWord);
} else { } else {
mInputMode.reset(); mInputMode.reset();

View file

@ -252,7 +252,7 @@ public class TextField extends InputField {
* the given "text". Returns "true" if the operation was successful, "false" otherwise. * the given "text". Returns "true" if the operation was successful, "false" otherwise.
*/ */
public boolean recompose(String text) { public boolean recompose(String text) {
if (connection == null || !isComposingSupported) { if (text == null || connection == null || !isComposingSupported) {
return false; return false;
} }

View file

@ -135,7 +135,7 @@ abstract public class InputMode {
public boolean shouldReplaceLastLetter(int nextKey, boolean hold) { return false; } public boolean shouldReplaceLastLetter(int nextKey, boolean hold) { return false; }
public boolean shouldSelectNextSuggestion() { return false; } public boolean shouldSelectNextSuggestion() { return false; }
public boolean recompose(String word) { return false; } public String recompose() { return null; }
public void replaceLastLetter() {} public void replaceLastLetter() {}
public void reset() { public void reset() {

View file

@ -133,27 +133,28 @@ class ModeWords extends ModeCheonjiin {
} }
@Override @Override
public boolean recompose(String word) { public String recompose() {
if (!language.hasSpaceBetweenWords() || language.isTranscribed()) { if (!language.hasSpaceBetweenWords() || language.isTranscribed()) {
return false; return null;
} }
if (word == null || word.length() < 2 || word.contains(" ")) { String previousWord = textField.getWordBeforeCursor(language, 0, false);
Logger.d(LOG_TAG, "Not recomposing invalid word: '" + word + "'"); if (previousWord.length() < 2 || previousWord.contains(" ")) {
Logger.d(LOG_TAG, "Not recomposing invalid word: '" + previousWord + "'");
textCase = settings.getTextCase(); textCase = settings.getTextCase();
return false; return null;
} }
try { try {
reset(); reset();
digitSequence = language.getDigitSequenceForWord(word); digitSequence = language.getDigitSequenceForWord(previousWord);
textCase = new Text(language, word).getTextCase(); textCase = new Text(language, previousWord).getTextCase();
} catch (InvalidLanguageCharactersException e) { } catch (InvalidLanguageCharactersException e) {
Logger.d(LOG_TAG, "Not recomposing word: '" + word + "'. " + e.getMessage()); Logger.d(LOG_TAG, "Not recomposing word: '" + previousWord + "'. " + e.getMessage());
return false; return null;
} }
return true; return previousWord;
} }
@Override @Override

View file

@ -56,7 +56,7 @@ public class IdeogramPredictions extends WordPredictions {
@Override @Override
@NonNull @NonNull
protected String getWordBeforeCursor(@NonNull String currentWord) { protected String getPenultimateWord(@NonNull String currentWord) {
int currentWordLength = currentWord.length(); int currentWordLength = currentWord.length();
int lastWordLength = lastTypedWord.length(); int lastWordLength = lastTypedWord.length();
int requiredTextLength = currentWordLength + lastWordLength; int requiredTextLength = currentWordLength + lastWordLength;
@ -97,7 +97,7 @@ public class IdeogramPredictions extends WordPredictions {
return; return;
} }
String previousWord = getWordBeforeCursor(nativeWord); String previousWord = getPenultimateWord(nativeWord);
if (previousWord.equals(lastTypedWord)) { if (previousWord.equals(lastTypedWord)) {
// Logger.d("LOG_TAG", "====+> Pairing words: " + previousWord + " + " + nativeWord); // Logger.d("LOG_TAG", "====+> Pairing words: " + previousWord + " + " + nativeWord);
DataStore.addWordPair(language, previousWord, nativeWord, sequence); DataStore.addWordPair(language, previousWord, nativeWord, sequence);

View file

@ -34,7 +34,7 @@ abstract public class Predictions {
} }
public Predictions setDigitSequence(String digitSequence) { public Predictions setDigitSequence(@NonNull String digitSequence) {
this.digitSequence = digitSequence; this.digitSequence = digitSequence;
return this; return this;
} }

View file

@ -20,17 +20,27 @@ public class WordPredictions extends Predictions {
private boolean isStemFuzzy; private boolean isStemFuzzy;
private String lastEnforcedTopWord; private String lastEnforcedTopWord;
protected String penultimateWord;
public WordPredictions(SettingsStore settings, TextField textField) { public WordPredictions(SettingsStore settings, TextField textField) {
super(settings); super(settings);
lastEnforcedTopWord = ""; lastEnforcedTopWord = "";
localeWordsSorter = new LocaleWordsSorter(null); localeWordsSorter = new LocaleWordsSorter(null);
penultimateWord = "";
stem = ""; stem = "";
this.textField = textField; this.textField = textField;
} }
@Override
public Predictions setDigitSequence(@NonNull String digitSequence) {
if (digitSequence.length() == 1 || digitSequence.equals(this.digitSequence)) {
penultimateWord = ""; // enforce reloading the penultimate word
}
return super.setDigitSequence(digitSequence);
}
@Override @Override
public Predictions setLanguage(@NonNull Language language) { public Predictions setLanguage(@NonNull Language language) {
super.setLanguage(language); super.setLanguage(language);
@ -296,7 +306,9 @@ public class WordPredictions extends Predictions {
} }
ArrayList<String> rearrangedWords = new ArrayList<>(); ArrayList<String> rearrangedWords = new ArrayList<>();
String penultimateWord = getWordBeforeCursor(words.get(0)); if (penultimateWord.isEmpty()) {
penultimateWord = getPenultimateWord(words.get(0));
}
String pairWord = DataStore.getWord2(language, penultimateWord, digitSequence); String pairWord = DataStore.getWord2(language, penultimateWord, digitSequence);
int morePopularIndex = TextTools.indexOfIgnoreCase(words, pairWord); int morePopularIndex = TextTools.indexOfIgnoreCase(words, pairWord);
@ -324,7 +336,7 @@ public class WordPredictions extends Predictions {
*/ */
protected void pairWithPreviousWord(@NonNull String word, @NonNull String sequence) { protected void pairWithPreviousWord(@NonNull String word, @NonNull String sequence) {
if (settings.getPredictWordPairs() && sequence.length() == digitSequence.length()) { if (settings.getPredictWordPairs() && sequence.length() == digitSequence.length()) {
DataStore.addWordPair(language, getWordBeforeCursor(word), word, sequence); DataStore.addWordPair(language, getPenultimateWord(word), word, sequence);
} }
} }
@ -334,7 +346,7 @@ public class WordPredictions extends Predictions {
* we have a separate method for that. * we have a separate method for that.
*/ */
@NonNull @NonNull
protected String getWordBeforeCursor(@NonNull String currentWord) { protected String getPenultimateWord(@NonNull String currentWord) {
return textField.getWordBeforeCursor(language, 1, true); return textField.getWordBeforeCursor(language, 1, true);
} }
} }