fix: streak expiration info
This commit is contained in:
@@ -15,10 +15,21 @@ class CustomStreaksExpirationFormat: Feature("CustomStreaksExpirationFormat", lo
|
||||
|
||||
override fun onActivityCreate() {
|
||||
val expirationFormat by context.config.experimental.customStreaksExpirationFormat
|
||||
if (expirationFormat.isNotEmpty() || context.config.userInterface.streakExpirationInfo.get()) {
|
||||
context.mappings.useMapper(StreaksExpirationMapper::class) {
|
||||
runCatching {
|
||||
simpleStreaksFormatterClass.getAsClass()?.hook(formatSimpleStreaksTextMethod.get() ?: return@useMapper, HookStage.BEFORE) { param ->
|
||||
param.setResult(null)
|
||||
}
|
||||
}.onFailure {
|
||||
context.log.warn("Failed to hook simpleStreaksFormatterClass : " + it.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (expirationFormat.isEmpty()) return
|
||||
|
||||
context.mappings.useMapper(StreaksExpirationMapper::class) {
|
||||
findClass(streaksFormatterClass.get() ?: return@useMapper).hook(formatStreaksTextMethod.get() ?: return@useMapper, HookStage.AFTER) { param ->
|
||||
streaksFormatterClass.getAsClass()?.hook(formatStreaksTextMethod.get() ?: return@useMapper, HookStage.AFTER) { param ->
|
||||
val streaksCount = param.argNullable(2) ?: 0
|
||||
val streaksExpiration = param.argNullable<Any>(3) ?: return@hook
|
||||
|
||||
|
||||
@@ -10,10 +10,38 @@ class StreaksExpirationMapper: AbstractClassMapper("StreaksExpirationMapper") {
|
||||
val hourGlassTimeRemainingField = string("hourGlassTimeRemainingField")
|
||||
val expirationTimeField = string("expirationTimeField")
|
||||
|
||||
val streaksFormatterClass = string("streaksFormatterClass")
|
||||
val streaksFormatterClass = classReference("streaksFormatterClass")
|
||||
val formatStreaksTextMethod = string("formatStreaksTextMethod")
|
||||
|
||||
val simpleStreaksFormatterClass = classReference("simpleStreaksFormatterClass")
|
||||
val formatSimpleStreaksTextMethod = string("formatSimpleStreaksTextMethod")
|
||||
|
||||
init {
|
||||
mapper {
|
||||
var streaksResultClass: String? = null
|
||||
for (clazz in classes) {
|
||||
val toStringMethod = clazz.methods.firstOrNull { it.name == "toString" } ?: continue
|
||||
if (toStringMethod.implementation?.findConstString("StreaksResult(", contains = true) != true) continue
|
||||
streaksResultClass = clazz.type
|
||||
break
|
||||
}
|
||||
|
||||
if (streaksResultClass == 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 >= 3 && it.first() == streaksResultClass && it[1] == "Ljava/lang/String;" && it[2] == "J"
|
||||
}
|
||||
} ?: continue
|
||||
simpleStreaksFormatterClass.set(clazz.getClassName())
|
||||
formatSimpleStreaksTextMethod.set(formatStreaksTextDexMethod.name)
|
||||
return@mapper
|
||||
}
|
||||
}
|
||||
|
||||
mapper {
|
||||
var streaksExpirationClassName: String? = null
|
||||
for (clazz in classes) {
|
||||
|
||||
Reference in New Issue
Block a user