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 index 1af35cbb..abe4a94e 100644 --- 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 index 1b5c1a90..0396e8ed 100644 --- 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("componentPath") val viewModel by field("innerViewModel") val moduleName by field("moduleName") val componentContext by field>("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