50 lines
1.4 KiB
Kotlin
50 lines
1.4 KiB
Kotlin
package org.amnezia.vpn.protocol
|
|
|
|
import android.os.Bundle
|
|
|
|
private const val RX_BYTES_KEY = "rxBytes"
|
|
private const val TX_BYTES_KEY = "txBytes"
|
|
|
|
@Suppress("DataClassPrivateConstructor")
|
|
data class Statistics private constructor(
|
|
val rxBytes: Long = 0L,
|
|
val txBytes: Long = 0L
|
|
) {
|
|
|
|
private constructor(builder: Builder) : this(builder.rxBytes, builder.txBytes)
|
|
|
|
@Suppress("SuspiciousEqualsCombination")
|
|
fun isEmpty(): Boolean = this === EMPTY_STATISTICS || this == EMPTY_STATISTICS
|
|
|
|
class Builder {
|
|
var rxBytes: Long = 0L
|
|
private set
|
|
|
|
var txBytes: Long = 0L
|
|
private set
|
|
|
|
fun setRxBytes(rxBytes: Long) = apply { this.rxBytes = rxBytes }
|
|
fun setTxBytes(txBytes: Long) = apply { this.txBytes = txBytes }
|
|
|
|
fun build(): Statistics =
|
|
if (rxBytes + txBytes == 0L) EMPTY_STATISTICS
|
|
else Statistics(this)
|
|
}
|
|
|
|
companion object {
|
|
val EMPTY_STATISTICS: Statistics = Statistics()
|
|
|
|
inline fun build(block: Builder.() -> Unit): Statistics = Builder().apply(block).build()
|
|
}
|
|
}
|
|
|
|
fun Bundle.putStatistics(statistics: Statistics) {
|
|
putLong(RX_BYTES_KEY, statistics.rxBytes)
|
|
putLong(TX_BYTES_KEY, statistics.txBytes)
|
|
}
|
|
|
|
fun Bundle.getStatistics(): Statistics =
|
|
Statistics.build {
|
|
setRxBytes(getLong(RX_BYTES_KEY))
|
|
setTxBytes(getLong(TX_BYTES_KEY))
|
|
}
|