mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 13:17:42 +02:00
wrapper enum delegate
This commit is contained in:
@ -2,10 +2,17 @@ package me.rhunk.snapenhance.data.wrapper
|
||||
|
||||
import de.robv.android.xposed.XposedHelpers
|
||||
import me.rhunk.snapenhance.util.CallbackBuilder
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
abstract class AbstractWrapper(
|
||||
protected var instance: Any?
|
||||
) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
inner class EnumAccessor<T>(private val fieldName: String, private val defaultValue: T) {
|
||||
operator fun getValue(obj: Any, property: KProperty<*>): T = getEnumValue(fieldName, defaultValue as Enum<*>) as T
|
||||
operator fun setValue(obj: Any, property: KProperty<*>, value: Any) = setEnumValue(fieldName, value as Enum<*>)
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun newEmptyInstance(clazz: Class<*>): Any {
|
||||
return CallbackBuilder.createEmptyObject(clazz.constructors[0]) ?: throw NullPointerException()
|
||||
@ -23,6 +30,8 @@ abstract class AbstractWrapper(
|
||||
return instance.toString()
|
||||
}
|
||||
|
||||
protected fun <T> enum(fieldName: String, defaultValue: T) = EnumAccessor(fieldName, defaultValue)
|
||||
|
||||
fun <T : Enum<*>> getEnumValue(fieldName: String, defaultValue: T): T {
|
||||
val mContentType = XposedHelpers.getObjectField(instance, fieldName) as Enum<*>
|
||||
return java.lang.Enum.valueOf(defaultValue::class.java, mContentType.name) as T
|
||||
|
@ -10,6 +10,5 @@ class Message(obj: Any?) : AbstractWrapper(obj) {
|
||||
val messageContent get() = MessageContent(instanceNonNull().getObjectField("mMessageContent"))
|
||||
val messageDescriptor get() = MessageDescriptor(instanceNonNull().getObjectField("mDescriptor"))
|
||||
val messageMetadata get() = MessageMetadata(instanceNonNull().getObjectField("mMetadata"))
|
||||
var messageState get() = getEnumValue("mState", MessageState.COMMITTED)
|
||||
set(value) = setEnumValue("mState", value)
|
||||
var messageState by enum("mState", MessageState.COMMITTED)
|
||||
}
|
@ -9,7 +9,5 @@ class MessageContent(obj: Any?) : AbstractWrapper(obj) {
|
||||
var content
|
||||
get() = instanceNonNull().getObjectField("mContent") as ByteArray
|
||||
set(value) = instanceNonNull().setObjectField("mContent", value)
|
||||
var contentType
|
||||
get() = getEnumValue("mContentType", ContentType.UNKNOWN)
|
||||
set(value) = setEnumValue("mContentType", value)
|
||||
var contentType by enum("mContentType", ContentType.UNKNOWN)
|
||||
}
|
@ -7,11 +7,7 @@ import me.rhunk.snapenhance.util.getObjectField
|
||||
class MessageMetadata(obj: Any?) : AbstractWrapper(obj){
|
||||
val createdAt: Long get() = instanceNonNull().getObjectField("mCreatedAt") as Long
|
||||
val readAt: Long get() = instanceNonNull().getObjectField("mReadAt") as Long
|
||||
var playableSnapState: PlayableSnapState
|
||||
get() = getEnumValue("mPlayableSnapState", PlayableSnapState.PLAYABLE)
|
||||
set(value) {
|
||||
setEnumValue("mPlayableSnapState", value)
|
||||
}
|
||||
var playableSnapState by enum("mPlayableSnapState", PlayableSnapState.PLAYABLE)
|
||||
|
||||
private fun getUUIDList(name: String): List<SnapUUID> {
|
||||
return (instanceNonNull().getObjectField(name) as List<*>).map { SnapUUID(it!!) }
|
||||
|
Reference in New Issue
Block a user