Add option to undo slide deletion

This commit is contained in:
Aleksandras Kostarevas 2024-04-29 22:16:45 -04:00
parent 740bd08e28
commit 474839f60b
5 changed files with 49 additions and 3 deletions

View File

@ -1002,9 +1002,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
if(mCursorMoved && currentKey.getCode() == Constants.CODE_DELETE) { if(mCursorMoved && currentKey.getCode() == Constants.CODE_DELETE) {
sListener.onUpWithDeletePointerActive(); sListener.onUpWithDeletePointerActive();
} } else if(mCursorMoved) {
if(mCursorMoved) {
sListener.onUpWithPointerActive(); sListener.onUpWithPointerActive();
} }

View File

@ -1422,6 +1422,27 @@ public class LatinIMELegacy implements KeyboardActionListener,
@Override @Override
public void onUpWithDeletePointerActive() { public void onUpWithDeletePointerActive() {
if (mInputLogic.mConnection.hasSelection()) { if (mInputLogic.mConnection.hasSelection()) {
CharSequence selection = mInputLogic.mConnection.getSelectedText(0);
if(selection != null) {
ArrayList<SuggestedWordInfo> info = new ArrayList<>();
info.add(new SuggestedWordInfo(
selection.toString(),
"",
0,
SuggestedWordInfo.KIND_UNDO,
null,
0,
0));
showSuggestionStrip(new SuggestedWords(info,
null,
null,
false,
false,
false,
0,
0));
((LatinIME)mInputMethodService).languageModelFacilitator.ignoreNextUpdate();
}
onCodeInput( onCodeInput(
Constants.CODE_DELETE, Constants.CODE_DELETE,
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE,

View File

@ -256,6 +256,7 @@ public class SuggestedWords {
public static final int KIND_RESUMED = 9; public static final int KIND_RESUMED = 9;
public static final int KIND_OOV_CORRECTION = 10; // Most probable string correction public static final int KIND_OOV_CORRECTION = 10; // Most probable string correction
public static final int KIND_EMOJI_SUGGESTION = 11; public static final int KIND_EMOJI_SUGGESTION = 11;
public static final int KIND_UNDO = 12;
public static final int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000; public static final int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
public static final int KIND_FLAG_EXACT_MATCH = 0x40000000; public static final int KIND_FLAG_EXACT_MATCH = 0x40000000;

View File

@ -303,6 +303,18 @@ public final class InputLogic {
// Manual pick affects the contents of the editor, so we take note of this. It's important // Manual pick affects the contents of the editor, so we take note of this. It's important
// for the sequence of language switching. // for the sequence of language switching.
inputTransaction.setDidAffectContents(); inputTransaction.setDidAffectContents();
if(suggestionInfo.mKindAndFlags == SuggestedWordInfo.KIND_UNDO) {
inputTransaction.setRequiresUpdateSuggestions();
mConnection.finishComposingText();
mWordComposer.reset();
mConnection.commitText(suggestionInfo.mWord, 1);
return inputTransaction;
}
mConnection.beginBatchEdit(); mConnection.beginBatchEdit();
if (SpaceState.PHANTOM == mSpaceState && suggestion.length() > 0 if (SpaceState.PHANTOM == mSpaceState && suggestion.length() > 0
// In the batch input mode, a manually picked suggested word should just replace // In the batch input mode, a manually picked suggested word should just replace

View File

@ -398,6 +398,9 @@ public class LanguageModelFacilitator(
wordComposer, values.inputStyle, true, -1, locale, suggestionResults, settingsValues.mAutoCorrectionThreshold) wordComposer, values.inputStyle, true, -1, locale, suggestionResults, settingsValues.mAutoCorrectionThreshold)
job.cancel() job.cancel()
// TODO
if(values.sequenceId < currentSequenceId) return
inputLogic.mSuggestionStripViewAccessor.showSuggestionStrip(suggestedWords) inputLogic.mSuggestionStripViewAccessor.showSuggestionStrip(suggestedWords)
if(values.composedData.mIsBatchMode) { if(values.composedData.mIsBatchMode) {
@ -490,6 +493,11 @@ public class LanguageModelFacilitator(
if(!inputLogic.mConnection.isConnected) return if(!inputLogic.mConnection.isConnected) return
if(ignoringNextUpdate) {
ignoringNextUpdate = false
return
}
try { try {
val wordComposer = inputLogic.mWordComposer val wordComposer = inputLogic.mWordComposer
val ngramContext = inputLogic.getNgramContextFromNthPreviousWordForSuggestion( val ngramContext = inputLogic.getNgramContextFromNthPreviousWordForSuggestion(
@ -621,5 +629,11 @@ public class LanguageModelFacilitator(
public fun onStartInput() { public fun onStartInput() {
transformerDisabled = false transformerDisabled = false
numConsecutiveTimeouts = 0 numConsecutiveTimeouts = 0
ignoringNextUpdate = false
}
var ignoringNextUpdate = false
fun ignoreNextUpdate() {
ignoringNextUpdate = true
} }
} }