use serializable for parcelable

This commit is contained in:
Kr328 committed 2019-11-24 14:10:48 +08:00
1 parent 6646593c5b
commit 438392ddf6
4 files changed
+67 -2

No files matched your search

@@ -9,6 +9,7 @@ import java.io.DataOutputStream
import java.io.File
import java.io.IOException
@Suppress("SameParameterValue")
abstract class BaseClash(private val controllerPath: File) {
protected fun <R> runControl(
command: Int,
@@ -0,0 +1,41 @@
package com.github.kr328.clash.core.serialization
import android.os.Parcel
import kotlinx.serialization.*
import kotlinx.serialization.modules.EmptyModule
object Parcels : AbstractSerialFormat(EmptyModule) {
fun <T> dump(serializer: SerializationStrategy<T>, obj: T, parcel: Parcel) {
serializer.serialize(ParcelsEncoder(parcel), obj)
}
fun <T> load(deserializer: DeserializationStrategy<T>, parcel: Parcel): T {
return deserializer.deserialize(ParcelsDecoder(parcel))
}
private class ParcelsEncoder(private val parcel: Parcel) :
ElementValueEncoder() {
override fun encodeValue(value: Any) {
parcel.writeValue(value)
}
override fun encodeNull() {
parcel.writeValue(null)
}
}
class ParcelsDecoder(private val parcel: Parcel) : ElementValueDecoder() {
private var nextObject: Any? = null
override fun decodeNotNullMark(): Boolean {
nextObject = parcel.readValue(Parcels::class.java.classLoader)
return nextObject != null
}
override fun decodeNull(): Nothing? = null
override fun decodeValue(): Any {
return nextObject ?: throw NullPointerException("Parcel read data null")
}
}
}
@@ -1,9 +1,30 @@
package com.github.kr328.clash.core.transact
import android.os.Parcel
import android.os.Parcelable
import com.github.kr328.clash.core.serialization.Parcels
import kotlinx.serialization.Serializable
@Serializable
data class Proxy(val type: String) {
data class Proxy(val type: String): Parcelable {
@Serializable
data class Packet(val proxies: Map<String, Proxy>)
override fun writeToParcel(parcel: Parcel, flags: Int) {
Parcels.dump(serializer(), this, parcel)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Proxy> {
override fun createFromParcel(parcel: Parcel): Proxy {
return Parcels.load(serializer(), parcel)
}
override fun newArray(size: Int): Array<Proxy?> {
return arrayOfNulls(size)
}
}
}
@@ -3,5 +3,7 @@ package com.github.kr328.clash.service;
import com.github.kr328.clash.core.ClashProcessStatus;
interface IClashObserver {
void onStatusChanged(in ClashProcessStatus status);
void onProxyChanged();
void onNewLog();
void onProcessStatusChanged(in ClashProcessStatus status);
}