mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-14 14:02:44 +00:00
reload text on selection updates even if selection is as expected
if composing region was changed e.g. KDE Connect removes composing region after entering a letter, and we should be able to deal with it this is not really a good solution, as it will reload the suggestions, which flashes the underline and has noticeable performance impact fixes #1141
This commit is contained in:
parent
d08afcd279
commit
d3bd97a104
3 changed files with 13 additions and 6 deletions
|
@ -1120,7 +1120,7 @@ public class LatinIME extends InputMethodService implements
|
||||||
final SettingsValues settingsValues = mSettings.getCurrent();
|
final SettingsValues settingsValues = mSettings.getCurrent();
|
||||||
if (isInputViewShown()
|
if (isInputViewShown()
|
||||||
&& mInputLogic.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd,
|
&& mInputLogic.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd,
|
||||||
settingsValues)) {
|
composingSpanStart, composingSpanEnd, settingsValues)) {
|
||||||
mKeyboardSwitcher.requestUpdatingShiftState(getCurrentAutoCapsState(),
|
mKeyboardSwitcher.requestUpdatingShiftState(getCurrentAutoCapsState(),
|
||||||
getCurrentRecapitalizeState());
|
getCurrentRecapitalizeState());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1061,10 +1061,17 @@ public final class RichInputConnection implements PrivateCommandPerformer {
|
||||||
* @return whether this is a belated expected update or not.
|
* @return whether this is a belated expected update or not.
|
||||||
*/
|
*/
|
||||||
public boolean isBelatedExpectedUpdate(final int oldSelStart, final int newSelStart,
|
public boolean isBelatedExpectedUpdate(final int oldSelStart, final int newSelStart,
|
||||||
final int oldSelEnd, final int newSelEnd) {
|
final int oldSelEnd, final int newSelEnd, final int composingSpanStart, final int composingSpanEnd) {
|
||||||
// This update is "belated" if we are expecting it. That is, mExpectedSelStart and
|
// This update is "belated" if we are expecting it. That is, mExpectedSelStart and
|
||||||
// mExpectedSelEnd match the new values that the TextView is updating TO.
|
// mExpectedSelEnd match the new values that the TextView is updating TO.
|
||||||
if (mExpectedSelStart == newSelStart && mExpectedSelEnd == newSelEnd) return true;
|
if (mExpectedSelStart == newSelStart && mExpectedSelEnd == newSelEnd) {
|
||||||
|
if (composingSpanEnd - composingSpanStart < mComposingText.length()) {
|
||||||
|
// composing span is smaller than expected, maybe changed by the app (see #1141)
|
||||||
|
// larger composing span is ok, because mComposingText only contains the word up to the cursor
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
// This update is not belated if mExpectedSelStart and mExpectedSelEnd match the old
|
// This update is not belated if mExpectedSelStart and mExpectedSelEnd match the old
|
||||||
// values, and one of newSelStart or newSelEnd is updated to a different value. In this
|
// values, and one of newSelStart or newSelEnd is updated to a different value. In this
|
||||||
// case, it is likely that something other than the IME has moved the selection endpoint
|
// case, it is likely that something other than the IME has moved the selection endpoint
|
||||||
|
|
|
@ -346,9 +346,9 @@ public final class InputLogic {
|
||||||
* @param settingsValues the current values of the settings.
|
* @param settingsValues the current values of the settings.
|
||||||
* @return whether the cursor has moved as a result of user interaction.
|
* @return whether the cursor has moved as a result of user interaction.
|
||||||
*/
|
*/
|
||||||
public boolean onUpdateSelection(final int oldSelStart, final int oldSelEnd,
|
public boolean onUpdateSelection(final int oldSelStart, final int oldSelEnd, final int newSelStart,
|
||||||
final int newSelStart, final int newSelEnd, final SettingsValues settingsValues) {
|
final int newSelEnd, final int composingSpanStart, final int composingSpanEnd, final SettingsValues settingsValues) {
|
||||||
if (mConnection.isBelatedExpectedUpdate(oldSelStart, newSelStart, oldSelEnd, newSelEnd)) {
|
if (mConnection.isBelatedExpectedUpdate(oldSelStart, newSelStart, oldSelEnd, newSelEnd, composingSpanStart, composingSpanEnd)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// TODO: the following is probably better done in resetEntireInputState().
|
// TODO: the following is probably better done in resetEntireInputState().
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue