mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 21:27:47 +02:00
feat(experimental): custom streaks expiration format
This commit is contained in:
@ -35,6 +35,7 @@ class ClassMapper(
|
||||
FriendingDataSourcesMapper(),
|
||||
OperaViewerParamsMapper(),
|
||||
MemoriesPresenterMapper(),
|
||||
StreaksExpirationMapper(),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,47 @@
|
||||
package me.rhunk.snapenhance.mapper.impl
|
||||
|
||||
import me.rhunk.snapenhance.mapper.AbstractClassMapper
|
||||
import me.rhunk.snapenhance.mapper.ext.findConstString
|
||||
import me.rhunk.snapenhance.mapper.ext.getClassName
|
||||
import me.rhunk.snapenhance.mapper.ext.searchNextFieldReference
|
||||
import java.lang.reflect.Modifier
|
||||
|
||||
class StreaksExpirationMapper: AbstractClassMapper("StreaksExpirationMapper") {
|
||||
val hourGlassTimeRemainingField = string("hourGlassTimeRemainingField")
|
||||
val expirationTimeField = string("expirationTimeField")
|
||||
|
||||
val streaksFormatterClass = string("streaksFormatterClass")
|
||||
val formatStreaksTextMethod = string("formatStreaksTextMethod")
|
||||
|
||||
init {
|
||||
mapper {
|
||||
var streaksExpirationClassName: String? = null
|
||||
for (clazz in classes) {
|
||||
val toStringMethod = clazz.methods.firstOrNull { it.name == "toString" } ?: continue
|
||||
if (toStringMethod.implementation?.findConstString("StreaksExpiration(", contains = true) != true) continue
|
||||
|
||||
streaksExpirationClassName = clazz.getClassName()
|
||||
toStringMethod.implementation?.apply {
|
||||
hourGlassTimeRemainingField.set(searchNextFieldReference("hourGlassTimeRemaining", contains = true)?.name)
|
||||
expirationTimeField.set(searchNextFieldReference("expirationTime", contains = true)?.name)
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
if (streaksExpirationClassName == null) return@mapper
|
||||
|
||||
for (clazz in classes) {
|
||||
val formatStreaksTextDexMethod = clazz.methods.firstOrNull { method ->
|
||||
Modifier.isStatic(method.accessFlags) &&
|
||||
method.returnType == "Ljava/lang/String;" &&
|
||||
method.parameterTypes.let {
|
||||
it.size >= 4 && it[0] == "Ljava/util/Map;" && it[2] == "Ljava/lang/Integer;" && it[3].contains(streaksExpirationClassName)
|
||||
}
|
||||
} ?: continue
|
||||
streaksFormatterClass.set(clazz.getClassName())
|
||||
formatStreaksTextMethod.set(formatStreaksTextDexMethod.name)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user