Added support for leading zeros.
This commit is contained in:
parent
5761d9e3e6
commit
77d5e3d835
1 changed files with 36 additions and 10 deletions
|
@ -19,28 +19,54 @@ package net.thauvin.erik.android.tesremoteprogrammer.filters
|
||||||
|
|
||||||
import android.text.InputFilter
|
import android.text.InputFilter
|
||||||
import android.text.Spanned
|
import android.text.Spanned
|
||||||
|
import org.jetbrains.anko.AnkoLogger
|
||||||
|
|
||||||
class MinMaxFilter : InputFilter {
|
class MinMaxFilter : InputFilter, AnkoLogger {
|
||||||
private val min: Int
|
private val min: Int
|
||||||
private val max: Int
|
private val max: Int
|
||||||
private val size: Int
|
private val size: Int
|
||||||
|
private val zeros: Boolean
|
||||||
|
|
||||||
constructor(min: Int, max: Int, size: Int) {
|
constructor(min: Int, max: Int, size: Int, zeros: Boolean) {
|
||||||
this.min = min
|
this.min = min
|
||||||
this.max = max
|
this.max = max
|
||||||
this.size = size
|
this.size = size
|
||||||
|
this.zeros = zeros
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int): CharSequence? {
|
override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int): CharSequence? {
|
||||||
try {
|
val input = (dest.toString() + source.toString())
|
||||||
val input = (dest.toString() + source.toString()).toInt()
|
|
||||||
val len = dest.length + source.length
|
|
||||||
if ((min > 0 && size > 1 && len < size && input == 0) || input in IntRange(min, max)) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
} catch (nef: NumberFormatException) {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (isInRange(input, size, min, max, zeros)) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isInRange(s: String, size: Int, min: Int, max: Int, zeros: Boolean): Boolean {
|
||||||
|
try {
|
||||||
|
var i = s.toInt()
|
||||||
|
val len = s.length
|
||||||
|
|
||||||
|
if (zeros) {
|
||||||
|
if (size > 1 && len != size) {
|
||||||
|
if (i == 0) {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
i = s.padEnd(size, '0').toInt()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (len > 1 && s.startsWith("0")) {
|
||||||
|
return false
|
||||||
|
} else if (len < max.toString().length) {
|
||||||
|
i = s.padEnd(size, '0').toInt()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return i in IntRange(min, max)
|
||||||
|
} catch (nfe: NumberFormatException) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue