fixed recomposing one more time and simplified the Backspace logic greatly
This commit is contained in:
parent
715b13d74a
commit
a77f14cacb
6 changed files with 20 additions and 35 deletions
|
|
@ -11,7 +11,7 @@ import io.github.sspanak.tt9.util.Ternary;
|
|||
abstract public class AbstractHandler extends InputMethodService {
|
||||
// hardware key handlers
|
||||
abstract protected Ternary onBack();
|
||||
abstract public boolean onBackspace(boolean hold);
|
||||
abstract public boolean onBackspace(int repeat);
|
||||
abstract public boolean onHotkey(int keyCode, boolean repeat, boolean validateOnly);
|
||||
abstract protected boolean onNumber(int key, boolean hold, int repeat);
|
||||
abstract public boolean onOK();
|
||||
|
|
|
|||
|
|
@ -60,11 +60,7 @@ abstract class KeyPadHandler extends UiHandler {
|
|||
|
||||
// "backspace" key must repeat its function when held down, so we handle it in a special way
|
||||
if (Key.isBackspace(settings, keyCode)) {
|
||||
if (
|
||||
(settings.getBackspaceAcceleration() && event.getRepeatCount() > 0 && event.getRepeatCount() % SettingsStore.BACKSPACE_ACCELERATION_HARD_KEY_REPEAT_DEBOUNCE == 0 && onBackspace(true))
|
||||
|| (settings.getBackspaceAcceleration() && event.getRepeatCount() > 0)
|
||||
|| onBackspace(false)
|
||||
) {
|
||||
if (onBackspace(event.getRepeatCount())) {
|
||||
return Key.setHandled(KeyEvent.KEYCODE_DEL, true);
|
||||
} else {
|
||||
Key.setHandled(KeyEvent.KEYCODE_DEL, false);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import io.github.sspanak.tt9.ime.modes.InputMode;
|
|||
import io.github.sspanak.tt9.ime.modes.ModePredictive;
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
import io.github.sspanak.tt9.languages.LanguageCollection;
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
import io.github.sspanak.tt9.ui.UI;
|
||||
import io.github.sspanak.tt9.util.Text;
|
||||
|
||||
|
|
@ -109,7 +110,7 @@ public abstract class TypingHandler extends KeyPadHandler {
|
|||
|
||||
|
||||
@Override
|
||||
public boolean onBackspace(boolean hold) {
|
||||
public boolean onBackspace(int repeat) {
|
||||
// Dialer fields seem to handle backspace on their own and we must ignore it,
|
||||
// otherwise, keyDown race condition occur for all keys.
|
||||
if (mInputMode.isPassthrough()) {
|
||||
|
|
@ -124,17 +125,21 @@ public abstract class TypingHandler extends KeyPadHandler {
|
|||
suggestionOps.cancelDelayedAccept();
|
||||
resetKeyRepeat();
|
||||
|
||||
if (!hold && mInputMode.onBackspace()) {
|
||||
if (settings.getBackspaceAcceleration() && repeat > 0 && repeat % SettingsStore.BACKSPACE_ACCELERATION_REPEAT_DEBOUNCE != 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (repeat == 0 && mInputMode.onBackspace()) {
|
||||
getSuggestions();
|
||||
} else {
|
||||
suggestionOps.commitCurrent(false);
|
||||
mInputMode.reset();
|
||||
|
||||
int prevChars = hold ? Math.max(textField.getPaddedWordBeforeCursorLength(), 1) : 1;
|
||||
textField.deleteChars(prevChars);
|
||||
int charsToDelete = settings.getBackspaceAcceleration() && repeat > 0 ? Math.max(textField.getPaddedWordBeforeCursorLength(), 1) : 1;
|
||||
textField.deleteChars(charsToDelete);
|
||||
}
|
||||
|
||||
if (settings.getBackspaceRecomposing() && !hold && suggestionOps.isEmpty()) {
|
||||
if (settings.getBackspaceRecomposing() && repeat == 0 && suggestionOps.isEmpty()) {
|
||||
final String previousWord = textField.getWordBeforeCursor(mLanguage, 0, false);
|
||||
if (mInputMode.recompose(previousWord) && textField.recompose(previousWord)) {
|
||||
getSuggestions();
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ public class SettingsStore extends SettingsUI {
|
|||
|
||||
/************* internal settings *************/
|
||||
public static final int BACKSPACE_ACCELERATION_MAX_CHARS = 20;
|
||||
public static final int BACKSPACE_ACCELERATION_HARD_KEY_REPEAT_DEBOUNCE = 5;
|
||||
public static final int BACKSPACE_ACCELERATION_REPEAT_DEBOUNCE = 5;
|
||||
public final static int CLIPBOARD_PREVIEW_LENGTH = 20;
|
||||
public final static int CUSTOM_WORDS_IMPORT_MAX_LINES = 250;
|
||||
public final static int CUSTOM_WORDS_MAX = 1000;
|
||||
|
|
@ -22,7 +22,6 @@ public class SettingsStore extends SettingsUI {
|
|||
public final static byte SLOW_QUERY_TIME = 50; // ms
|
||||
public final static int SOFT_KEY_DOUBLE_CLICK_DELAY = 500; // ms
|
||||
public final static int SOFT_KEY_REPEAT_DELAY = 40; // ms
|
||||
public final static int SOFT_KEY_BACKSPACE_ACCELERATION_REPEAT_DELAY = SOFT_KEY_REPEAT_DELAY * BACKSPACE_ACCELERATION_HARD_KEY_REPEAT_DEBOUNCE; // ms
|
||||
public final static int SOFT_KEY_TITLE_SIZE = 18; // sp
|
||||
public final static float SOFT_KEY_COMPLEX_LABEL_TITLE_RELATIVE_SIZE = 0.55f;
|
||||
public final static float SOFT_KEY_COMPLEX_LABEL_ARABIC_TITLE_RELATIVE_SIZE = 0.72f;
|
||||
|
|
|
|||
|
|
@ -6,11 +6,10 @@ import android.view.KeyEvent;
|
|||
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.languages.LanguageKind;
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
import io.github.sspanak.tt9.ui.Vibration;
|
||||
|
||||
public class SoftBackspaceKey extends SoftKey {
|
||||
private boolean hold;
|
||||
private int repeat = 0;
|
||||
|
||||
public SoftBackspaceKey(Context context) {
|
||||
super(context);
|
||||
|
|
@ -27,30 +26,25 @@ public class SoftBackspaceKey extends SoftKey {
|
|||
@Override
|
||||
final protected boolean handlePress() {
|
||||
super.handlePress();
|
||||
hold = false;
|
||||
repeat = 0;
|
||||
return deleteText();
|
||||
}
|
||||
|
||||
@Override
|
||||
final protected void handleHold() {
|
||||
hold = true;
|
||||
repeat++;
|
||||
deleteText();
|
||||
}
|
||||
|
||||
@Override
|
||||
final protected boolean handleRelease() {
|
||||
vibrate(hold ? Vibration.getReleaseVibration() : Vibration.getNoVibration());
|
||||
hold = false;
|
||||
vibrate(repeat > 0 ? Vibration.getReleaseVibration() : Vibration.getNoVibration());
|
||||
repeat = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
final protected int getLongPressRepeatDelay() {
|
||||
return tt9 != null && tt9.getSettings().getBackspaceAcceleration() ? SettingsStore.SOFT_KEY_BACKSPACE_ACCELERATION_REPEAT_DELAY : super.getLongPressRepeatDelay();
|
||||
}
|
||||
|
||||
private boolean deleteText() {
|
||||
if (validateTT9Handler() && !tt9.onBackspace(hold && tt9.getSettings().getBackspaceAcceleration())) {
|
||||
if (validateTT9Handler() && !tt9.onBackspace(repeat)) {
|
||||
// Limited or special numeric field (e.g. formatted money or dates) cannot always return
|
||||
// the text length, therefore onBackspace() seems them as empty and does nothing. This results
|
||||
// in fallback to the default hardware key action. Here we simulate the hardware BACKSPACE.
|
||||
|
|
|
|||
|
|
@ -124,20 +124,11 @@ public class SoftKey extends androidx.appcompat.widget.AppCompatButton implement
|
|||
handleHold();
|
||||
lastPressedKey = ignoreLastPressedKey ? -1 : getId();
|
||||
repeatHandler.removeCallbacks(this::repeatOnLongPress);
|
||||
repeatHandler.postDelayed(this::repeatOnLongPress, getLongPressRepeatDelay());
|
||||
repeatHandler.postDelayed(this::repeatOnLongPress, SettingsStore.SOFT_KEY_REPEAT_DELAY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the delay between repeated calls to "handleHold()" when the SoftKey is being held.
|
||||
* Used in "repeatOnLongPress()".
|
||||
*/
|
||||
protected int getLongPressRepeatDelay() {
|
||||
return SettingsStore.SOFT_KEY_REPEAT_DELAY;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* preventRepeat
|
||||
* Prevents "handleHold()" from being called repeatedly when the SoftKey is being held.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue