commit deae5f301387c48ed16c46c9a9ab8a67293a26dd
parent 6bae2de516919226e4e959fda3ef4163124d0ed9
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Mon,  7 Jul 2025 22:17:13 +0200

fix(core): composer native bridge

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

Diffstat:
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/data/SnapClassCache.kt | 2+-
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/ComposerHooks.kt | 7+++----
2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/data/SnapClassCache.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/data/SnapClassCache.kt @@ -17,7 +17,7 @@ class SnapClassCache ( val feedEntry by lazy { findClass("com.snapchat.client.messaging.FeedEntry") } val conversation by lazy { findClass("com.snapchat.client.messaging.Conversation") } val feedManager by lazy { findClass("com.snapchat.client.messaging.FeedManager\$CppProxy") } - val nativeBridge by lazy { findClass("com.snapchat.client.composer.NativeBridge") } + val nativeBridge by lazy { runCatching { findClass("com.snapchat.client.valdi.NativeBridge") }.getOrNull() ?: findClass("com.snapchat.client.composer.NativeBridge") } val composerView by lazy { findClass("com.snap.composer.views.ComposerView") } val composerAction by lazy { findClass("com.snap.composer.actions.ComposerAction") } val composerFunctionActionAdapter by lazy { findClass("com.snap.composer.callable.ComposerFunctionActionAdapter") } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/ComposerHooks.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/ComposerHooks.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.launch import me.rhunk.snapenhance.common.bridge.FileHandleScope import me.rhunk.snapenhance.common.bridge.toWrapper import me.rhunk.snapenhance.common.ui.createComposeAlertDialog +import me.rhunk.snapenhance.core.SnapEnhance import me.rhunk.snapenhance.core.features.Feature import me.rhunk.snapenhance.core.features.impl.downloader.MediaDownloader import me.rhunk.snapenhance.core.util.hook.HookStage @@ -104,8 +105,6 @@ class ComposerHooks: Feature("ComposerHooks") { override fun init() { if (config.globalState != true) return - val nativeBridgeClass = runCatching { findClass("com.snapchat.client.valdi.NativeBridge") }.getOrNull() ?: findClass("com.snapchat.client.composer.NativeBridge") - val importedFunctions = mutableMapOf<String, Any?>() fun composerFunction(name: String, block: ComposerMarshaller.() -> Unit) { @@ -175,7 +174,7 @@ class ComposerHooks: Feature("ComposerHooks") { context.native.setComposerLoader(""" const i = setInterval(() => { try { - const _runtimeName = "${if (nativeBridgeClass.name == "com.snapchat.client.valdi.NativeBridge") "valdi" else "composer"}"; + const _runtimeName = "${if (SnapEnhance.classCache.nativeBridge.name == "com.snapchat.client.valdi.NativeBridge") "valdi" else "composer"}"; require(_runtimeName + '_core/src/DeviceBridge').getDisplayWidth(); clearInterval(i); (() => { const _getImportsFunctionName = "$getImportsFunctionName"; $loaderScript })(); @@ -199,7 +198,7 @@ class ComposerHooks: Feature("ComposerHooks") { } } - nativeBridgeClass.hook("registerNativeModuleFactory", HookStage.BEFORE) { param -> + SnapEnhance.classCache.nativeBridge.hook("registerNativeModuleFactory", HookStage.BEFORE) { param -> val moduleFactory = param.argNullable<Any>(1) ?: return@hook if (moduleFactory.javaClass.getMethod("getModulePath").invoke(moduleFactory)?.toString()?.contains("DeviceBridge") != true) return@hook Hooker.ephemeralHookObjectMethod(moduleFactory.javaClass, moduleFactory, "loadModule", HookStage.AFTER) { methodParam ->