|
1 | 1 | package com.animatedobserver |
2 | 2 |
|
3 | | -import android.util.Log |
4 | | -import android.view.View |
5 | | -import com.facebook.react.bridge.Arguments |
6 | | -import com.facebook.react.bridge.ReactContext |
7 | | -import com.facebook.react.bridge.WritableMap |
8 | 3 | import com.facebook.react.module.annotations.ReactModule |
9 | 4 | import com.facebook.react.uimanager.SimpleViewManager |
10 | 5 | import com.facebook.react.uimanager.ThemedReactContext |
11 | | -import com.facebook.react.uimanager.UIManagerHelper |
12 | 6 | import com.facebook.react.uimanager.ViewManagerDelegate |
13 | 7 | import com.facebook.react.uimanager.annotations.ReactProp |
14 | | -import com.facebook.react.uimanager.events.Event |
15 | 8 | import com.facebook.react.viewmanagers.AnimatedObserverViewManagerDelegate |
16 | 9 | import com.facebook.react.viewmanagers.AnimatedObserverViewManagerInterface |
17 | | -import java.util.concurrent.ConcurrentHashMap |
18 | 10 |
|
19 | | -@ReactModule(name = AnimatedObserverViewManager.NAME) |
20 | | -class AnimatedObserverViewManager : SimpleViewManager<View>(), |
21 | | - AnimatedObserverViewManagerInterface<View> { |
22 | | - private val mDelegate: ViewManagerDelegate<View> = |
| 11 | +@ReactModule(name = AnimatedObserverView.NAME) |
| 12 | +class AnimatedObserverViewManager : SimpleViewManager<AnimatedObserverView>(), |
| 13 | + AnimatedObserverViewManagerInterface<AnimatedObserverView> { |
| 14 | + private val mDelegate: ViewManagerDelegate<AnimatedObserverView> = |
23 | 15 | AnimatedObserverViewManagerDelegate(this) |
24 | 16 |
|
25 | | - private var manager: AnimatedObserverEventManager? = null; |
26 | | - |
27 | | - override fun createViewInstance(context: ThemedReactContext): View { |
28 | | - val view = View(context) |
29 | | - |
30 | | - manager?.cleanup() |
31 | | - manager = AnimatedObserverEventManager({ value -> |
32 | | - val reactContext = view.context as ReactContext |
33 | | - val surfaceId = UIManagerHelper.getSurfaceId(reactContext) |
34 | | - val eventDispatcher = UIManagerHelper.getEventDispatcherForReactTag(reactContext, surfaceId) |
35 | | - ?: throw IllegalStateException("$AnimatedObserverViewManager.NAME: EventDispatcher is not available for surfaceId: $surfaceId") |
36 | | - |
37 | | - eventDispatcher.dispatchEvent(ValueChangeEvent(surfaceId, view.id, value)) |
38 | | - }) |
| 17 | + override fun createViewInstance(context: ThemedReactContext): AnimatedObserverView { |
| 18 | + val view = AnimatedObserverView(context) |
39 | 19 |
|
40 | 20 | return view; |
41 | 21 | } |
42 | 22 |
|
43 | | - override fun onDropViewInstance(view: View) { |
44 | | - manager?.cleanup() |
45 | | - manager = null |
| 23 | + override fun onDropViewInstance(view: AnimatedObserverView) { |
| 24 | + view.manager.cleanup() |
46 | 25 |
|
47 | 26 | super.onDropViewInstance(view) |
48 | 27 | } |
49 | 28 |
|
50 | 29 | override fun prepareToRecycleView( |
51 | 30 | reactContext: ThemedReactContext, |
52 | | - view: View |
53 | | - ): View? { |
54 | | - manager?.cleanup() |
55 | | - manager = null |
56 | | - |
| 31 | + view: AnimatedObserverView |
| 32 | + ): AnimatedObserverView? { |
57 | 33 | return super.prepareToRecycleView(reactContext, view) |
58 | 34 | } |
59 | 35 |
|
60 | 36 | override fun getDelegate() = mDelegate |
61 | 37 |
|
62 | | - override fun getName() = NAME |
| 38 | + override fun getName() = AnimatedObserverView.NAME |
63 | 39 |
|
64 | 40 | override fun getExportedCustomDirectEventTypeConstants() = mapOf( |
65 | | - EVENT_ON_CHANGE to mapOf("registrationName" to EVENT_ON_CHANGE) |
| 41 | + AnimatedObserverView.EVENT_ON_CHANGE to mapOf("registrationName" to AnimatedObserverView.EVENT_ON_CHANGE) |
66 | 42 | ) |
67 | 43 |
|
68 | 44 | @ReactProp(name = "tag") |
69 | | - override fun setTag(view: View, nextTag: String?) { |
70 | | - manager?.tag = nextTag |
| 45 | + override fun setTag(view: AnimatedObserverView, nextTag: String?) { |
| 46 | + view.manager.tag = nextTag |
71 | 47 | } |
72 | 48 |
|
73 | 49 | @ReactProp(name = "value") |
74 | | - override fun setValue(view: View, nextValue: Double) { |
75 | | - manager?.value = nextValue |
76 | | - } |
77 | | - |
78 | | - inner class ValueChangeEvent( |
79 | | - surfaceId: Int, viewId: Int, private val value: Double |
80 | | - ) : Event<ValueChangeEvent>(surfaceId, viewId) { |
81 | | - override fun getEventName() = EVENT_ON_CHANGE |
82 | | - |
83 | | - override fun getEventData(): WritableMap = Arguments.createMap().apply { |
84 | | - putDouble("value", value) |
85 | | - } |
86 | | - } |
87 | | - |
88 | | - companion object { |
89 | | - const val NAME = "AnimatedObserverView" |
90 | | - |
91 | | - /** |
92 | | - * On Android, it's necessary to use `top` prefix for event names |
93 | | - * Otherwise it doesn't work with `Animated.event` using `useNativeDriver: true` |
94 | | - */ |
95 | | - const val EVENT_ON_CHANGE = "topValueChange" |
| 50 | + override fun setValue(view: AnimatedObserverView, nextValue: Double) { |
| 51 | + view.manager.value = nextValue |
96 | 52 | } |
97 | 53 | } |
0 commit comments