Skip to content

Commit eb1e210

Browse files
authored
feat: android experimental synchronous events (#137)
* feat: android experimental synchronous events * chore: pretify
1 parent 79cafcc commit eb1e210

19 files changed

Lines changed: 128 additions & 18 deletions

android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ class EnrichedTextInputView : AppCompatEditText {
5959
var spanWatcher: EnrichedSpanWatcher? = null
6060
var layoutManager: EnrichedTextInputViewLayoutManager = EnrichedTextInputViewLayoutManager(this)
6161

62+
var experimentalSynchronousEvents: Boolean = false
63+
6264
var fontSize: Float? = null
6365
private var autoFocus = false
6466
private var typefaceDirty = false
@@ -147,9 +149,9 @@ class EnrichedTextInputView : AppCompatEditText {
147149
val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, id)
148150

149151
if (focused) {
150-
dispatcher?.dispatchEvent(OnInputFocusEvent(surfaceId, id))
152+
dispatcher?.dispatchEvent(OnInputFocusEvent(surfaceId, id, experimentalSynchronousEvents))
151153
} else {
152-
dispatcher?.dispatchEvent(OnInputBlurEvent(surfaceId, id))
154+
dispatcher?.dispatchEvent(OnInputBlurEvent(surfaceId, id, experimentalSynchronousEvents))
153155
}
154156
}
155157

android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewManager.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,13 @@ class EnrichedTextInputViewManager : SimpleViewManager<EnrichedTextInputView>(),
182182
view?.setAutoCapitalize(flag)
183183
}
184184

185+
override fun setAndroidExperimentalSynchronousEvents(
186+
view: EnrichedTextInputView?,
187+
value: Boolean
188+
) {
189+
view?.experimentalSynchronousEvents = value
190+
}
191+
185192
override fun focus(view: EnrichedTextInputView?) {
186193
view?.requestFocusProgrammatically()
187194
}

android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ class MentionHandler(private val view: EnrichedTextInputView) {
2929
val context = view.context as ReactContext
3030
val surfaceId = UIManagerHelper.getSurfaceId(context)
3131
val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id)
32-
dispatcher?.dispatchEvent(OnMentionEvent(surfaceId, view.id, indicator, text))
32+
dispatcher?.dispatchEvent(OnMentionEvent(
33+
surfaceId,
34+
view.id,
35+
indicator,
36+
text,
37+
view.experimentalSynchronousEvents,
38+
))
3339
}
3440
}

android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments
44
import com.facebook.react.bridge.WritableMap
55
import com.facebook.react.uimanager.events.Event
66

