diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java index 0c6743dd..f5a7baaf 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java @@ -92,7 +92,8 @@ public abstract class TypingHandler extends KeyPadHandler { // otherwise, keyDown race condition occur for all keys. // 2. Allow the assigned key to function normally, when there is no text (e.g. "Back" navigates back) // 3. Some app may need special treatment, so let it be. - if (mInputMode.isPassthrough() || !(textField.isThereText() || appHacks.onBackspace(mInputMode))) { + boolean noTextBeforeCursor = textField.getStringBeforeCursor(1).isEmpty(); + if (mInputMode.isPassthrough() || noTextBeforeCursor || appHacks.onBackspace(mInputMode)) { Logger.d("onBackspace", "backspace ignored"); mInputMode.reset(); return false; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java index 9d161996..11a4a462 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java @@ -31,7 +31,17 @@ public class AppHacks { * weird side effects occur. Nevertheless, all other text fields in the app are fine, so we detect only these two particular ones. */ private boolean isKindleInvertedTextField() { - return isAppField("com.amazon.kindle", EditorInfo.TYPE_CLASS_TEXT); + int titleImeOptions = EditorInfo.IME_ACTION_NONE | EditorInfo.IME_ACTION_SEND | EditorInfo.IME_FLAG_NAVIGATE_NEXT; + int titleAlternativeImeOptions = titleImeOptions | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; // sometimes the title field is different for no reason + int authorImeOptions = EditorInfo.IME_ACTION_SEND | EditorInfo.IME_ACTION_GO | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; + + return + isAppField("com.amazon.kindle", EditorInfo.TYPE_CLASS_TEXT) + && ( + editorInfo.imeOptions == titleImeOptions + || editorInfo.imeOptions == titleAlternativeImeOptions + || editorInfo.imeOptions == authorImeOptions + ); } @@ -107,7 +117,6 @@ public class AppHacks { public boolean onBackspace(InputMode inputMode) { if (isKindleInvertedTextField()) { inputMode.clearWordStem(); - return true; } else if (isTermux()) { return settings.getKeyBackspace() != KeyEvent.KEYCODE_BACK; } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java index 27bd1eac..955f4153 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java @@ -137,15 +137,6 @@ public class TextField { } - /** - * getStringAfterCursor - * A simplified helper that return up to 50 characters after the cursor and "just works". - */ - public String getStringAfterCursor() { - return getStringAfterCursor(50); - } - - /** * getStringBeforeCursor * A simplified helper that return up to 50 characters before the cursor and "just works".