Files
vpnhotspotmod/mobile/src/main/java/be/mygod/vpnhotspot/room/Converters.kt
Mygod 1145b0f23b Support editing native Wi-Fi AP configurations
Support for repeater channel on Android 5 has been dropped because I am lazy.
2019-04-04 18:06:18 +08:00

49 lines
1.3 KiB
Kotlin

package be.mygod.vpnhotspot.room
import android.text.TextUtils
import androidx.room.TypeConverter
import be.mygod.vpnhotspot.util.useParcel
import java.net.InetAddress
import java.nio.ByteBuffer
import java.nio.ByteOrder
object Converters {
@JvmStatic
@TypeConverter
fun persistCharSequence(cs: CharSequence) = useParcel { p ->
TextUtils.writeToParcel(cs, p, 0)
p.marshall()
}
@JvmStatic
@TypeConverter
fun unpersistCharSequence(data: ByteArray) = useParcel { p ->
p.unmarshall(data, 0, data.size)
p.setDataPosition(0)
TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p)
}
@JvmStatic
@TypeConverter
fun persistInetAddress(address: InetAddress): ByteArray = address.address
@JvmStatic
@TypeConverter
fun unpersistInetAddress(data: ByteArray): InetAddress = InetAddress.getByAddress(data)
}
fun String.macToLong(): Long = ByteBuffer.allocate(8).run {
order(ByteOrder.LITTLE_ENDIAN)
mark()
put(split(':').map { Integer.parseInt(it, 16).toByte() }.toByteArray())
reset()
long
}
fun Iterable<Byte>.macToString() = joinToString(":") { "%02x".format(it) }
fun Long.macToString(): String = ByteBuffer.allocate(8).run {
order(ByteOrder.LITTLE_ENDIAN)
putLong(this@macToString)
array().take(6).macToString()
}