commit b6aa4857d2849774da05b3f90b057f27d35f6fea
parent 952d43b5e23443cbda6f607b2d4c3e0dea39e4c7
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sun, 16 Mar 2025 22:40:53 +0100

fix(core): snap score changes

Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>

Diffstat:
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/SnapScoreChanges.kt | 29++++++++++++++++-------------
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/wrapper/impl/composer/ComposerContext.kt | 13+++++++++++++
2 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/SnapScoreChanges.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/SnapScoreChanges.kt @@ -42,25 +42,28 @@ class SnapScoreChanges: Feature("Snap Score Changes") { if (event.viewClassName.endsWith("ProfileFlatlandFriendSnapScoreIdentityPillDialogView")) { event.view.post { - val composerViewNode = event.view.getComposerViewNode() ?: return@post - val surface = composerViewNode.getChildren().getOrNull(1) ?: return@post + event.view.getComposerContext()!!.enqueueNextRenderCallback { + val composerViewNode = event.view.getComposerViewNode() ?: return@enqueueNextRenderCallback + val surface = composerViewNode.getChildren().getOrNull(1) ?: return@enqueueNextRenderCallback - val snapTextView = surface.getChildren().lastOrNull { - it.getClassName() == "com.snap.composer.views.ComposerSnapTextView" - } ?: return@post + val snapTextView = surface.getChildren().lastOrNull { + it.getClassName() == "com.snap.composer.views.ComposerSnapTextView" + } ?: return@enqueueNextRenderCallback - val currentFriendScore = scores[lastViewedUserId] ?: (event.view.getComposerContext()?.viewModel?.getObjectField("_friendSnapScore") as? Double)?.toLong() ?: return@post + val currentFriendScore = scores[lastViewedUserId] ?: (event.view.getComposerContext()?.viewModel?.getObjectField("_friendSnapScore") as? Double)?.toLong() ?: return@enqueueNextRenderCallback - val oldSnapScore = context.bridgeClient.getTracker().updateFriendScore( - lastViewedUserId ?: return@post, - currentFriendScore - ) + val oldSnapScore = context.bridgeClient.getTracker().updateFriendScore( + lastViewedUserId ?: return@enqueueNextRenderCallback, + currentFriendScore + ) - val diff = currentFriendScore - oldSnapScore + val diff = currentFriendScore - oldSnapScore - snapTextView.setAttribute("value", "${if (oldSnapScore != -1L && diff > 0) "\uD83D\uDCC8 +$diff !\n\n" else ""}Last Checked Score: ${oldSnapScore.takeIf { it != -1L } ?: "N/A"}") - event.view.invalidate() + snapTextView.setAttribute("value", "${if (oldSnapScore != -1L && diff > 0) "\uD83D\uDCC8 +$diff !\n\n" else ""}Last Checked Score: ${oldSnapScore.takeIf { it != -1L } ?: "N/A"}") + event.view.postInvalidate() + } + event.view.postInvalidate() } } } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/wrapper/impl/composer/ComposerContext.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/wrapper/impl/composer/ComposerContext.kt @@ -2,10 +2,23 @@ package me.rhunk.snapenhance.core.wrapper.impl.composer import me.rhunk.snapenhance.core.wrapper.AbstractWrapper import java.lang.ref.WeakReference +import java.lang.reflect.Proxy class ComposerContext(obj: Any): AbstractWrapper(obj) { val componentPath by field<String>("componentPath") val viewModel by field<Any?>("innerViewModel") val moduleName by field<String>("moduleName") val componentContext by field<WeakReference<Any?>>("componentContext") + + fun enqueueNextRenderCallback(callback: () -> Unit) { + val method = instanceNonNull()::class.java.methods.firstOrNull { + it.name == "onNextLayout" + } + method?.invoke(instanceNonNull(), Proxy.newProxyInstance( + instanceNonNull()::class.java.classLoader, + arrayOf(method.parameterTypes[0]) + ) { _, _, _ -> + callback() + }) + } } \ No newline at end of file