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:
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