From 7b1e446a612c2f7c77c7c16285b1b0657d93ba44 Mon Sep 17 00:00:00 2001 From: Jacek Pudysz Date: Wed, 29 Jan 2025 15:40:46 +0100 Subject: [PATCH] fix: crash on android reload --- android/src/main/cxx/NativeUnistylesModule.cpp | 2 +- android/src/main/java/com/unistyles/NativePlatform+android.kt | 3 +-- android/src/main/java/com/unistyles/NativePlatform+insets.kt | 4 ++++ .../src/main/java/com/unistyles/NativePlatform+listener.kt | 3 ++- android/src/main/java/com/unistyles/UnistylesModule.kt | 4 ---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/src/main/cxx/NativeUnistylesModule.cpp b/android/src/main/cxx/NativeUnistylesModule.cpp index 8fff0eb8..d12ca007 100644 --- a/android/src/main/cxx/NativeUnistylesModule.cpp +++ b/android/src/main/cxx/NativeUnistylesModule.cpp @@ -37,7 +37,7 @@ jni::local_ref UnistylesModule::getBindings auto& uiManager = jobj->cthis()->_uiManager; auto& nativePlatform = jobj->cthis()->_nativePlatform; - return BindingsInstallerHolder::newObjectCxxArgs([&runtimeExecutor, uiManager, nativePlatform](jsi::Runtime& rt) { + return BindingsInstallerHolder::newObjectCxxArgs([&runtimeExecutor, &uiManager, &nativePlatform](jsi::Runtime& rt) { // function is called on: first init and every live reload // check if this is live reload, if so let's replace UnistylesRuntime with new runtime auto hasUnistylesRuntime = HybridObjectRegistry::hasHybridObject("UnistylesRuntime"); diff --git a/android/src/main/java/com/unistyles/NativePlatform+android.kt b/android/src/main/java/com/unistyles/NativePlatform+android.kt index ff09c73c..aeb33dc3 100644 --- a/android/src/main/java/com/unistyles/NativePlatform+android.kt +++ b/android/src/main/java/com/unistyles/NativePlatform+android.kt @@ -32,9 +32,8 @@ class NativePlatformAndroid(private val reactContext: ReactApplicationContext): reactContext.addLifecycleEventListener(this) } - fun invalidate() { + fun onDestroy() { reactContext.removeLifecycleEventListener(this) - _listener.invalidate() } override fun onHostResume() { diff --git a/android/src/main/java/com/unistyles/NativePlatform+insets.kt b/android/src/main/java/com/unistyles/NativePlatform+insets.kt index bead0629..11164529 100644 --- a/android/src/main/java/com/unistyles/NativePlatform+insets.kt +++ b/android/src/main/java/com/unistyles/NativePlatform+insets.kt @@ -23,6 +23,10 @@ class NativePlatformInsets( private val _imeListeners: MutableList = mutableListOf() private var _insets: Insets = Insets(0.0, 0.0, 0.0, 0.0, 0.0) + fun onDestroy() { + this.removeImeListeners() + } + fun getInsets(): Insets { val density = reactContext.resources.displayMetrics.density diff --git a/android/src/main/java/com/unistyles/NativePlatform+listener.kt b/android/src/main/java/com/unistyles/NativePlatform+listener.kt index e07a99b6..f22822fb 100644 --- a/android/src/main/java/com/unistyles/NativePlatform+listener.kt +++ b/android/src/main/java/com/unistyles/NativePlatform+listener.kt @@ -31,7 +31,8 @@ class NativePlatformListener( reactContext.registerReceiver(configurationChangeReceiver, IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED)) } - fun invalidate() { + fun onDestroy() { + this.removePlatformListeners() reactContext.unregisterReceiver(configurationChangeReceiver) } diff --git a/android/src/main/java/com/unistyles/UnistylesModule.kt b/android/src/main/java/com/unistyles/UnistylesModule.kt index 432bd7d2..f46b1e4f 100644 --- a/android/src/main/java/com/unistyles/UnistylesModule.kt +++ b/android/src/main/java/com/unistyles/UnistylesModule.kt @@ -26,10 +26,6 @@ class UnistylesModule(reactContext: ReactApplicationContext): NativeTurboUnistyl mHybridData = initializeHybridData(reactContext) } - override fun invalidate() { - _nativePlatform.invalidate() - } - private fun initializeHybridData(reactContext: ReactApplicationContext): HybridData { val runtimeExecutor = reactContext.catalystInstance?.runtimeExecutor ?: throw IllegalStateException("Unistyles: React Native runtime executor is not available. Please follow installation guides.")