I had a similar issue, but no flash, just no change to the text at all. I decided the EditText input was simply not responding to this commitCorrection call or not accepting it for some reason, so I used deleteSurroundingText and commitText instead (I was replacing whatever word the cursor was in, if any):
// limit=0 allows trailing empty strings to represent end-of-string split
fun getWordBeforeCursor() : String {
val arr = wordbreak.split(ic.getTextBeforeCursor(255, 0), 0)
Log.d(TAG, "words before: " + arr.joinToString(","))
return if (arr.isEmpty()) "" else arr.last()
}
fun getWordAfterCursor() : String {
val arr = wordbreak.split(ic.getTextAfterCursor(255, 0), 0)
Log.d(TAG, "words after: " + arr.joinToString(","))
return if (arr.isEmpty()) "" else arr.first()
}
fun getCursorPosition() : Int {
val extracted: ExtractedText = ic.getExtractedText(ExtractedTextRequest(), 0);
return extracted.startOffset + extracted.selectionStart;
}
try {
...
val backward = getWordBeforeCursor()
val forward = getWordAfterCursor()
Log.d(TAG, "cursor position: " + getCursorPosition())
Log.d(TAG, "found adjacent text: [" + backward + "_" + forward + "]")
// if in the middle of a word, delete it
if (forward.isNotEmpty() && backward.isNotEmpty()) {
//instead of this:
//ic.commitCorrection(CorrectionInfo(getCursorPosition()-backward.length, backward + forward, icon.text))
//do this:
ic.deleteSurroundingText(backward.length, forward.length)
ic.commitText(newText, 1)
}
...