1
0
Fork 0

fixed v30.0 regression: ABC mode allowing selection of only the first letter per key when Next Suggestion hotkey is unset

This commit is contained in:
sspanak 2024-04-18 10:42:22 +03:00 committed by Dimo Karaivanov
parent 6225448eee
commit 2600ceef6b
2 changed files with 14 additions and 19 deletions

View file

@ -1,8 +1,6 @@
package io.github.sspanak.tt9.ime; package io.github.sspanak.tt9.ime;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.db.DictionaryLoader; import io.github.sspanak.tt9.db.DictionaryLoader;
@ -11,15 +9,11 @@ import io.github.sspanak.tt9.ime.modes.InputMode;
import io.github.sspanak.tt9.ime.modes.ModeABC; import io.github.sspanak.tt9.ime.modes.ModeABC;
import io.github.sspanak.tt9.ime.modes.ModePredictive; import io.github.sspanak.tt9.ime.modes.ModePredictive;
import io.github.sspanak.tt9.languages.LanguageCollection; import io.github.sspanak.tt9.languages.LanguageCollection;
import io.github.sspanak.tt9.languages.LanguageKind;
import io.github.sspanak.tt9.preferences.helpers.Hotkeys; import io.github.sspanak.tt9.preferences.helpers.Hotkeys;
import io.github.sspanak.tt9.ui.UI; import io.github.sspanak.tt9.ui.UI;
import io.github.sspanak.tt9.ui.dialogs.AddWordDialog; import io.github.sspanak.tt9.ui.dialogs.AddWordDialog;
public abstract class HotkeyHandler extends TypingHandler { public abstract class HotkeyHandler extends TypingHandler {
private boolean isSystemRTL = false;
@Override @Override
protected void onInit() { protected void onInit() {
if (settings.areHotkeysInitialized()) { if (settings.areHotkeysInitialized()) {
@ -28,13 +22,6 @@ public abstract class HotkeyHandler extends TypingHandler {
} }
@Override
protected boolean onStart(InputConnection connection, EditorInfo field) {
isSystemRTL = LanguageKind.isRTL(LanguageCollection.getDefault(this));
return super.onStart(connection, field);
}
@Override public boolean onBack() { @Override public boolean onBack() {
return settings.isMainLayoutNumpad(); return settings.isMainLayoutNumpad();
} }
@ -208,11 +195,7 @@ public abstract class HotkeyHandler extends TypingHandler {
return true; return true;
} }
suggestionOps.cancelDelayedAccept(); scrollSuggestions(backward);
backward = isSystemRTL != backward;
suggestionOps.scrollTo(backward ? -1 : 1);
mInputMode.setWordStem(suggestionOps.getCurrent(), true);
appHacks.setComposingTextWithHighlightedStem(suggestionOps.getCurrent(), mInputMode);
return true; return true;
} }

View file

@ -19,6 +19,7 @@ import io.github.sspanak.tt9.ime.modes.InputMode;
import io.github.sspanak.tt9.ime.modes.ModePredictive; import io.github.sspanak.tt9.ime.modes.ModePredictive;
import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Language;
import io.github.sspanak.tt9.languages.LanguageCollection; import io.github.sspanak.tt9.languages.LanguageCollection;
import io.github.sspanak.tt9.languages.LanguageKind;
import io.github.sspanak.tt9.ui.UI; import io.github.sspanak.tt9.ui.UI;
import io.github.sspanak.tt9.util.Text; import io.github.sspanak.tt9.util.Text;
@ -29,6 +30,7 @@ public abstract class TypingHandler extends KeyPadHandler {
@NonNull protected InputType inputType = new InputType(null, null); @NonNull protected InputType inputType = new InputType(null, null);
@NonNull protected TextField textField = new TextField(null, null); @NonNull protected TextField textField = new TextField(null, null);
protected SuggestionOps suggestionOps; protected SuggestionOps suggestionOps;
private boolean isSystemRTL;
// input // input
protected ArrayList<Integer> allowedInputModes = new ArrayList<>(); protected ArrayList<Integer> allowedInputModes = new ArrayList<>();
@ -62,6 +64,7 @@ public abstract class TypingHandler extends KeyPadHandler {
return false; return false;
} }
isSystemRTL = LanguageKind.isRTL(LanguageCollection.getDefault(this));
resetKeyRepeat(); resetKeyRepeat();
mInputMode = getInputMode(); mInputMode = getInputMode();
determineTextCase(); determineTextCase();
@ -156,7 +159,7 @@ public abstract class TypingHandler extends KeyPadHandler {
} }
if (mInputMode.shouldSelectNextSuggestion() && !suggestionOps.isEmpty()) { if (mInputMode.shouldSelectNextSuggestion() && !suggestionOps.isEmpty()) {
onHotkey(settings.getKeyNextSuggestion(), false, false); scrollSuggestions(false);
suggestionOps.scheduleDelayedAccept(mInputMode.getAutoAcceptTimeout()); suggestionOps.scheduleDelayedAccept(mInputMode.getAutoAcceptTimeout());
} else { } else {
getSuggestions(); getSuggestions();
@ -326,4 +329,13 @@ public abstract class TypingHandler extends KeyPadHandler {
forceShowWindowIfHidden(); forceShowWindowIfHidden();
} }
protected void scrollSuggestions(boolean backward) {
suggestionOps.cancelDelayedAccept();
backward = isSystemRTL != backward;
suggestionOps.scrollTo(backward ? -1 : 1);
mInputMode.setWordStem(suggestionOps.getCurrent(), true);
appHacks.setComposingTextWithHighlightedStem(suggestionOps.getCurrent(), mInputMode);
}
} }