react-native-unistyles 2.4.0-rc.2 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -26
- package/android/CMakeLists.txt +18 -2
- package/android/build.gradle +5 -1
- package/android/src/main/cxx/cpp-adapter.cpp +16 -80
- package/android/src/main/cxx/helpers.cpp +61 -0
- package/android/src/main/cxx/helpers.h +7 -0
- package/android/src/main/cxx/platform.cpp +170 -0
- package/android/src/main/cxx/platform.h +20 -0
- package/android/src/main/java/com/unistyles/Models.kt +12 -70
- package/android/src/main/java/com/unistyles/Platform.kt +311 -10
- package/android/src/main/java/com/unistyles/UnistylesModule.kt +145 -153
- package/cxx/Macros.h +11 -0
- package/cxx/UnistylesImpl.cpp +310 -0
- package/cxx/UnistylesModel.cpp +234 -0
- package/cxx/UnistylesModel.h +141 -0
- package/cxx/UnistylesRuntime.cpp +17 -356
- package/cxx/UnistylesRuntime.h +71 -87
- package/ios/UnistylesModule.h +13 -0
- package/ios/UnistylesModule.mm +20 -90
- package/ios/platform/Platform_Shared.h +8 -0
- package/ios/platform/Platform_Shared.mm +160 -0
- package/ios/platform/Platform_iOS.h +6 -10
- package/ios/platform/Platform_iOS.mm +143 -93
- package/ios/platform/Platform_macOS.h +3 -7
- package/ios/platform/Platform_macOS.mm +52 -34
- package/ios/platform/Platform_tvOS.h +17 -0
- package/ios/platform/Platform_tvOS.mm +96 -0
- package/ios/platform/Platform_visionOS.h +20 -0
- package/ios/platform/Platform_visionOS.mm +120 -0
- package/lib/commonjs/UnistylesProvider.js +32 -0
- package/lib/commonjs/UnistylesProvider.js.map +1 -0
- package/lib/commonjs/common.js +3 -2
- package/lib/commonjs/common.js.map +1 -1
- package/lib/commonjs/core/UnistyleRegistry.js +14 -4
- package/lib/commonjs/core/UnistyleRegistry.js.map +1 -1
- package/lib/commonjs/core/Unistyles.js +7 -0
- package/lib/commonjs/core/Unistyles.js.map +1 -1
- package/lib/commonjs/core/UnistylesModule.js +52 -8
- package/lib/commonjs/core/UnistylesModule.js.map +1 -1
- package/lib/commonjs/core/UnistylesModule.native.js.map +1 -1
- package/lib/commonjs/core/UnistylesModule.windows.js.map +1 -1
- package/lib/commonjs/core/UnistylesRuntime.js +114 -4
- package/lib/commonjs/core/UnistylesRuntime.js.map +1 -1
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/core/mocks/UnistylesMockedBridge.js +36 -0
- package/lib/commonjs/core/mocks/UnistylesMockedBridge.js.map +1 -0
- package/lib/commonjs/core/mocks/UnistylesMockedRegistry.js +46 -0
- package/lib/commonjs/core/mocks/UnistylesMockedRegistry.js.map +1 -0
- package/lib/commonjs/core/mocks/UnistylesMockedRuntime.js +122 -0
- package/lib/commonjs/core/mocks/UnistylesMockedRuntime.js.map +1 -0
- package/lib/commonjs/core/mocks/index.js +27 -0
- package/lib/commonjs/core/mocks/index.js.map +1 -0
- package/lib/commonjs/createStyleSheet.js.map +1 -1
- package/lib/commonjs/global.js.map +1 -1
- package/lib/commonjs/hooks/index.js.map +1 -1
- package/lib/commonjs/hooks/useCSS.js.map +1 -1
- package/lib/commonjs/hooks/useCSS.native.js.map +1 -1
- package/lib/commonjs/hooks/useInitialTheme.js.map +1 -1
- package/lib/commonjs/hooks/useSharedContext.js +77 -0
- package/lib/commonjs/hooks/useSharedContext.js.map +1 -0
- package/lib/commonjs/hooks/useUnistyles.js +18 -65
- package/lib/commonjs/hooks/useUnistyles.js.map +1 -1
- package/lib/commonjs/hooks/useVariants.js.map +1 -1
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/normalizer/index.js.map +1 -1
- package/lib/commonjs/normalizer/module.d.js.map +1 -1
- package/lib/commonjs/normalizer/normalizeStyle.js.map +1 -1
- package/lib/commonjs/normalizer/normalizer.js +1 -1
- package/lib/commonjs/normalizer/normalizer.js.map +1 -1
- package/lib/commonjs/normalizer/normalizer.macos.js.map +1 -1
- package/lib/commonjs/plugins/cssMediaQueriesPlugin.js.map +1 -1
- package/lib/commonjs/plugins/index.js.map +1 -1
- package/lib/commonjs/plugins/normalizeWebStylesPlugin.js.map +1 -1
- package/lib/commonjs/types/breakpoints.js.map +1 -1
- package/lib/commonjs/types/color.js +2 -0
- package/lib/commonjs/types/color.js.map +1 -0
- package/lib/commonjs/types/common.js.map +1 -1
- package/lib/commonjs/types/core.js.map +1 -1
- package/lib/commonjs/types/index.js +11 -0
- package/lib/commonjs/types/index.js.map +1 -1
- package/lib/commonjs/types/normalizer.js.map +1 -1
- package/lib/commonjs/types/plugin.js.map +1 -1
- package/lib/commonjs/types/stylesheet.js.map +1 -1
- package/lib/commonjs/types/unistyles.js.map +1 -1
- package/lib/commonjs/types/variants.js.map +1 -1
- package/lib/commonjs/useStyles.js +1 -1
- package/lib/commonjs/useStyles.js.map +1 -1
- package/lib/commonjs/utils/breakpoints.js.map +1 -1
- package/lib/commonjs/utils/cssMediaQuery.js.map +1 -1
- package/lib/commonjs/utils/generateId.js.map +1 -1
- package/lib/commonjs/utils/hash32.js.map +1 -1
- package/lib/commonjs/utils/index.js +7 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/mq.js.map +1 -1
- package/lib/commonjs/utils/mqParser.js.map +1 -1
- package/lib/commonjs/utils/parseColor.js +35 -0
- package/lib/commonjs/utils/parseColor.js.map +1 -0
- package/lib/commonjs/utils/styles.js +15 -1
- package/lib/commonjs/utils/styles.js.map +1 -1
- package/lib/commonjs/utils/withPlugins.js.map +1 -1
- package/lib/module/UnistylesProvider.js +24 -0
- package/lib/module/UnistylesProvider.js.map +1 -0
- package/lib/module/common.js +2 -1
- package/lib/module/common.js.map +1 -1
- package/lib/module/core/UnistyleRegistry.js +15 -5
- package/lib/module/core/UnistyleRegistry.js.map +1 -1
- package/lib/module/core/Unistyles.js +8 -1
- package/lib/module/core/Unistyles.js.map +1 -1
- package/lib/module/core/UnistylesModule.js +52 -8
- package/lib/module/core/UnistylesModule.js.map +1 -1
- package/lib/module/core/UnistylesModule.native.js.map +1 -1
- package/lib/module/core/UnistylesModule.windows.js.map +1 -1
- package/lib/module/core/UnistylesRuntime.js +115 -4
- package/lib/module/core/UnistylesRuntime.js.map +1 -1
- package/lib/module/core/index.js +2 -1
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/core/mocks/UnistylesMockedBridge.js +29 -0
- package/lib/module/core/mocks/UnistylesMockedBridge.js.map +1 -0
- package/lib/module/core/mocks/UnistylesMockedRegistry.js +39 -0
- package/lib/module/core/mocks/UnistylesMockedRegistry.js.map +1 -0
- package/lib/module/core/mocks/UnistylesMockedRuntime.js +114 -0
- package/lib/module/core/mocks/UnistylesMockedRuntime.js.map +1 -0
- package/lib/module/core/mocks/index.js +4 -0
- package/lib/module/core/mocks/index.js.map +1 -0
- package/lib/module/createStyleSheet.js.map +1 -1
- package/lib/module/global.js.map +1 -1
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/useCSS.js.map +1 -1
- package/lib/module/hooks/useCSS.native.js.map +1 -1
- package/lib/module/hooks/useInitialTheme.js.map +1 -1
- package/lib/module/hooks/useSharedContext.js +70 -0
- package/lib/module/hooks/useSharedContext.js.map +1 -0
- package/lib/module/hooks/useUnistyles.js +19 -66
- package/lib/module/hooks/useUnistyles.js.map +1 -1
- package/lib/module/hooks/useVariants.js.map +1 -1
- package/lib/module/index.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/normalizer/index.js.map +1 -1
- package/lib/module/normalizer/module.d.js.map +1 -1
- package/lib/module/normalizer/normalizeStyle.js.map +1 -1
- package/lib/module/normalizer/normalizer.js.map +1 -1
- package/lib/module/normalizer/normalizer.macos.js.map +1 -1
- package/lib/module/plugins/cssMediaQueriesPlugin.js.map +1 -1
- package/lib/module/plugins/index.js.map +1 -1
- package/lib/module/plugins/normalizeWebStylesPlugin.js.map +1 -1
- package/lib/module/types/breakpoints.js.map +1 -1
- package/lib/module/types/color.js +2 -0
- package/lib/module/types/color.js.map +1 -0
- package/lib/module/types/common.js.map +1 -1
- package/lib/module/types/core.js.map +1 -1
- package/lib/module/types/index.js +1 -0
- package/lib/module/types/index.js.map +1 -1
- package/lib/module/types/normalizer.js.map +1 -1
- package/lib/module/types/plugin.js.map +1 -1
- package/lib/module/types/stylesheet.js.map +1 -1
- package/lib/module/types/unistyles.js.map +1 -1
- package/lib/module/types/variants.js.map +1 -1
- package/lib/module/useStyles.js +1 -1
- package/lib/module/useStyles.js.map +1 -1
- package/lib/module/utils/breakpoints.js.map +1 -1
- package/lib/module/utils/cssMediaQuery.js.map +1 -1
- package/lib/module/utils/generateId.js.map +1 -1
- package/lib/module/utils/hash32.js.map +1 -1
- package/lib/module/utils/index.js +1 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/mq.js.map +1 -1
- package/lib/module/utils/mqParser.js.map +1 -1
- package/lib/module/utils/parseColor.js +28 -0
- package/lib/module/utils/parseColor.js.map +1 -0
- package/lib/module/utils/styles.js +15 -1
- package/lib/module/utils/styles.js.map +1 -1
- package/lib/module/utils/withPlugins.js.map +1 -1
- package/lib/typescript/src/UnistylesProvider.d.ts +20 -0
- package/lib/typescript/src/UnistylesProvider.d.ts.map +1 -0
- package/lib/typescript/src/common.d.ts +3 -2
- package/lib/typescript/src/common.d.ts.map +1 -1
- package/lib/typescript/src/core/UnistyleRegistry.d.ts.map +1 -1
- package/lib/typescript/src/core/Unistyles.d.ts.map +1 -1
- package/lib/typescript/src/core/UnistylesModule.d.ts +1 -0
- package/lib/typescript/src/core/UnistylesModule.d.ts.map +1 -1
- package/lib/typescript/src/core/UnistylesModule.native.d.ts.map +1 -1
- package/lib/typescript/src/core/UnistylesModule.windows.d.ts.map +1 -1
- package/lib/typescript/src/core/UnistylesRuntime.d.ts +84 -8
- package/lib/typescript/src/core/UnistylesRuntime.d.ts.map +1 -1
- package/lib/typescript/src/core/index.d.ts +3 -1
- package/lib/typescript/src/core/index.d.ts.map +1 -1
- package/lib/typescript/src/core/mocks/UnistylesMockedBridge.d.ts +28 -0
- package/lib/typescript/src/core/mocks/UnistylesMockedBridge.d.ts.map +1 -0
- package/lib/typescript/src/core/mocks/UnistylesMockedRegistry.d.ts +21 -0
- package/lib/typescript/src/core/mocks/UnistylesMockedRegistry.d.ts.map +1 -0
- package/lib/typescript/src/core/mocks/UnistylesMockedRuntime.d.ts +79 -0
- package/lib/typescript/src/core/mocks/UnistylesMockedRuntime.d.ts.map +1 -0
- package/lib/typescript/src/core/mocks/index.d.ts +4 -0
- package/lib/typescript/src/core/mocks/index.d.ts.map +1 -0
- package/lib/typescript/src/createStyleSheet.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useCSS.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useCSS.native.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useSharedContext.d.ts +33 -0
- package/lib/typescript/src/hooks/useSharedContext.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useUnistyles.d.ts +4 -19
- package/lib/typescript/src/hooks/useUnistyles.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useVariants.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +7 -15
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/normalizer/normalizeStyle.d.ts.map +1 -1
- package/lib/typescript/src/types/breakpoints.d.ts +9 -8
- package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
- package/lib/typescript/src/types/color.d.ts +4 -0
- package/lib/typescript/src/types/color.d.ts.map +1 -0
- package/lib/typescript/src/types/core.d.ts +2 -2
- package/lib/typescript/src/types/core.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +2 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/normalizer.d.ts +1 -1
- package/lib/typescript/src/types/normalizer.d.ts.map +1 -1
- package/lib/typescript/src/types/stylesheet.d.ts +9 -6
- package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
- package/lib/typescript/src/types/unistyles.d.ts +20 -9
- package/lib/typescript/src/types/unistyles.d.ts.map +1 -1
- package/lib/typescript/src/useStyles.d.ts +1 -1
- package/lib/typescript/src/useStyles.d.ts.map +1 -1
- package/lib/typescript/src/utils/breakpoints.d.ts.map +1 -1
- package/lib/typescript/src/utils/index.d.ts +1 -0
- package/lib/typescript/src/utils/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/mqParser.d.ts.map +1 -1
- package/lib/typescript/src/utils/parseColor.d.ts +3 -0
- package/lib/typescript/src/utils/parseColor.d.ts.map +1 -0
- package/lib/typescript/src/utils/styles.d.ts.map +1 -1
- package/package.json +38 -25
- package/react-native-unistyles.podspec +4 -1
- package/src/UnistylesProvider.tsx +33 -0
- package/src/common.ts +3 -2
- package/src/core/UnistyleRegistry.ts +19 -5
- package/src/core/Unistyles.ts +10 -1
- package/src/core/UnistylesModule.ts +61 -14
- package/src/core/UnistylesRuntime.ts +120 -5
- package/src/core/index.ts +7 -1
- package/src/core/mocks/UnistylesMockedBridge.ts +30 -0
- package/src/core/mocks/UnistylesMockedRegistry.ts +47 -0
- package/src/core/mocks/UnistylesMockedRuntime.ts +144 -0
- package/src/core/mocks/index.ts +3 -0
- package/src/hooks/useSharedContext.ts +83 -0
- package/src/hooks/useUnistyles.ts +15 -71
- package/src/index.ts +10 -4
- package/src/types/breakpoints.ts +19 -9
- package/src/types/color.ts +26 -0
- package/src/types/core.ts +2 -2
- package/src/types/index.ts +5 -1
- package/src/types/normalizer.ts +1 -1
- package/src/types/stylesheet.ts +10 -7
- package/src/types/unistyles.ts +28 -12
- package/src/useStyles.ts +1 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/parseColor.ts +33 -0
- package/src/utils/styles.ts +24 -1
- package/windows/ExperimentalFeatures.props +4 -4
- package/windows/NuGet.Config +0 -1
- package/windows/ReactNativeUnistyles/ReactNativeUnistyles.h +42 -112
- package/windows/ReactNativeUnistyles/ReactNativeUnistyles.vcxproj +7 -2
- package/windows/ReactNativeUnistyles/ReactNativeUnistyles.vcxproj.filters +6 -1
- package/windows/ReactNativeUnistyles/packages.lock.json +31 -31
- package/android/src/main/java/com/unistyles/Config.kt +0 -116
- package/android/src/main/java/com/unistyles/Insets.kt +0 -138
- package/ios/UnistylesHelpers.h +0 -3
- package/ios/UnistylesHelpers.mm +0 -5
@@ -4,42 +4,45 @@ import android.content.BroadcastReceiver
|
|
4
4
|
import android.content.Context
|
5
5
|
import android.content.Intent
|
6
6
|
import android.content.IntentFilter
|
7
|
+
import android.os.Build
|
7
8
|
import android.os.Handler
|
8
9
|
import android.os.Looper
|
9
10
|
import android.util.Log
|
10
|
-
import android.view.
|
11
|
-
import
|
11
|
+
import android.view.View
|
12
|
+
import androidx.core.view.ViewCompat
|
13
|
+
import androidx.core.view.WindowCompat
|
14
|
+
import androidx.core.view.WindowInsetsAnimationCompat
|
15
|
+
import androidx.core.view.WindowInsetsCompat
|
12
16
|
import com.facebook.react.bridge.LifecycleEventListener
|
13
17
|
import com.facebook.react.bridge.ReactApplicationContext
|
14
18
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
15
19
|
import com.facebook.react.bridge.ReactMethod
|
16
|
-
import com.facebook.react.
|
20
|
+
import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder
|
21
|
+
import kotlin.math.roundToInt
|
17
22
|
|
18
23
|
class UnistylesModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext), LifecycleEventListener {
|
19
|
-
private val drawHandler = Handler(Looper.getMainLooper())
|
20
|
-
private val debounceDuration = 250L
|
21
|
-
private var runnable: Runnable? = null
|
22
|
-
|
23
24
|
private var isCxxReady: Boolean = false
|
24
|
-
private
|
25
|
-
private
|
26
|
-
if (this.isCxxReady) {
|
27
|
-
runnable?.let { drawHandler.removeCallbacks(it) }
|
28
|
-
|
29
|
-
runnable = Runnable {
|
30
|
-
this@UnistylesModule.onLayoutConfigChange()
|
31
|
-
}.also {
|
32
|
-
drawHandler.postDelayed(it, debounceDuration)
|
33
|
-
}
|
34
|
-
}
|
35
|
-
}
|
25
|
+
private var platform: Platform = Platform(reactContext)
|
26
|
+
private var _shouldListenToImeEvents = false
|
36
27
|
|
37
28
|
private val configurationChangeReceiver = object : BroadcastReceiver() {
|
38
29
|
override fun onReceive(context: Context, intent: Intent) {
|
39
|
-
if (
|
30
|
+
if (!this@UnistylesModule.isCxxReady) {
|
31
|
+
return
|
32
|
+
}
|
33
|
+
|
34
|
+
if (intent.action == Intent.ACTION_CONFIGURATION_CHANGED) {
|
40
35
|
Handler(Looper.getMainLooper()).postDelayed({
|
41
36
|
this@UnistylesModule.onConfigChange()
|
42
|
-
},
|
37
|
+
}, 25)
|
38
|
+
}
|
39
|
+
|
40
|
+
val newConfig = context.resources.configuration
|
41
|
+
|
42
|
+
if (newConfig.orientation != platform.orientation) {
|
43
|
+
platform.orientation = newConfig.orientation
|
44
|
+
|
45
|
+
this@UnistylesModule.onLayoutConfigChange()
|
43
46
|
}
|
44
47
|
}
|
45
48
|
}
|
@@ -49,192 +52,181 @@ class UnistylesModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
|
|
49
52
|
const val NAME = "Unistyles"
|
50
53
|
}
|
51
54
|
|
52
|
-
//region Lifecycle
|
53
55
|
init {
|
54
56
|
reactApplicationContext.registerReceiver(configurationChangeReceiver, IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED))
|
57
|
+
reactApplicationContext.addLifecycleEventListener(this)
|
55
58
|
}
|
56
59
|
|
57
|
-
|
58
|
-
val activity = currentActivity ?: return
|
59
|
-
activity.window.decorView.rootView.viewTreeObserver.addOnGlobalLayoutListener(layoutListener)
|
60
|
-
}
|
61
|
-
|
62
|
-
@Deprecated("Deprecated in Java")
|
63
|
-
override fun onCatalystInstanceDestroy() {
|
64
|
-
val activity = currentActivity ?: return
|
65
|
-
|
66
|
-
activity.window.decorView.rootView.viewTreeObserver.removeOnGlobalLayoutListener(layoutListener)
|
60
|
+
override fun invalidate() {
|
67
61
|
reactApplicationContext.unregisterReceiver(configurationChangeReceiver)
|
68
|
-
|
69
|
-
|
62
|
+
reactApplicationContext.removeLifecycleEventListener(this)
|
63
|
+
|
64
|
+
if (this.isCxxReady) {
|
65
|
+
this.nativeDestroy()
|
66
|
+
}
|
70
67
|
}
|
71
68
|
|
72
|
-
//endregion
|
73
|
-
//region Event handlers
|
74
69
|
private fun onConfigChange() {
|
75
|
-
if (!
|
70
|
+
if (!this.isCxxReady) {
|
76
71
|
return
|
77
72
|
}
|
78
73
|
|
79
|
-
val
|
74
|
+
val colorScheme = this.platform.getColorScheme()
|
75
|
+
val contentSizeCategory = this.platform.getContentSizeCategory()
|
80
76
|
|
81
77
|
reactApplicationContext.runOnJSQueueThread {
|
82
|
-
|
83
|
-
|
84
|
-
}
|
85
|
-
|
86
|
-
if (config.hasNewContentSizeCategory) {
|
87
|
-
this.nativeOnContentSizeCategoryChange(config.contentSizeCategory)
|
88
|
-
}
|
78
|
+
this.nativeOnAppearanceChange(colorScheme)
|
79
|
+
this.nativeOnContentSizeCategoryChange(contentSizeCategory)
|
89
80
|
}
|
90
81
|
}
|
91
82
|
|
92
83
|
private fun onLayoutConfigChange() {
|
93
|
-
if (!
|
84
|
+
if (!this.isCxxReady) {
|
94
85
|
return
|
95
86
|
}
|
96
87
|
|
97
|
-
val
|
88
|
+
val screen = this.platform.getScreenDimensions()
|
89
|
+
val insets = this.platform.getInsets()
|
90
|
+
val statusBar = this.platform.getStatusBarDimensions()
|
91
|
+
val navigationBar = this.platform.getNavigationBarDimensions()
|
98
92
|
|
99
93
|
reactApplicationContext.runOnJSQueueThread {
|
100
94
|
this.nativeOnOrientationChange(
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
95
|
+
screen,
|
96
|
+
insets,
|
97
|
+
statusBar,
|
98
|
+
navigationBar
|
105
99
|
)
|
106
100
|
}
|
107
101
|
}
|
108
102
|
|
109
|
-
//endregion
|
110
|
-
//region Core
|
111
103
|
@ReactMethod(isBlockingSynchronousMethod = true)
|
112
104
|
fun install(): Boolean {
|
113
105
|
return try {
|
114
106
|
System.loadLibrary("unistyles")
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
layoutConfig.insets,
|
126
|
-
layoutConfig.statusBar,
|
127
|
-
layoutConfig.navigationBar
|
128
|
-
)
|
129
|
-
this.isCxxReady = true
|
130
|
-
|
131
|
-
Log.i(NAME, "Installed Unistyles \uD83E\uDD84!")
|
132
|
-
|
133
|
-
return true
|
107
|
+
|
108
|
+
this.reactApplicationContext.javaScriptContextHolder?.let { contextHolder ->
|
109
|
+
this.reactApplicationContext.catalystInstance.jsCallInvokerHolder?.let { callInvokerHolder: CallInvokerHolder ->
|
110
|
+
this.nativeInstall(contextHolder.get(), callInvokerHolder)
|
111
|
+
this.isCxxReady = true
|
112
|
+
|
113
|
+
Log.i(NAME, "Installed Unistyles \uD83E\uDD84!")
|
114
|
+
|
115
|
+
return true
|
116
|
+
}
|
134
117
|
}
|
135
118
|
|
136
119
|
false
|
137
120
|
} catch (e: Exception) {
|
138
|
-
false
|
121
|
+
this.isCxxReady = false
|
122
|
+
|
123
|
+
return false
|
139
124
|
}
|
140
125
|
}
|
141
126
|
|
142
|
-
private external fun nativeInstall(
|
143
|
-
jsi: Long,
|
144
|
-
screen: Dimensions,
|
145
|
-
colorScheme: String,
|
146
|
-
contentSizeCategory: String,
|
147
|
-
insets: Insets,
|
148
|
-
statusBar: Dimensions,
|
149
|
-
navigationBar: Dimensions
|
150
|
-
)
|
127
|
+
private external fun nativeInstall(jsi: Long, callInvoker: CallInvokerHolder)
|
151
128
|
private external fun nativeDestroy()
|
152
|
-
private external fun nativeOnOrientationChange(screen:
|
129
|
+
private external fun nativeOnOrientationChange(screen: Screen, insets: Insets, statusBar: Dimensions, navigationBar: Dimensions)
|
153
130
|
private external fun nativeOnAppearanceChange(colorScheme: String)
|
154
131
|
private external fun nativeOnContentSizeCategoryChange(contentSizeCategory: String)
|
155
132
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
putMap("payload", Arguments.createMap().apply {
|
162
|
-
putString("breakpoint", breakpoint)
|
163
|
-
putString("orientation", orientation)
|
164
|
-
putMap("screen", Arguments.createMap().apply {
|
165
|
-
putInt("width", screen.width)
|
166
|
-
putInt("height", screen.height)
|
167
|
-
})
|
168
|
-
putMap("statusBar", Arguments.createMap().apply {
|
169
|
-
putInt("width", statusBar.width)
|
170
|
-
putInt("height", statusBar.height)
|
171
|
-
})
|
172
|
-
putMap("insets", Arguments.createMap().apply {
|
173
|
-
putInt("top", insets.top)
|
174
|
-
putInt("bottom", insets.bottom)
|
175
|
-
putInt("left", insets.left)
|
176
|
-
putInt("right", insets.right)
|
177
|
-
})
|
178
|
-
putMap("navigationBar", Arguments.createMap().apply {
|
179
|
-
putInt("width", navigationBar.width)
|
180
|
-
putInt("height", navigationBar.height)
|
181
|
-
})
|
182
|
-
})
|
133
|
+
private fun enableEdgeToEdge() {
|
134
|
+
this.reactApplicationContext.currentActivity?.let { activity ->
|
135
|
+
activity.runOnUiThread {
|
136
|
+
WindowCompat.setDecorFitsSystemWindows(activity.window, false)
|
137
|
+
}
|
183
138
|
}
|
184
|
-
|
185
|
-
reactApplicationContext
|
186
|
-
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
187
|
-
.emit("__unistylesOnChange", body)
|
188
139
|
}
|
189
140
|
|
190
|
-
|
191
|
-
|
192
|
-
putString("type", "theme")
|
193
|
-
putMap("payload", Arguments.createMap().apply {
|
194
|
-
putString("themeName", themeName)
|
195
|
-
})
|
196
|
-
}
|
197
|
-
|
198
|
-
reactApplicationContext
|
199
|
-
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
200
|
-
.emit("__unistylesOnChange", body)
|
201
|
-
}
|
141
|
+
@ReactMethod
|
142
|
+
fun addListener(eventName: String?) = Unit
|
202
143
|
|
203
|
-
|
204
|
-
|
205
|
-
putString("type", "plugin")
|
206
|
-
}
|
144
|
+
@ReactMethod
|
145
|
+
fun removeListeners(count: Double) = Unit
|
207
146
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
}
|
147
|
+
override fun onHostResume() {
|
148
|
+
this.enableEdgeToEdge()
|
149
|
+
_shouldListenToImeEvents = true
|
212
150
|
|
213
|
-
|
214
|
-
|
215
|
-
putString("type", "dynamicTypeSize")
|
216
|
-
putMap("payload", Arguments.createMap().apply {
|
217
|
-
putString("contentSizeCategory", contentSizeCategory)
|
218
|
-
})
|
151
|
+
if (isCxxReady) {
|
152
|
+
this.onConfigChange()
|
219
153
|
}
|
220
154
|
|
221
|
-
reactApplicationContext
|
222
|
-
.
|
223
|
-
|
155
|
+
this.reactApplicationContext.currentActivity?.let { activity ->
|
156
|
+
activity.findViewById<View>(android.R.id.content)?.let { mainView ->
|
157
|
+
ViewCompat.setOnApplyWindowInsetsListener(mainView) { _, insets ->
|
158
|
+
this.platform.setInsetsCompat(insets, activity.window, null)
|
159
|
+
|
160
|
+
if (this.isCxxReady) {
|
161
|
+
this.onLayoutConfigChange()
|
162
|
+
}
|
163
|
+
|
164
|
+
insets
|
165
|
+
}
|
166
|
+
|
167
|
+
if (platform.hasAnimatedInsets && Build.VERSION.SDK_INT >= 30) {
|
168
|
+
ViewCompat.setWindowInsetsAnimationCallback(
|
169
|
+
mainView,
|
170
|
+
object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_STOP) {
|
171
|
+
var initialBottomInsets = 0
|
172
|
+
var isGoingUp = false
|
173
|
+
|
174
|
+
override fun onPrepare(animation: WindowInsetsAnimationCompat) {
|
175
|
+
val insets = ViewCompat.getRootWindowInsets(mainView)
|
176
|
+
val isKeyboardVisible = insets?.isVisible(WindowInsetsCompat.Type.ime()) ?: false
|
177
|
+
|
178
|
+
if (!isKeyboardVisible) {
|
179
|
+
val density = reactApplicationContext.resources.displayMetrics.density
|
180
|
+
|
181
|
+
initialBottomInsets = (this@UnistylesModule.platform.getInsets().bottom * density).roundToInt()
|
182
|
+
}
|
183
|
+
|
184
|
+
isGoingUp = !isKeyboardVisible
|
185
|
+
}
|
186
|
+
|
187
|
+
override fun onProgress(
|
188
|
+
insets: WindowInsetsCompat,
|
189
|
+
runningAnimations: List<WindowInsetsAnimationCompat>
|
190
|
+
): WindowInsetsCompat {
|
191
|
+
if (!_shouldListenToImeEvents) {
|
192
|
+
return insets
|
193
|
+
}
|
194
|
+
|
195
|
+
runningAnimations.firstOrNull()?.let { animation ->
|
196
|
+
val progress = animation.fraction
|
197
|
+
val nextBottomInset = if (isGoingUp) {
|
198
|
+
(initialBottomInsets - (progress * initialBottomInsets).roundToInt())
|
199
|
+
} else {
|
200
|
+
// enable this in Unistyles 3.0 to get real time bottom insets
|
201
|
+
// initialBottomInsets - (initialBottomInsets - (progress * initialBottomInsets).roundToInt())
|
202
|
+
initialBottomInsets
|
203
|
+
}
|
204
|
+
|
205
|
+
this@UnistylesModule.platform.setInsetsCompat(insets, activity.window, nextBottomInset)
|
206
|
+
|
207
|
+
if (!isGoingUp) {
|
208
|
+
this@UnistylesModule.onLayoutConfigChange()
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
return insets
|
213
|
+
}
|
214
|
+
}
|
215
|
+
)
|
216
|
+
}
|
217
|
+
}
|
218
|
+
}
|
224
219
|
}
|
225
220
|
|
226
|
-
|
227
|
-
|
221
|
+
override fun onHostPause() {
|
222
|
+
this.reactApplicationContext.currentActivity?.let { activity ->
|
223
|
+
activity.window?.decorView?.let { view ->
|
224
|
+
ViewCompat.setOnApplyWindowInsetsListener(view, null)
|
225
|
+
}
|
226
|
+
}
|
228
227
|
|
229
|
-
|
230
|
-
fun removeListeners(count: Double) = Unit
|
231
|
-
override fun onHostResume() {
|
232
|
-
this.onConfigChange()
|
233
|
-
this.onLayoutConfigChange()
|
228
|
+
_shouldListenToImeEvents = false
|
234
229
|
}
|
235
230
|
|
236
|
-
override fun onHostPause() {}
|
237
|
-
|
238
231
|
override fun onHostDestroy() {}
|
239
|
-
//endregion
|
240
232
|
}
|
package/cxx/Macros.h
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#define HOST_FN(name, args, fn_body) \
|
4
|
+
jsi::Function::createFromHostFunction(rt, \
|
5
|
+
jsi::PropNameID::forAscii(rt, name), \
|
6
|
+
args, \
|
7
|
+
[this, &fnName](jsi::Runtime &rt, const jsi::Value &thisVal, const jsi::Value *arguments, size_t count) -> jsi::Value \
|
8
|
+
fn_body \
|
9
|
+
); \
|
10
|
+
|
11
|
+
#define BIND_FN(fn) std::bind(&UnistylesRuntime::fn, this, std::placeholders::_1, std::placeholders::_2)
|