7-
class OnChangeHtmlEvent(surfaceId: Int, viewId: Int, private val html: String) :
7+
class OnChangeHtmlEvent(surfaceId: Int, viewId: Int, private val html: String, private val experimentalSynchronousEvents: Boolean) :
88
Event<OnChangeHtmlEvent>(surfaceId, viewId) {
99

1010
override fun getEventName(): String {
@@ -18,6 +18,10 @@ class OnChangeHtmlEvent(surfaceId: Int, viewId: Int, private val html: String) :
1818
return eventData
1919
}
2020

21+
override fun experimental_isSynchronous(): Boolean {
22+
return experimentalSynchronousEvents
23+
}
24+
2125
companion object {
2226
const val EVENT_NAME: String = "onChangeHtml"
2327
}

android/src/main/java/com/swmansion/enriched/events/OnChangeSelectionEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments
44
import com.facebook.react.bridge.WritableMap
55
import com.facebook.react.uimanager.events.Event
66

7-
class OnChangeSelectionEvent(surfaceId: Int, viewId: Int, private val text: String, private val start: Int, private val end: Int) :
7+
class OnChangeSelectionEvent(surfaceId: Int, viewId: Int, private val text: String, private val start: Int, private val end: Int, private val experimentalSynchronousEvents: Boolean) :
88
Event<OnChangeSelectionEvent>(surfaceId, viewId) {
99

1010
override fun getEventName(): String {
@@ -19,6 +19,10 @@ class OnChangeSelectionEvent(surfaceId: Int, viewId: Int, private val text: Stri
1919
return eventData
2020
}
2121

22+
override fun experimental_isSynchronous(): Boolean {
23+
return experimentalSynchronousEvents
24+
}
25+
2226
companion object {
2327
const val EVENT_NAME: String = "onChangeSelection"
2428
}

android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.swmansion.enriched.events
33
import com.facebook.react.bridge.WritableMap
44
import com.facebook.react.uimanager.events.Event
55

6-
class OnChangeStateEvent(surfaceId: Int, viewId: Int, private val state: WritableMap) :
6+
class OnChangeStateEvent(surfaceId: Int, viewId: Int, private val state: WritableMap, private val experimentalSynchronousEvents: Boolean) :
77
Event<OnChangeStateEvent>(surfaceId, viewId) {
88

99
override fun getEventName(): String {
@@ -14,6 +14,10 @@ class OnChangeStateEvent(surfaceId: Int, viewId: Int, private val state: Writabl
1414
return state
1515
}
1616

17+
override fun experimental_isSynchronous(): Boolean {
18+
return experimentalSynchronousEvents
19+
}
20+
1721
companion object {
1822
const val EVENT_NAME: String = "onChangeState"
1923
}

android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.facebook.react.bridge.Arguments
55
import com.facebook.react.bridge.WritableMap
66
import com.facebook.react.uimanager.events.Event
77

8-
class OnChangeTextEvent(surfaceId: Int, viewId: Int, private val editable: Editable) :
8+
class OnChangeTextEvent(surfaceId: Int, viewId: Int, private val editable: Editable, private val experimentalSynchronousEvents: Boolean) :
99
Event<OnChangeTextEvent>(surfaceId, viewId) {
1010

1111
override fun getEventName(): String {
@@ -20,6 +20,10 @@ class OnChangeTextEvent(surfaceId: Int, viewId: Int, private val editable: Edita
2020
return eventData
2121
}
2222

23+
override fun experimental_isSynchronous(): Boolean {
24+
return experimentalSynchronousEvents
25+
}
26+
2327
companion object {
2428
const val EVENT_NAME: String = "onChangeText"
2529
}

android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments
44
import com.facebook.react.bridge.WritableMap
55
import com.facebook.react.uimanager.events.Event
66

7-
class OnInputBlurEvent(surfaceId: Int, viewId: Int) :
7+
class OnInputBlurEvent(surfaceId: Int, viewId: Int, private val experimentalSynchronousEvents: Boolean) :
88
Event<OnInputBlurEvent>(surfaceId, viewId) {
99

1010
override fun getEventName(): String {
@@ -17,6 +17,10 @@ class OnInputBlurEvent(surfaceId: Int, viewId: Int) :
1717
return eventData
1818
}
1919

20+
override fun experimental_isSynchronous(): Boolean {
21+
return experimentalSynchronousEvents
22+
}
23+
2024
companion object {
2125
const val EVENT_NAME: String = "onInputBlur"
2226
}

android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments
44
import com.facebook.react.bridge.WritableMap
55
import com.facebook.react.uimanager.events.Event
66

7-
class OnInputFocusEvent(surfaceId: Int, viewId: Int) :
7+
class OnInputFocusEvent(surfaceId: Int, viewId: Int, private val experimentalSynchronousEvents: Boolean) :
88
Event<OnInputFocusEvent>(surfaceId, viewId) {
99

1010
override fun getEventName(): String {
@@ -17,6 +17,10 @@ class OnInputFocusEvent(surfaceId: Int, viewId: Int) :
1717
return eventData
1818
}
1919

20+
override fun experimental_isSynchronous(): Boolean {
21+
return experimentalSynchronousEvents
22+
}
23+
2024
companion object {
2125
const val EVENT_NAME: String = "onInputFocus"
2226
}

android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments
44
import com.facebook.react.bridge.WritableMap
55
import com.facebook.react.uimanager.events.Event
66

7-
class OnLinkDetectedEvent(surfaceId: Int, viewId: Int, private val text: String, private val url: String, private val start: Int, private val end: Int) :
7+
class OnLinkDetectedEvent(surfaceId: Int, viewId: Int, private val text: String, private val url: String, private val start: Int, private val end: Int, private val experimentalSynchronousEvents: Boolean) :
88
Event<OnLinkDetectedEvent>(surfaceId, viewId) {
99

1010
override fun getEventName(): String {
@@ -20,6 +20,10 @@ class OnLinkDetectedEvent(surfaceId: Int, viewId: Int, private val text: String,
2020
return eventData
2121
}
2222

23+
override fun experimental_isSynchronous(): Boolean {
24+
return experimentalSynchronousEvents
25+
}
26+
2327
companion object {
2428
const val EVENT_NAME: String = "onLinkDetected"
2529
}

0 commit comments

Comments
 (0)