@@ -4,6 +4,7 @@ import android.content.Context
44import android.graphics.BlendMode
55import android.graphics.BlendModeColorFilter
66import android.graphics.Color
7+ import android.graphics.Rect
78import android.os.Build
89import android.text.Spannable
910import android.text.StaticLayout
@@ -15,14 +16,18 @@ import android.view.MotionEvent
1516import android.view.inputmethod.InputMethodManager
1617import androidx.appcompat.widget.AppCompatEditText
1718import com.facebook.react.bridge.Arguments
19+ import com.facebook.react.bridge.ReactContext
1820import com.facebook.react.common.ReactConstants
1921import com.facebook.react.uimanager.PixelUtil
2022import com.facebook.react.uimanager.StateWrapper
23+ import com.facebook.react.uimanager.UIManagerHelper
2124import com.facebook.react.views.text.ReactTypefaceUtils.applyStyles
2225import com.facebook.react.views.text.ReactTypefaceUtils.parseFontStyle
2326import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight
2427import com.swmansion.reactnativerichtexteditor.events.LinkHandler
2528import com.swmansion.reactnativerichtexteditor.events.MentionHandler
29+ import com.swmansion.reactnativerichtexteditor.events.OnBlurEvent
30+ import com.swmansion.reactnativerichtexteditor.events.OnFocusEvent
2631import com.swmansion.reactnativerichtexteditor.spans.EditorSpans
2732import com.swmansion.reactnativerichtexteditor.styles.InlineStyles
2833import com.swmansion.reactnativerichtexteditor.styles.ListStyles
@@ -129,15 +134,28 @@ class ReactNativeRichTextEditorView : AppCompatEditText {
129134 selection?.onSelection(selStart, selEnd)
130135 }
131136
132- fun setStateWrapper (sw : StateWrapper ? ) {
133- stateWrapper = sw
134- }
135-
136137 override fun clearFocus () {
137138 super .clearFocus()
138139 inputMethodManager?.hideSoftInputFromWindow(windowToken, 0 )
139140 }
140141
142+ override fun onFocusChanged (focused : Boolean , direction : Int , previouslyFocusedRect : Rect ? ) {
143+ super .onFocusChanged(focused, direction, previouslyFocusedRect)
144+ val context = context as ReactContext
145+ val surfaceId = UIManagerHelper .getSurfaceId(context)
146+ val dispatcher = UIManagerHelper .getEventDispatcherForReactTag(context, id)
147+
148+ if (focused) {
149+ dispatcher?.dispatchEvent(OnFocusEvent (surfaceId, id))
150+ } else {
151+ dispatcher?.dispatchEvent(OnBlurEvent (surfaceId, id))
152+ }
153+ }
154+
155+ fun setStateWrapper (sw : StateWrapper ? ) {
156+ stateWrapper = sw
157+ }
158+
141159 fun requestFocusProgrammatically () {
142160 requestFocus()
143161 inputMethodManager?.showSoftInput(this , 0 )
0 commit comments