diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java index aecacd5f6..69a722807 100644 --- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java +++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java @@ -1761,7 +1761,7 @@ public void hapticAndAudioFeedback(final int code, final int repeatCount) { return; break; case KeyCode.ARROW_RIGHT, KeyCode.ARROW_DOWN, KeyCode.WORD_RIGHT, KeyCode.PAGE_DOWN: - if (!mInputLogic.mConnection.canForwardDeleteCharacters()) + if (mInputLogic.mConnection.noTextAfterCursor()) return; break; } diff --git a/app/src/main/java/helium314/keyboard/latin/RichInputConnection.java b/app/src/main/java/helium314/keyboard/latin/RichInputConnection.java index 151e44804..a5657bf5d 100644 --- a/app/src/main/java/helium314/keyboard/latin/RichInputConnection.java +++ b/app/src/main/java/helium314/keyboard/latin/RichInputConnection.java @@ -363,9 +363,9 @@ public boolean canDeleteCharacters() { return mExpectedSelStart > 0; } - public boolean canForwardDeleteCharacters() { + public boolean noTextAfterCursor() { final CharSequence after = getTextAfterCursor(1, 0); - return !TextUtils.isEmpty(after); + return TextUtils.isEmpty(after); } /** @@ -728,12 +728,17 @@ public boolean setSelection(final int start, final int end) { public void selectAll() { if (!isConnected()) return; - mIC.performContextMenuAction(android.R.id.selectAll); + if (mExpectedSelStart != mExpectedSelEnd && mExpectedSelStart == 0 && noTextAfterCursor()) { // all text already selected + mIC.setSelection(mExpectedSelEnd, mExpectedSelEnd); + } else mIC.performContextMenuAction(android.R.id.selectAll); } public void selectWord(final SpacingAndPunctuations spacingAndPunctuations, final String script) { if (!isConnected()) return; - if (mExpectedSelStart != mExpectedSelEnd) return; // already something selected + if (mExpectedSelStart != mExpectedSelEnd) { // already something selected + mIC.setSelection(mExpectedSelEnd, mExpectedSelEnd); + return; + } final TextRange range = getWordRangeAtCursor(spacingAndPunctuations, script); if (range == null) return; mIC.setSelection(mExpectedSelStart - range.getNumberOfCharsInWordBeforeCursor(), mExpectedSelStart + range.getNumberOfCharsInWordAfterCursor());