Как обнаружить и удалить символ эмодзи в юникодной последовательности из inputConnection?
Допустим, у меня есть поле edittext, и я должен реализовать на нем функциональность "backspace".
Удалять простой символ буквы хорошо, это работает:
Character.isLetter(inputConnection.getTextBeforeCursor(1, 0).toString()) {
inputConnection.deleteSurroundingText(1, 0);
}
Проблема возникает, когда персонаж является символом смайликов.
Его длина выражается как 2 utf-16 символов, например:
Ухмыляющееся лицо:
Код Unicode: U+1F600
Java escape: \ud83d\ude00
В таком случае я бы просто удалил 2 символа.
Тем не менее, существуют случаи, когда эмодзи формируется из нескольких кодовых точек, например:
Радужный флаг: ️
Последовательность кодов Unicode: U+1F3F3 U+FE0F U+200D U+1F308
Java escape: \ud83c\udff3\ufe0f\u200d\ud83c\udf08
Когда я нажимаю клавишу Backspace, удаляется только один java-экранированный символ, а не целые эмодзи. Например, только флаг \udf08
последняя часть будет удалена, предоставляя пользователю испорченный символ эмодзи. Проверка суррогатных пар не вытащила меня из дыры, я бы все равно облажался с эмодзи.
Как я могу правильно определить правильное количество символов для удаления, чтобы я удалял 1 целый эмодзи при нажатии на клавишу возврата? (для примера флага мне нужно получить номер 6, чтобы полностью удалить его)