18
18
import android .widget .Spinner ;
19
19
import android .widget .TextView ;
20
20
21
+ import androidx .annotation .NonNull ;
22
+
21
23
import com .facebook .infer .annotation .Assertions ;
22
24
import com .facebook .react .bridge .Arguments ;
23
25
import com .facebook .react .bridge .ReadableArray ;
24
26
import com .facebook .react .bridge .ReadableMap ;
27
+ import com .facebook .react .common .MapBuilder ;
25
28
import com .facebook .react .modules .i18nmanager .I18nUtil ;
26
29
import com .facebook .react .uimanager .*;
27
30
import com .facebook .react .uimanager .annotations .ReactProp ;
28
31
import com .facebook .react .uimanager .events .EventDispatcher ;
29
32
33
+ import java .util .Map ;
34
+
30
35
import javax .annotation .Nullable ;
31
36
32
37
/**
39
44
public abstract class ReactPickerManager extends BaseViewManager <ReactPicker , ReactPickerShadowNode > {
40
45
private static final ReadableArray EMPTY_ARRAY = Arguments .createArray ();
41
46
47
+ private static final int FOCUS_PICKER = 1 ;
48
+ private static final int BLUR_PICKER = 2 ;
49
+
50
+ @ Nullable
51
+ @ Override
52
+ public Map <String , Object > getExportedCustomBubblingEventTypeConstants () {
53
+ return MapBuilder .<String , Object >builder ()
54
+ .put (
55
+ "topSelect" ,
56
+ MapBuilder .of (
57
+ "phasedRegistrationNames" ,
58
+ MapBuilder .of ("bubbled" , "onSelect" , "captured" , "onSelectCapture" )))
59
+ .put (
60
+ "topFocus" ,
61
+ MapBuilder .of (
62
+ "phasedRegistrationNames" ,
63
+ MapBuilder .of ("bubbled" , "onFocus" , "captured" , "onFocusCapture" )))
64
+ .put (
65
+ "topBlur" ,
66
+ MapBuilder .of (
67
+ "phasedRegistrationNames" ,
68
+ MapBuilder .of ("bubbled" , "onBlur" , "captured" , "onBlurCapture" )))
69
+ .build ();
70
+ }
71
+
72
+ @ Override
73
+ public @ Nullable Map <String , Integer > getCommandsMap () {
74
+ return MapBuilder .of ("focus" , FOCUS_PICKER , "blur" , BLUR_PICKER );
75
+ }
76
+
42
77
@ ReactProp (name = "items" )
43
78
public void setItems (ReactPicker view , @ Nullable ReadableArray items ) {
44
79
ReactPickerAdapter adapter = (ReactPickerAdapter ) view .getAdapter ();
@@ -104,10 +139,35 @@ protected void onAfterUpdateTransaction(ReactPicker view) {
104
139
protected void addEventEmitters (
105
140
final ThemedReactContext reactContext ,
106
141
final ReactPicker picker ) {
107
- picker .setOnSelectListener (
108
- new PickerEventEmitter (
109
- picker ,
110
- reactContext .getNativeModule (UIManagerModule .class ).getEventDispatcher ()));
142
+ final PickerEventEmitter eventEmitter = new PickerEventEmitter (
143
+ picker ,
144
+ reactContext .getNativeModule (UIManagerModule .class ).getEventDispatcher ());
145
+ picker .setOnSelectListener (eventEmitter );
146
+ picker .setOnFocusListener (eventEmitter );
147
+ }
148
+
149
+ @ Override
150
+ public void receiveCommand (@ NonNull ReactPicker root , int commandId , @ androidx .annotation .Nullable ReadableArray args ) {
151
+ switch (commandId ) {
152
+ case FOCUS_PICKER :
153
+ root .performClick ();
154
+ break ;
155
+ case BLUR_PICKER :
156
+ root .clearFocus ();
157
+ break ;
158
+ }
159
+ }
160
+
161
+ @ Override
162
+ public void receiveCommand (@ NonNull ReactPicker root , String commandId , @ androidx .annotation .Nullable ReadableArray args ) {
163
+ switch (commandId ) {
164
+ case "focus" :
165
+ root .performClick ();
166
+ break ;
167
+ case "blur" :
168
+ root .clearFocus ();
169
+ break ;
170
+ }
111
171
}
112
172
113
173
@ Override
@@ -254,7 +314,7 @@ public void setNumberOfLines(int numberOfLines) {
254
314
}
255
315
}
256
316
257
- private static class PickerEventEmitter implements ReactPicker .OnSelectListener {
317
+ private static class PickerEventEmitter implements ReactPicker .OnSelectListener , ReactPicker . OnFocusListener {
258
318
259
319
private final ReactPicker mReactPicker ;
260
320
private final EventDispatcher mEventDispatcher ;
@@ -269,5 +329,15 @@ public void onItemSelected(int position) {
269
329
mEventDispatcher .dispatchEvent ( new PickerItemSelectEvent (
270
330
mReactPicker .getId (), position ));
271
331
}
332
+
333
+ @ Override
334
+ public void onPickerBlur () {
335
+ mEventDispatcher .dispatchEvent ( new PickerBlurEvent (mReactPicker .getId ()));
336
+ }
337
+
338
+ @ Override
339
+ public void onPickerFocus () {
340
+ mEventDispatcher .dispatchEvent ( new PickerFocusEvent (mReactPicker .getId ()));
341
+ }
272
342
}
273
343
}
0 commit comments