Repository navigation
Expand file tree
/
Copy pathSafeAreaProviderManager.kt
More file actions
57 lines (48 loc) · 1.92 KB
/
Copy pathSafeAreaProviderManager.kt
File metadata and controls
57 lines (48 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.th3rdwave.safeareacontext
import com.facebook.react.bridge.ReactContext
import com.facebook.react.module.annotations.ReactModule
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.UIManagerHelper
import com.facebook.react.uimanager.ViewGroupManager
import com.facebook.react.viewmanagers.RNCSafeAreaProviderManagerDelegate
import com.facebook.react.viewmanagers.RNCSafeAreaProviderManagerInterface
@ReactModule(name = SafeAreaProviderManager.REACT_CLASS)
class SafeAreaProviderManager :
ViewGroupManager<SafeAreaProvider>(), RNCSafeAreaProviderManagerInterface<SafeAreaProvider> {
private val mDelegate = RNCSafeAreaProviderManagerDelegate(this)
override fun getDelegate() = mDelegate
override fun getName() = REACT_CLASS
public override fun createViewInstance(context: ThemedReactContext) = SafeAreaProvider(context)
override fun getExportedCustomDirectEventTypeConstants() =
mutableMapOf(
InsetsChangeEvent.EVENT_NAME to mutableMapOf("registrationName" to "onInsetsChange")
)
override fun addEventEmitters(reactContext: ThemedReactContext, view: SafeAreaProvider) {
super.addEventEmitters(reactContext, view)
view.setOnInsetsChangeHandler(::handleOnInsetsChange)
}
companion object {
const val REACT_CLASS = "RNCSafeAreaProvider"
}
}
private fun handleOnInsetsChange(
view: SafeAreaProvider,
insets: EdgeInsets,
verticalCornerAdaptedInsets: EdgeInsets,
horizontalCornerAdaptedInsets: EdgeInsets,
frame: Rect,
) {
val reactContext = view.context as ReactContext
val reactTag = view.id
UIManagerHelper.getEventDispatcherForReactTag(reactContext, reactTag)
?.dispatchEvent(
InsetsChangeEvent(
getSurfaceId(reactContext),
reactTag,
insets,
verticalCornerAdaptedInsets,
horizontalCornerAdaptedInsets,
frame,
)
)
}