TP-65294 | Updated transformation logic for crash fix & support for amount editing via cursor movement (#11240)

This commit is contained in:
Ujjwal Kumar
2024-06-11 20:20:07 +05:30
committed by GitHub
parent 5b482d497b
commit cd4ca415cf
2 changed files with 20 additions and 3 deletions

View File

@@ -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]
}
}

View File

@@ -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 = '@'