diff --git a/app/src/main/kotlin/io/github/revenge/xposed/Main.kt b/app/src/main/kotlin/io/github/revenge/xposed/Main.kt index c44c123..c7efb07 100644 --- a/app/src/main/kotlin/io/github/revenge/xposed/Main.kt +++ b/app/src/main/kotlin/io/github/revenge/xposed/Main.kt @@ -7,12 +7,18 @@ import android.os.Bundle import de.robv.android.xposed.IXposedHookLoadPackage import de.robv.android.xposed.IXposedHookZygoteInit import de.robv.android.xposed.callbacks.XC_LoadPackage +import io.github.revenge.xposed.Utils.Log import io.github.revenge.xposed.modules.* import io.github.revenge.xposed.modules.appearance.FontsModule import io.github.revenge.xposed.modules.appearance.SysColorsModule import io.github.revenge.xposed.modules.appearance.ThemesModule import io.github.revenge.xposed.modules.bridge.AdditionalBridgeMethodsModule import io.github.revenge.xposed.modules.bridge.BridgeModule +import kotlinx.coroutines.CompletableDeferred + +object HookReadyHolder { + val deferred = CompletableDeferred() +} class Main : Module(), IXposedHookLoadPackage, IXposedHookZygoteInit { private var hooked = false @@ -45,13 +51,16 @@ class Main : Module(), IXposedHookLoadPackage, IXposedHookZygoteInit { ContextWrapper::class.java.hookMethod("attachBaseContext", Context::class.java) { after { + Log.i("Received Context") this@Main.onContext(args[0] as Context) } } reactActivity.hookMethod("onCreate", Bundle::class.java) { after { + Log.i("Received Activity") this@Main.onActivity(thisObject as Activity) + HookReadyHolder.deferred.complete(Unit) } } diff --git a/app/src/main/kotlin/io/github/revenge/xposed/modules/HookScriptLoaderModule.kt b/app/src/main/kotlin/io/github/revenge/xposed/modules/HookScriptLoaderModule.kt index b41c140..4359066 100644 --- a/app/src/main/kotlin/io/github/revenge/xposed/modules/HookScriptLoaderModule.kt +++ b/app/src/main/kotlin/io/github/revenge/xposed/modules/HookScriptLoaderModule.kt @@ -6,9 +6,12 @@ import de.robv.android.xposed.IXposedHookZygoteInit import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.callbacks.XC_LoadPackage import io.github.revenge.xposed.Constants +import io.github.revenge.xposed.HookReadyHolder import io.github.revenge.xposed.Module import io.github.revenge.xposed.Utils.Log import io.github.revenge.xposed.modules.HookScriptLoaderModule.Companion.PRELOADS_DIR +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll import kotlinx.coroutines.runBlocking import java.io.File import java.lang.reflect.Method @@ -84,7 +87,12 @@ class HookScriptLoaderModule : Module() { private fun HookScope.runCustomScripts(loadScriptFromFile: Method, loadScriptFromAssets: Method) { Log.i("Running custom scripts...") - runBlocking { UpdaterModule.downloadScript().join() } + runBlocking { + val ready = async { HookReadyHolder.deferred.join() } + val download = async { UpdaterModule.downloadScript().join() } + + awaitAll(ready, download) + } val loadSynchronously = args[2] val runScriptFile = { file: File ->