Peter Cai
83f593a703
We would like to reduce dependency on Apache commons as much as possible. Although we probably won't be able to build this in AOSP anyway, it is still good to move away when we have better alternatives in the Kotlin runtime.
89 lines
2.7 KiB
Kotlin
89 lines
2.7 KiB
Kotlin
package com.truphone.util
|
|
|
|
import java.io.InputStream
|
|
import java.lang.StringBuilder
|
|
|
|
object TextUtil {
|
|
private val HEX_DIGITS = charArrayOf(
|
|
'0', '1', '2', '3', '4', '5',
|
|
'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
|
|
)
|
|
|
|
/**
|
|
* Converts the given byte array to its hex representation.
|
|
*
|
|
* @param data The byte array to convert.
|
|
* @return Hex-encoded data as a string.
|
|
* @see .toHexString
|
|
*/
|
|
@JvmStatic
|
|
fun toHexString(data: ByteArray?): String? {
|
|
return if (data == null) null else toHexString(data, 0, data.size)
|
|
}
|
|
|
|
/**
|
|
* Converts the given byte array slice to its hex representation.
|
|
*
|
|
* @param data The byte array to convert.
|
|
* @param offset Slice start.
|
|
* @param length Slice length.
|
|
* @return Hex-encoded data as a string.
|
|
*/
|
|
@JvmStatic
|
|
fun toHexString(data: ByteArray, offset: Int, length: Int): String {
|
|
var offset = offset
|
|
var length = length
|
|
val result = CharArray(length shl 1)
|
|
length += offset
|
|
var i = 0
|
|
while (offset < length) {
|
|
result[i++] = HEX_DIGITS[data[offset].toInt() ushr 4 and 0x0F]
|
|
result[i++] = HEX_DIGITS[data[offset].toInt() and 0x0F]
|
|
++offset
|
|
}
|
|
return String(result)
|
|
}
|
|
|
|
/**
|
|
* Converts a big-endian representation of ICCID into little-endian
|
|
* Big-endian representation is used internally in communication with the SIM.
|
|
*
|
|
* @param iccid The ICCID to be converted
|
|
*/
|
|
@JvmStatic
|
|
fun iccidBigToLittle(iccid: String): String {
|
|
val builder = StringBuilder()
|
|
for (i in 0 until iccid.length / 2) {
|
|
builder.append(iccid[i * 2 + 1])
|
|
if (iccid[i * 2] != 'F') builder.append(iccid[i * 2])
|
|
}
|
|
return builder.toString()
|
|
}
|
|
|
|
/**
|
|
* Converts a little-endian representation of ICCID into big-endian
|
|
*
|
|
* @param iccid The ICCID to be converted
|
|
*/
|
|
@JvmStatic
|
|
fun iccidLittleToBig(iccidLittle: String): String {
|
|
val builder = StringBuilder()
|
|
for (i in 0 until iccidLittle.length / 2) {
|
|
builder.append(iccidLittle[i * 2 + 1])
|
|
builder.append(iccidLittle[i * 2])
|
|
}
|
|
if (iccidLittle.length % 2 == 1) {
|
|
builder.append('F')
|
|
builder.append(iccidLittle[iccidLittle.length - 1])
|
|
}
|
|
return builder.toString()
|
|
}
|
|
|
|
/*
|
|
* Read an InputStream into a ByteArray
|
|
* This is exposed to the Java side as a convenience
|
|
* TODO: Remove when we migrate the full code base to Kotlin
|
|
*/
|
|
@JvmStatic
|
|
fun readInputStream(i: InputStream): ByteArray = i.readBytes()
|
|
} |