TP-65294 | Updated transformation logic for crash fix & support for amount editing via cursor movement (#11240)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2022 by Navi Technologies Limited
|
||||
* * Copyright © 2022-2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
@@ -11,6 +11,7 @@ import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.input.OffsetMapping
|
||||
import androidx.compose.ui.text.input.TransformedText
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import com.navi.pay.utils.COMMA_CHAR
|
||||
import com.navi.pay.utils.formattedCurrency
|
||||
|
||||
class CurrencyMaskTransformation(private val amountMaxLength: Int) : VisualTransformation {
|
||||
@@ -21,14 +22,29 @@ class CurrencyMaskTransformation(private val amountMaxLength: Int) : VisualTrans
|
||||
else text.text
|
||||
val formattedText = trimmedAmount.formattedCurrency()
|
||||
|
||||
val originalToTransformed = mutableListOf<Int>()
|
||||
val transformedToOriginal = mutableListOf<Int>()
|
||||
var specialCharsCount = 0
|
||||
|
||||
formattedText.forEachIndexed { index, char ->
|
||||
if (char == COMMA_CHAR) {
|
||||
specialCharsCount++
|
||||
} else {
|
||||
originalToTransformed.add(index)
|
||||
}
|
||||
transformedToOriginal.add(index - specialCharsCount)
|
||||
}
|
||||
originalToTransformed.add(originalToTransformed.maxOrNull()?.plus(1) ?: 0)
|
||||
transformedToOriginal.add(transformedToOriginal.maxOrNull()?.plus(1) ?: 0)
|
||||
|
||||
val numberOffsetTranslator =
|
||||
object : OffsetMapping {
|
||||
override fun originalToTransformed(offset: Int): Int {
|
||||
return formattedText.length
|
||||
return originalToTransformed[offset]
|
||||
}
|
||||
|
||||
override fun transformedToOriginal(offset: Int): Int {
|
||||
return trimmedAmount.length
|
||||
return transformedToOriginal[offset]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -196,6 +196,7 @@ const val PIPE = "|"
|
||||
const val DOT = "."
|
||||
const val DECIMAL = "."
|
||||
const val COMMA = ","
|
||||
const val COMMA_CHAR = ','
|
||||
const val UTF8 = "UTF-8"
|
||||
const val X = "X"
|
||||
const val AT_THE_RATE_CHAR = '@'
|
||||
|
||||
Reference in New Issue
Block a user