Skip to content

Instantly share code, notes, and snippets.

@iserbin
Forked from NezSpencer/MainActivity.kt
Created October 30, 2019 11:06
Show Gist options
  • Select an option

  • Save iserbin/fb0bb29c5557291e62d10ce673ef22c7 to your computer and use it in GitHub Desktop.

Select an option

Save iserbin/fb0bb29c5557291e62d10ce673ef22c7 to your computer and use it in GitHub Desktop.

Revisions

  1. @NezSpencer NezSpencer created this gist Oct 1, 2018.
    91 changes: 91 additions & 0 deletions MainActivity.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,91 @@
    package com.nezspencer.test

    import android.os.Bundle
    import android.support.annotation.NonNull
    import android.support.v7.app.AppCompatActivity
    import android.text.Editable
    import android.text.TextUtils
    import android.text.TextWatcher
    import android.widget.EditText
    import java.text.NumberFormat

    class MainActivity : AppCompatActivity() {

    var beforeText : String = ""
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val editText = findViewById<EditText>(R.id.et_amount)
    editText.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, start: Int, count: Int, after: Int) {
    beforeText = p0.toString()
    }

    override fun onTextChanged(p0: CharSequence?, start: Int, before: Int, count: Int) {

    if (p0 == null)
    return
    // 1. get cursor position : p0 = start + before
    val initialCursorPosition = start + before
    //2. get digit count after cursor position : c0
    val numOfDigitsToRightOfCursor = getNumberOfDigits(beforeText.substring(initialCursorPosition,
    beforeText.length))
    val newAmount = formatAmount(p0.toString())
    editText.removeTextChangedListener(this)
    editText.setText(newAmount)
    //set new cursor position
    editText.setSelection(getNewCursorPosition(numOfDigitsToRightOfCursor, newAmount))
    editText.addTextChangedListener(this)



    }

    })

    }

    fun formatAmount(@NonNull amount: String): String {

    val result = removeNonNumeric(amount)
    val amt = if (!TextUtils.isEmpty(result) && TextUtils.isDigitsOnly(result)) result.toLong() else 0
    val formatter = NumberFormat.getNumberInstance()
    return getString(R.string.naira).plus(formatter.format(amt))
    }

    private fun removeNonNumeric(@NonNull numberString: String) : String {
    var numbers : String = ""
    for (i in numberString){
    if (i.isDigit())
    numbers += i
    }
    return numbers
    }

    private fun getNewCursorPosition(digitCountToRightOfCursor : Int, numberString : String) : Int{
    var position = 0
    var c = digitCountToRightOfCursor
    for (i in numberString.reversed()) {
    if (c == 0)
    break

    if (i.isDigit())
    c --
    position ++


    }
    return numberString.length - position
    }

    private fun getNumberOfDigits(@NonNull text : String) : Int{
    var count = 0
    for (i in text)
    if (i.isDigit())
    count++
    return count
    }
    }