From 121141c86b75b46fe9cbd5ec36853d75cd33615b Mon Sep 17 00:00:00 2001 From: Lulu Wu Date: Tue, 29 Sep 2020 05:14:48 -0700 Subject: [PATCH] Convert AndroidDialogPicker to JS view configs Summary: Convert AndroidDialogPicker to JS view configs Changelog: [Internal] Reviewed By: ejanzer Differential Revision: D23911673 fbshipit-source-id: d5fefa997432f0096308ab5593ba74c2c07b71e1 --- .../AndroidDialogPickerNativeComponent.js | 21 ++++++++++--- .../Picker/AndroidDialogPickerViewConfig.js | 30 +++++++++++++++++++ .../views/picker/ReactPickerManager.java | 12 +++----- 3 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 Libraries/Components/Picker/AndroidDialogPickerViewConfig.js diff --git a/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js b/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js index bac74826a1f..d0175786590 100644 --- a/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js +++ b/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @format - * @flow strict-local + * @flow */ 'use strict'; @@ -14,6 +14,8 @@ import * as React from 'react'; import codegenNativeCommands from '../../Utilities/codegenNativeCommands'; import requireNativeComponent from '../../ReactNative/requireNativeComponent'; +import registerGeneratedViewConfig from '../../Utilities/registerGeneratedViewConfig'; +import AndroidDialogPickerViewConfig from './AndroidDialogPickerViewConfig'; import type { DirectEventHandler, @@ -64,6 +66,17 @@ export const Commands: NativeCommands = codegenNativeCommands({ supportedCommands: ['setNativeSelectedPosition'], }); -export default (requireNativeComponent( - 'AndroidDialogPicker', -): NativeType); +let AndroidDialogPickerNativeComponent; +if (global.RN$Bridgeless) { + registerGeneratedViewConfig( + 'AndroidDialogPicker', + AndroidDialogPickerViewConfig, + ); + AndroidDialogPickerNativeComponent = 'AndroidDialogPicker'; +} else { + AndroidDialogPickerNativeComponent = requireNativeComponent( + 'AndroidDialogPicker', + ); +} + +export default ((AndroidDialogPickerNativeComponent: any): NativeType); diff --git a/Libraries/Components/Picker/AndroidDialogPickerViewConfig.js b/Libraries/Components/Picker/AndroidDialogPickerViewConfig.js new file mode 100644 index 00000000000..1108b8105e3 --- /dev/null +++ b/Libraries/Components/Picker/AndroidDialogPickerViewConfig.js @@ -0,0 +1,30 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +'use strict'; + +import type {GeneratedViewConfig} from '../../Utilities/registerGeneratedViewConfig'; + +const AndroidDialogPickerViewConfig = { + uiViewClassName: 'AndroidDialogPicker', + bubblingEventTypes: {}, + directEventTypes: {}, + validAttributes: { + color: {process: require('../../StyleSheet/processColor')}, + backgroundColor: {process: require('../../StyleSheet/processColor')}, + enabled: true, + items: true, + prompt: true, + selected: true, + onSelect: true, + }, +}; + +module.exports = (AndroidDialogPickerViewConfig: GeneratedViewConfig); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java index e5c42e05990..ffc46232aa9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java @@ -13,7 +13,7 @@ import androidx.annotation.Nullable; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.UIManagerModule; +import com.facebook.react.uimanager.UIManagerHelper; import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.events.EventDispatcher; @@ -62,13 +62,9 @@ public abstract class ReactPickerManager extends SimpleViewManager @Override protected void addEventEmitters(final ThemedReactContext reactContext, final ReactPicker picker) { - UIManagerModule uiManager = reactContext.getNativeModule(UIManagerModule.class); - - if (uiManager == null) { - return; - } - - picker.setOnSelectListener(new PickerEventEmitter(picker, uiManager.getEventDispatcher())); + picker.setOnSelectListener( + new PickerEventEmitter( + picker, UIManagerHelper.getEventDispatcherForReactTag(reactContext, picker.getId()))); } @Override