From c8c02c30de67a7b1a4de888d4f5ca3d674cee074 Mon Sep 17 00:00:00 2001 From: Igor Furgala Date: Tue, 2 Sep 2025 13:58:55 +0200 Subject: [PATCH 1/2] feat: android experimental synchronous events --- .../enriched/EnrichedTextInputView.kt | 6 ++-- .../enriched/EnrichedTextInputViewManager.kt | 7 +++++ .../enriched/events/MentionHandler.kt | 8 +++++- .../enriched/events/OnChangeHtmlEvent.kt | 6 +++- .../enriched/events/OnChangeSelectionEvent.kt | 6 +++- .../enriched/events/OnChangeStateEvent.kt | 6 +++- .../enriched/events/OnChangeTextEvent.kt | 6 +++- .../enriched/events/OnInputBlurEvent.kt | 6 +++- .../enriched/events/OnInputFocusEvent.kt | 6 +++- .../enriched/events/OnLinkDetectedEvent.kt | 6 +++- .../enriched/events/OnMentionDetectedEvent.kt | 6 +++- .../enriched/events/OnMentionEvent.kt | 6 +++- ...ditorSelection.kt => EnrichedSelection.kt} | 28 +++++++++++++++++-- ...ditorSpanSpate.kt => EnrichedSpanState.kt} | 7 ++++- .../enriched/watchers/EnrichedSpanWatcher.kt | 7 ++++- .../enriched/watchers/EnrichedTextWatcher.kt | 7 ++++- example/src/App.tsx | 7 +++++ src/EnrichedTextInput.tsx | 12 ++++++++ src/EnrichedTextInputNativeComponent.ts | 3 ++ 19 files changed, 128 insertions(+), 18 deletions(-) rename android/src/main/java/com/swmansion/enriched/utils/{EditorSelection.kt => EnrichedSelection.kt} (94%) rename android/src/main/java/com/swmansion/enriched/utils/{EditorSpanSpate.kt => EnrichedSpanState.kt} (97%) diff --git a/android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt b/android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt index e2e5c6adf..8ed507884 100644 --- a/android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt +++ b/android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt @@ -59,6 +59,8 @@ class EnrichedTextInputView : AppCompatEditText { var spanWatcher: EnrichedSpanWatcher? = null var layoutManager: EnrichedTextInputViewLayoutManager = EnrichedTextInputViewLayoutManager(this) + var experimentalSynchronousEvents: Boolean = false + var fontSize: Float? = null private var autoFocus = false private var typefaceDirty = false @@ -147,9 +149,9 @@ class EnrichedTextInputView : AppCompatEditText { val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, id) if (focused) { - dispatcher?.dispatchEvent(OnInputFocusEvent(surfaceId, id)) + dispatcher?.dispatchEvent(OnInputFocusEvent(surfaceId, id, experimentalSynchronousEvents)) } else { - dispatcher?.dispatchEvent(OnInputBlurEvent(surfaceId, id)) + dispatcher?.dispatchEvent(OnInputBlurEvent(surfaceId, id, experimentalSynchronousEvents)) } } diff --git a/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewManager.kt b/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewManager.kt index 5ef32d673..9435ca9cc 100644 --- a/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewManager.kt +++ b/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewManager.kt @@ -182,6 +182,13 @@ class EnrichedTextInputViewManager : SimpleViewManager(), view?.setAutoCapitalize(flag) } + override fun setAndroidExperimentalSynchronousEvents( + view: EnrichedTextInputView?, + value: Boolean + ) { + view?.experimentalSynchronousEvents = value + } + override fun focus(view: EnrichedTextInputView?) { view?.requestFocusProgrammatically() } diff --git a/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt b/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt index b73da8172..ee3f96c76 100644 --- a/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt +++ b/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt @@ -29,6 +29,12 @@ class MentionHandler(private val view: EnrichedTextInputView) { val context = view.context as ReactContext val surfaceId = UIManagerHelper.getSurfaceId(context) val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id) - dispatcher?.dispatchEvent(OnMentionEvent(surfaceId, view.id, indicator, text)) + dispatcher?.dispatchEvent(OnMentionEvent( + surfaceId, + view.id, + indicator, + text, + view.experimentalSynchronousEvents) + ) } } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt index d55d65ce0..69bdb72dd 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt @@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnChangeHtmlEvent(surfaceId: Int, viewId: Int, private val html: String) : +class OnChangeHtmlEvent(surfaceId: Int, viewId: Int, private val html: String, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -18,6 +18,10 @@ class OnChangeHtmlEvent(surfaceId: Int, viewId: Int, private val html: String) : return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onChangeHtml" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnChangeSelectionEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnChangeSelectionEvent.kt index 8fe418996..9c3ad086a 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnChangeSelectionEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnChangeSelectionEvent.kt @@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnChangeSelectionEvent(surfaceId: Int, viewId: Int, private val text: String, private val start: Int, private val end: Int) : +class OnChangeSelectionEvent(surfaceId: Int, viewId: Int, private val text: String, private val start: Int, private val end: Int, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -19,6 +19,10 @@ class OnChangeSelectionEvent(surfaceId: Int, viewId: Int, private val text: Stri return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onChangeSelection" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt index e70d66a77..1c19e068f 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt @@ -3,7 +3,7 @@ package com.swmansion.enriched.events import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnChangeStateEvent(surfaceId: Int, viewId: Int, private val state: WritableMap) : +class OnChangeStateEvent(surfaceId: Int, viewId: Int, private val state: WritableMap, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -14,6 +14,10 @@ class OnChangeStateEvent(surfaceId: Int, viewId: Int, private val state: Writabl return state } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onChangeState" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt index 13e4cdea9..a3194652b 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt @@ -5,7 +5,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnChangeTextEvent(surfaceId: Int, viewId: Int, private val editable: Editable) : +class OnChangeTextEvent(surfaceId: Int, viewId: Int, private val editable: Editable, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -20,6 +20,10 @@ class OnChangeTextEvent(surfaceId: Int, viewId: Int, private val editable: Edita return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onChangeText" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt index adf328a23..3cccbde65 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt @@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnInputBlurEvent(surfaceId: Int, viewId: Int) : +class OnInputBlurEvent(surfaceId: Int, viewId: Int, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -17,6 +17,10 @@ class OnInputBlurEvent(surfaceId: Int, viewId: Int) : return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onInputBlur" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt index 1fe16b75d..c70443c75 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt @@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnInputFocusEvent(surfaceId: Int, viewId: Int) : +class OnInputFocusEvent(surfaceId: Int, viewId: Int, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -17,6 +17,10 @@ class OnInputFocusEvent(surfaceId: Int, viewId: Int) : return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onInputFocus" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt index ee90f9e25..edc35e415 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt @@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnLinkDetectedEvent(surfaceId: Int, viewId: Int, private val text: String, private val url: String, private val start: Int, private val end: Int) : +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) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -20,6 +20,10 @@ class OnLinkDetectedEvent(surfaceId: Int, viewId: Int, private val text: String, return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onLinkDetected" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnMentionDetectedEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnMentionDetectedEvent.kt index 51c684614..70922b15f 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnMentionDetectedEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnMentionDetectedEvent.kt @@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnMentionDetectedEvent(surfaceId: Int, viewId: Int, private val text: String, private val indicator: String, private val payload: String) : +class OnMentionDetectedEvent(surfaceId: Int, viewId: Int, private val text: String, private val indicator: String, private val payload: String, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { @@ -19,6 +19,10 @@ class OnMentionDetectedEvent(surfaceId: Int, viewId: Int, private val text: Stri return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onMentionDetected" } diff --git a/android/src/main/java/com/swmansion/enriched/events/OnMentionEvent.kt b/android/src/main/java/com/swmansion/enriched/events/OnMentionEvent.kt index 1849b09df..62c1237a3 100644 --- a/android/src/main/java/com/swmansion/enriched/events/OnMentionEvent.kt +++ b/android/src/main/java/com/swmansion/enriched/events/OnMentionEvent.kt @@ -4,7 +4,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event -class OnMentionEvent(surfaceId: Int, viewId: Int, private val indicator: String, private val text: String?) : Event(surfaceId, viewId) { +class OnMentionEvent(surfaceId: Int, viewId: Int, private val indicator: String, private val text: String?, private val experimentalSynchronousEvents: Boolean) : Event(surfaceId, viewId) { override fun getEventName(): String { return EVENT_NAME @@ -23,6 +23,10 @@ class OnMentionEvent(surfaceId: Int, viewId: Int, private val indicator: String, return eventData } + override fun experimental_isSynchronous(): Boolean { + return experimentalSynchronousEvents + } + companion object { const val EVENT_NAME: String = "onMention" } diff --git a/android/src/main/java/com/swmansion/enriched/utils/EditorSelection.kt b/android/src/main/java/com/swmansion/enriched/utils/EnrichedSelection.kt similarity index 94% rename from android/src/main/java/com/swmansion/enriched/utils/EditorSelection.kt rename to android/src/main/java/com/swmansion/enriched/utils/EnrichedSelection.kt index 0f130ecba..f78536f3a 100644 --- a/android/src/main/java/com/swmansion/enriched/utils/EditorSelection.kt +++ b/android/src/main/java/com/swmansion/enriched/utils/EnrichedSelection.kt @@ -220,7 +220,14 @@ class EnrichedSelection(private val view: EnrichedTextInputView) { val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id) val text = editable.substring(start, end) - dispatcher?.dispatchEvent(OnChangeSelectionEvent(surfaceId, view.id, text, start ,end)) + dispatcher?.dispatchEvent(OnChangeSelectionEvent( + surfaceId, + view.id, + text, + start , + end, + view.experimentalSynchronousEvents, + )) } private fun emitLinkDetectedEvent(spannable: Spannable, span: EnrichedLinkSpan?, start: Int, end: Int) { @@ -236,7 +243,15 @@ class EnrichedSelection(private val view: EnrichedTextInputView) { val context = view.context as ReactContext val surfaceId = UIManagerHelper.getSurfaceId(context) val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id) - dispatcher?.dispatchEvent(OnLinkDetectedEvent(surfaceId, view.id, text, url, start, end)) + dispatcher?.dispatchEvent(OnLinkDetectedEvent( + surfaceId, + view.id, + text, + url, + start, + end, + view.experimentalSynchronousEvents, + )) } private fun emitMentionDetectedEvent(spannable: Spannable, span: EnrichedMentionSpan?, start: Int, end: Int) { @@ -258,6 +273,13 @@ class EnrichedSelection(private val view: EnrichedTextInputView) { val context = view.context as ReactContext val surfaceId = UIManagerHelper.getSurfaceId(context) val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id) - dispatcher?.dispatchEvent(OnMentionDetectedEvent(surfaceId, view.id, text, indicator, payload)) + dispatcher?.dispatchEvent(OnMentionDetectedEvent( + surfaceId, + view.id, + text, + indicator, + payload, + view.experimentalSynchronousEvents, + )) } } diff --git a/android/src/main/java/com/swmansion/enriched/utils/EditorSpanSpate.kt b/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpanState.kt similarity index 97% rename from android/src/main/java/com/swmansion/enriched/utils/EditorSpanSpate.kt rename to android/src/main/java/com/swmansion/enriched/utils/EnrichedSpanState.kt index 13a567271..ff733dd4f 100644 --- a/android/src/main/java/com/swmansion/enriched/utils/EditorSpanSpate.kt +++ b/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpanState.kt @@ -190,7 +190,12 @@ class EnrichedSpanState(private val view: EnrichedTextInputView) { val context = view.context as ReactContext val surfaceId = UIManagerHelper.getSurfaceId(context) val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id) - dispatcher?.dispatchEvent(OnChangeStateEvent(surfaceId, view.id, payload)) + dispatcher?.dispatchEvent(OnChangeStateEvent( + surfaceId, + view.id, + payload, + view.experimentalSynchronousEvents, + )) } companion object { diff --git a/android/src/main/java/com/swmansion/enriched/watchers/EnrichedSpanWatcher.kt b/android/src/main/java/com/swmansion/enriched/watchers/EnrichedSpanWatcher.kt index b304816a6..99963a0d0 100644 --- a/android/src/main/java/com/swmansion/enriched/watchers/EnrichedSpanWatcher.kt +++ b/android/src/main/java/com/swmansion/enriched/watchers/EnrichedSpanWatcher.kt @@ -63,6 +63,11 @@ class EnrichedSpanWatcher(private val view: EnrichedTextInputView) : SpanWatcher val context = view.context as ReactContext val surfaceId = UIManagerHelper.getSurfaceId(context) val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id) - dispatcher?.dispatchEvent(OnChangeHtmlEvent(surfaceId, view.id, html)) + dispatcher?.dispatchEvent(OnChangeHtmlEvent( + surfaceId, + view.id, + html, + view.experimentalSynchronousEvents, + )) } } diff --git a/android/src/main/java/com/swmansion/enriched/watchers/EnrichedTextWatcher.kt b/android/src/main/java/com/swmansion/enriched/watchers/EnrichedTextWatcher.kt index d22fdd9cf..9c26f6857 100644 --- a/android/src/main/java/com/swmansion/enriched/watchers/EnrichedTextWatcher.kt +++ b/android/src/main/java/com/swmansion/enriched/watchers/EnrichedTextWatcher.kt @@ -40,7 +40,12 @@ class EnrichedTextWatcher(private val view: EnrichedTextInputView) : TextWatcher val context = view.context as ReactContext val surfaceId = UIManagerHelper.getSurfaceId(context) val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id) - dispatcher?.dispatchEvent(OnChangeTextEvent(surfaceId, view.id, s)) + dispatcher?.dispatchEvent(OnChangeTextEvent( + surfaceId, + view.id, + s, + view.experimentalSynchronousEvents, + )) view.spanWatcher?.emitEvent(s, null) } } diff --git a/example/src/App.tsx b/example/src/App.tsx index a265374a9..856ab945d 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -63,6 +63,10 @@ const DEFAULT_LINK_STATE = { const DEBUG_SCROLLABLE = false; +// Enabling this prop fixes input flickering while auto growing. +// However, it's still experimental and not tested well. +const ANDROID_EXPERIMENTAL_SYNCHRONOUS_EVENTS = true; + export default function App() { const [isChannelPopupOpen, setIsChannelPopupOpen] = useState(false); const [isUserPopupOpen, setIsUserPopupOpen] = useState(false); @@ -240,6 +244,9 @@ export default function App() { onFocus={handleFocusEvent} onBlur={handleBlurEvent} onChangeSelection={handleSelectionChangeEvent} + androidExperimentalSynchronousEvents={ + ANDROID_EXPERIMENTAL_SYNCHRONOUS_EVENTS + } /> { onChangeMention?: (e: OnChangeMentionEvent) => void; onEndMention?: (indicator: string) => void; onChangeSelection?: (e: NativeSyntheticEvent) => void; + /** + * If true, Android will use experimental synchronous events. + * This will prevent from input flickering when updating component size. + * However, this is an experimental feature, which has not been thoroughly tested. + * We may decide to enable it by default in a future release. + * Disabled by default. + */ + androidExperimentalSynchronousEvents?: boolean; } const nullthrows = (value: T | null | undefined): T => { @@ -183,6 +191,7 @@ export const EnrichedTextInput = ({ onChangeMention, onEndMention, onChangeSelection, + androidExperimentalSynchronousEvents = false, ...rest }: EnrichedTextInputProps) => { const nativeRef = useRef(null); @@ -340,6 +349,9 @@ export const EnrichedTextInput = ({ onMentionDetected={handleMentionDetected} onMention={handleMentionEvent} onChangeSelection={onChangeSelection} + androidExperimentalSynchronousEvents={ + androidExperimentalSynchronousEvents + } {...rest} /> ); diff --git a/src/EnrichedTextInputNativeComponent.ts b/src/EnrichedTextInputNativeComponent.ts index 97adb8531..34a9c5e39 100644 --- a/src/EnrichedTextInputNativeComponent.ts +++ b/src/EnrichedTextInputNativeComponent.ts @@ -157,6 +157,9 @@ export interface NativeProps extends ViewProps { // Used for onChangeHtml event performance optimization isOnChangeHtmlSet: boolean; + + // Experimental + androidExperimentalSynchronousEvents: boolean; } type ComponentType = HostComponent; From ff51221c87d87ca1f59d7deb21f3fd9b29982d2f Mon Sep 17 00:00:00 2001 From: Igor Furgala Date: Tue, 2 Sep 2025 14:02:31 +0200 Subject: [PATCH 2/2] chore: pretify --- .../main/java/com/swmansion/enriched/events/MentionHandler.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt b/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt index ee3f96c76..4a47ec6b3 100644 --- a/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt +++ b/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt @@ -34,7 +34,7 @@ class MentionHandler(private val view: EnrichedTextInputView) { view.id, indicator, text, - view.experimentalSynchronousEvents) - ) + view.experimentalSynchronousEvents, + )) } }