Не срабатывает "маска" слушателя нажатий в editText при изменении введенного текста

Проблема на скриншоте. Использование масок ввода пока не предлагать. Вместо второй тройки должна ставиться точка. По идее надо вычислять именно количество символов перед курсором...

введите сюда описание изображения

fun FirstFragment.inputTextWatch() {
    currentField.addTextChangedListener(object : TextWatcher {
        var isAdded = true

        override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}

        override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
            isAdded = count < after
        }

        override fun afterTextChanged(s: Editable) {
            if (isAdded) {
                when (s.length) {
                    2 -> s.append(".")
                    5 -> s.append(".")
                }
            }
        }
    })
}

Предполагаю что можно использовать вместо append в этой части кода какую-то другую инструкцию... Например, replace()... Но правильно не могу собрать код, ошибка. Понятно что S имеет другой тип.... И вообще нужно со строкой работать как с массивом - что-то вроде

val character = s[2]
if (character != ".") s[2] = "."  ....

override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
 isAdded = count < after
  when (s.length) {
        when (s.length) {
            3 -> s.replaceRange(3, 3, ".")
            6 -> s.replaceRange(6, 6, ".")
        }
  }
}

Ответы (1 шт):

Автор решения: Eugene Krivenja

Вот решение "в лоб". Больше за вас писать код не буду :)
Работа со строками - одна из основ программирования.

currentField.addTextChangedListener(object : TextWatcher {
    override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}

    override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}

    override fun afterTextChanged(s: Editable) {
        var str = s.toString().replace(".", "")
        if (str.length > 2) {
            str = "${str.take(2)}.${str.drop(2)}"
        }
        if (str.length > 5) {
            str = "${str.take(5)}.${str.drop(5)}"
        }
        if (str != s.toString()) {
            s.replace(0, s.length, str)
        }
    }
})
→ Ссылка