Remove Picker from OSS
Summary: Changelog: [General][Removed] - Remove Picker code from Android Reviewed By: ShikaSD Differential Revision: D29123164 fbshipit-source-id: 4471ea5f52885735ead07a656452ed5ef2bff65b
This commit is contained in:
Родитель
7f117394af
Коммит
77366cd869
|
@ -33,7 +33,6 @@ rn_android_library(
|
|||
react_native_target("java/com/facebook/react/uimanager:uimanager"),
|
||||
react_native_target("java/com/facebook/react/uimanager/annotations:annotations"),
|
||||
react_native_target("java/com/facebook/react/uimanager/util:util"),
|
||||
react_native_target("java/com/facebook/react/views/picker:picker"),
|
||||
react_native_target("java/com/facebook/react/views/progressbar:progressbar"),
|
||||
react_native_target("java/com/facebook/react/views/scroll:scroll"),
|
||||
react_native_target("java/com/facebook/react/views/slider:slider"),
|
||||
|
|
|
@ -11,7 +11,7 @@ LOCAL_MODULE := fabricjni
|
|||
|
||||
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := libreactconfig librrc_slider librrc_progressbar librrc_switch librrc_modal libyoga libglog libfb libfbjni libglog_init libfolly_json libfolly_futures libreact_render_mounting libreactnativeutilsjni libreact_utils libreact_render_debug libreact_render_graphics libreact_render_core react_render_componentregistry librrc_view librrc_unimplementedview librrc_root librrc_scrollview libbetter libreact_render_attributedstring libreact_render_uimanager libreact_render_templateprocessor libreact_render_scheduler libreact_render_animations libreact_render_imagemanager libreact_render_textlayoutmanager libreact_codegen_rncore rrc_text librrc_image librrc_textinput librrc_picker libreact_debug libreact_render_mapbuffer libmapbufferjni libreact_render_telemetry
|
||||
LOCAL_SHARED_LIBRARIES := libreactconfig librrc_slider librrc_progressbar librrc_switch librrc_modal libyoga libglog libfb libfbjni libglog_init libfolly_json libfolly_futures libreact_render_mounting libreactnativeutilsjni libreact_utils libreact_render_debug libreact_render_graphics libreact_render_core react_render_componentregistry librrc_view librrc_unimplementedview librrc_root librrc_scrollview libbetter libreact_render_attributedstring libreact_render_uimanager libreact_render_templateprocessor libreact_render_scheduler libreact_render_animations libreact_render_imagemanager libreact_render_textlayoutmanager libreact_codegen_rncore rrc_text librrc_image librrc_textinput libreact_debug libreact_render_mapbuffer libmapbufferjni libreact_render_telemetry
|
||||
|
||||
LOCAL_STATIC_LIBRARIES :=
|
||||
|
||||
|
@ -43,7 +43,6 @@ $(call import-module,react/renderer/core)
|
|||
$(call import-module,react/renderer/components/image)
|
||||
$(call import-module,react/renderer/components/modal)
|
||||
$(call import-module,react/renderer/components/root)
|
||||
$(call import-module,react/renderer/components/picker)
|
||||
$(call import-module,react/renderer/components/progressbar)
|
||||
$(call import-module,react/renderer/components/scrollview)
|
||||
$(call import-module,react/renderer/components/slider)
|
||||
|
|
|
@ -47,7 +47,6 @@ rn_xplat_cxx_library(
|
|||
"//xplat/js/react-native-github:generated_components-rncore",
|
||||
react_native_xplat_target("react/renderer/components/image:image"),
|
||||
react_native_xplat_target("react/renderer/components/modal:modal"),
|
||||
react_native_xplat_target("react/renderer/components/picker:androidpicker"),
|
||||
react_native_xplat_target("react/renderer/components/slider:slider"),
|
||||
react_native_xplat_target("react/renderer/components/switch:androidswitch"),
|
||||
react_native_xplat_target("react/renderer/components/progressbar:androidprogressbar"),
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
#include <fbjni/fbjni.h>
|
||||
|
||||
#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>
|
||||
#include <react/renderer/components/androidpicker/AndroidDialogPickerComponentDescriptor.h>
|
||||
#include <react/renderer/components/androidpicker/AndroidDropdownPickerComponentDescriptor.h>
|
||||
#include <react/renderer/components/androidswitch/AndroidSwitchComponentDescriptor.h>
|
||||
#include <react/renderer/components/androidtextinput/AndroidTextInputComponentDescriptor.h>
|
||||
#include <react/renderer/components/image/ImageComponentDescriptor.h>
|
||||
|
@ -71,10 +69,6 @@ CoreComponentsRegistry::sharedProviderRegistry() {
|
|||
concreteComponentDescriptorProvider<ParagraphComponentDescriptor>());
|
||||
providerRegistry->add(concreteComponentDescriptorProvider<
|
||||
AndroidDrawerLayoutComponentDescriptor>());
|
||||
providerRegistry->add(concreteComponentDescriptorProvider<
|
||||
AndroidDialogPickerComponentDescriptor>());
|
||||
providerRegistry->add(concreteComponentDescriptorProvider<
|
||||
AndroidDropdownPickerComponentDescriptor>());
|
||||
|
||||
return providerRegistry;
|
||||
}();
|
||||
|
|
|
@ -55,7 +55,6 @@ rn_android_library(
|
|||
react_native_target("java/com/facebook/react/views/drawer:drawer"),
|
||||
react_native_target("java/com/facebook/react/views/image:image"),
|
||||
react_native_target("java/com/facebook/react/views/modal:modal"),
|
||||
react_native_target("java/com/facebook/react/views/picker:picker"),
|
||||
react_native_target("java/com/facebook/react/views/progressbar:progressbar"),
|
||||
react_native_target("java/com/facebook/react/views/scroll:scroll"),
|
||||
react_native_target("java/com/facebook/react/views/slider:slider"),
|
||||
|
|
|
@ -43,8 +43,6 @@ import com.facebook.react.uimanager.ViewManager;
|
|||
import com.facebook.react.views.drawer.ReactDrawerLayoutManager;
|
||||
import com.facebook.react.views.image.ReactImageManager;
|
||||
import com.facebook.react.views.modal.ReactModalHostManager;
|
||||
import com.facebook.react.views.picker.ReactDialogPickerManager;
|
||||
import com.facebook.react.views.picker.ReactDropdownPickerManager;
|
||||
import com.facebook.react.views.progressbar.ReactProgressBarViewManager;
|
||||
import com.facebook.react.views.scroll.ReactHorizontalScrollContainerViewManager;
|
||||
import com.facebook.react.views.scroll.ReactHorizontalScrollViewManager;
|
||||
|
@ -160,9 +158,7 @@ public class MainReactPackage extends TurboReactPackage {
|
|||
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
||||
List<ViewManager> viewManagers = new ArrayList<>();
|
||||
|
||||
viewManagers.add(new ReactDialogPickerManager());
|
||||
viewManagers.add(new ReactDrawerLayoutManager());
|
||||
viewManagers.add(new ReactDropdownPickerManager());
|
||||
viewManagers.add(new ReactHorizontalScrollViewManager());
|
||||
viewManagers.add(new ReactHorizontalScrollContainerViewManager());
|
||||
viewManagers.add(new ReactProgressBarViewManager());
|
||||
|
|
|
@ -1,48 +0,0 @@
|
|||
/**
|
||||
* 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.
|
||||
*
|
||||
* @generated by codegen project: GeneratePropsJavaDelegate.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
||||
import com.facebook.react.uimanager.BaseViewManagerInterface;
|
||||
import com.facebook.react.uimanager.LayoutShadowNode;
|
||||
|
||||
public class AndroidDialogPickerManagerDelegate<T extends View, U extends BaseViewManagerInterface<T> & AndroidDialogPickerManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
||||
public AndroidDialogPickerManagerDelegate(U viewManager) {
|
||||
super(viewManager);
|
||||
}
|
||||
@Override
|
||||
public void setProperty(T view, String propName, @Nullable Object value) {
|
||||
switch (propName) {
|
||||
case "color":
|
||||
mViewManager.setColor(view, value == null ? null : ((Double) value).intValue());
|
||||
break;
|
||||
case "backgroundColor":
|
||||
mViewManager.setBackgroundColor(view, value == null ? null : ((Double) value).intValue());
|
||||
break;
|
||||
case "enabled":
|
||||
mViewManager.setEnabled(view, value == null ? true : (boolean) value);
|
||||
break;
|
||||
case "items":
|
||||
mViewManager.setItems(view, (ReadableArray) value);
|
||||
break;
|
||||
case "prompt":
|
||||
mViewManager.setPrompt(view, value == null ? "" : (String) value);
|
||||
break;
|
||||
case "selected":
|
||||
mViewManager.setSelected(view, value == null ? 0 : ((Double) value).intValue());
|
||||
break;
|
||||
default:
|
||||
super.setProperty(view, propName, value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
/**
|
||||
* 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.
|
||||
*
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
|
||||
public interface AndroidDialogPickerManagerInterface<T extends View> {
|
||||
void setColor(T view, @Nullable Integer value);
|
||||
void setBackgroundColor(T view, @Nullable Integer value);
|
||||
void setEnabled(T view, boolean value);
|
||||
void setItems(T view, @Nullable ReadableArray value);
|
||||
void setPrompt(T view, @Nullable String value);
|
||||
void setSelected(T view, int value);
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
|
||||
* directory of this source tree.
|
||||
*
|
||||
* @generated by codegen project: GeneratePropsJavaDelegate.js
|
||||
*/
|
||||
package com.facebook.react.viewmanagers;
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
||||
import com.facebook.react.uimanager.BaseViewManagerInterface;
|
||||
import com.facebook.react.uimanager.LayoutShadowNode;
|
||||
|
||||
public class AndroidDropdownPickerManagerDelegate<
|
||||
T extends View,
|
||||
U extends BaseViewManagerInterface<T> & AndroidDropdownPickerManagerInterface<T>>
|
||||
extends BaseViewManagerDelegate<T, U> {
|
||||
public AndroidDropdownPickerManagerDelegate(U viewManager) {
|
||||
super(viewManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProperty(T view, String propName, @Nullable Object value) {
|
||||
switch (propName) {
|
||||
case "color":
|
||||
mViewManager.setColor(view, value == null ? null : ((Double) value).intValue());
|
||||
break;
|
||||
case "enabled":
|
||||
mViewManager.setEnabled(view, value == null ? true : (boolean) value);
|
||||
break;
|
||||
case "items":
|
||||
mViewManager.setItems(view, (ReadableArray) value);
|
||||
break;
|
||||
case "prompt":
|
||||
mViewManager.setPrompt(view, value == null ? "" : (String) value);
|
||||
break;
|
||||
case "selected":
|
||||
mViewManager.setSelected(view, value == null ? 0 : ((Double) value).intValue());
|
||||
break;
|
||||
default:
|
||||
super.setProperty(view, propName, value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
/**
|
||||
* 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.
|
||||
*
|
||||
* @generated by codegen project: GeneratePropsJavaInterface.js
|
||||
*/
|
||||
|
||||
package com.facebook.react.viewmanagers;
|
||||
|
||||
import android.view.View;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
|
||||
public interface AndroidDropdownPickerManagerInterface<T extends View> {
|
||||
void setColor(T view, @Nullable Integer value);
|
||||
void setEnabled(T view, boolean value);
|
||||
void setItems(T view, @Nullable ReadableArray value);
|
||||
void setPrompt(T view, @Nullable String value);
|
||||
void setSelected(T view, int value);
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library")
|
||||
|
||||
rn_android_library(
|
||||
name = "picker",
|
||||
srcs = glob(["**/*.java"]),
|
||||
autoglob = False,
|
||||
is_androidx = True,
|
||||
labels = ["supermodule:xplat/default/public.react_native.infra"],
|
||||
provided_deps = [
|
||||
react_native_dep("third-party/android/androidx:annotation"),
|
||||
react_native_dep("third-party/android/androidx:appcompat"),
|
||||
react_native_dep("third-party/android/androidx:core"),
|
||||
react_native_dep("third-party/android/androidx:fragment"),
|
||||
react_native_dep("third-party/android/androidx:legacy-support-core-ui"),
|
||||
react_native_dep("third-party/android/androidx:legacy-support-core-utils"),
|
||||
],
|
||||
visibility = [
|
||||
"PUBLIC",
|
||||
],
|
||||
deps = [
|
||||
react_native_dep("third-party/java/infer-annotations:infer-annotations"),
|
||||
react_native_dep("third-party/java/jsr-305:jsr-305"),
|
||||
react_native_target("java/com/facebook/react/bridge:bridge"),
|
||||
react_native_target("java/com/facebook/react/common:common"),
|
||||
react_native_target("java/com/facebook/react/module/annotations:annotations"),
|
||||
react_native_target("java/com/facebook/react/uimanager:uimanager"),
|
||||
react_native_target("java/com/facebook/react/uimanager/annotations:annotations"),
|
||||
react_native_target("java/com/facebook/react/viewmanagers:viewmanagers"),
|
||||
],
|
||||
)
|
|
@ -1,51 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.picker;
|
||||
|
||||
import android.widget.Spinner;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
import com.facebook.react.uimanager.ThemedReactContext;
|
||||
import com.facebook.react.uimanager.ViewManagerDelegate;
|
||||
import com.facebook.react.viewmanagers.AndroidDialogPickerManagerDelegate;
|
||||
import com.facebook.react.viewmanagers.AndroidDialogPickerManagerInterface;
|
||||
|
||||
/** {@link ReactPickerManager} for {@link ReactPicker} with {@link Spinner#MODE_DIALOG}. */
|
||||
@ReactModule(name = ReactDialogPickerManager.REACT_CLASS)
|
||||
public class ReactDialogPickerManager extends ReactPickerManager
|
||||
implements AndroidDialogPickerManagerInterface<ReactPicker> {
|
||||
|
||||
public static final String REACT_CLASS = "AndroidDialogPicker";
|
||||
|
||||
private final ViewManagerDelegate<ReactPicker> mDelegate;
|
||||
|
||||
public ReactDialogPickerManager() {
|
||||
mDelegate = new AndroidDialogPickerManagerDelegate<>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return REACT_CLASS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReactPicker createViewInstance(ThemedReactContext reactContext) {
|
||||
return new ReactPicker(reactContext, Spinner.MODE_DIALOG);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ViewManagerDelegate<ReactPicker> getDelegate() {
|
||||
return mDelegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackgroundColor(@NonNull ReactPicker view, @Nullable Integer backgroundColor) {
|
||||
view.setStagedBackgroundColor(backgroundColor);
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.picker;
|
||||
|
||||
import android.widget.Spinner;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
import com.facebook.react.uimanager.ThemedReactContext;
|
||||
import com.facebook.react.uimanager.ViewManagerDelegate;
|
||||
import com.facebook.react.viewmanagers.AndroidDropdownPickerManagerDelegate;
|
||||
import com.facebook.react.viewmanagers.AndroidDropdownPickerManagerInterface;
|
||||
|
||||
/** {@link ReactPickerManager} for {@link ReactPicker} with {@link Spinner#MODE_DROPDOWN}. */
|
||||
@ReactModule(name = ReactDropdownPickerManager.REACT_CLASS)
|
||||
public class ReactDropdownPickerManager extends ReactPickerManager
|
||||
implements AndroidDropdownPickerManagerInterface<ReactPicker> {
|
||||
|
||||
public static final String REACT_CLASS = "AndroidDropdownPicker";
|
||||
|
||||
private final ViewManagerDelegate<ReactPicker> mDelegate;
|
||||
|
||||
public ReactDropdownPickerManager() {
|
||||
mDelegate = new AndroidDropdownPickerManagerDelegate<>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return REACT_CLASS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReactPicker createViewInstance(ThemedReactContext reactContext) {
|
||||
return new ReactPicker(reactContext, Spinner.MODE_DROPDOWN);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ViewManagerDelegate<ReactPicker> getDelegate() {
|
||||
return mDelegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackgroundColor(@NonNull ReactPicker view, int backgroundColor) {
|
||||
view.setStagedBackgroundColor(backgroundColor);
|
||||
}
|
||||
}
|
|
@ -1,196 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.picker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.Spinner;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatSpinner;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import com.facebook.react.common.annotations.VisibleForTesting;
|
||||
import java.util.List;
|
||||
|
||||
public class ReactPicker extends AppCompatSpinner {
|
||||
|
||||
private int mMode = Spinner.MODE_DIALOG;
|
||||
private @Nullable OnSelectListener mOnSelectListener;
|
||||
private @Nullable List<ReactPickerItem> mItems;
|
||||
private @Nullable List<ReactPickerItem> mStagedItems;
|
||||
private @Nullable Integer mStagedSelection;
|
||||
private @Nullable Integer mStagedPrimaryTextColor;
|
||||
private @Nullable Integer mStagedBackgroundColor;
|
||||
|
||||
private final OnItemSelectedListener mItemSelectedListener =
|
||||
new OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
if (mOnSelectListener != null) {
|
||||
mOnSelectListener.onItemSelected(position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
if (mOnSelectListener != null) {
|
||||
mOnSelectListener.onItemSelected(-1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** Listener interface for ReactPicker events. */
|
||||
public interface OnSelectListener {
|
||||
void onItemSelected(int position);
|
||||
}
|
||||
|
||||
public ReactPicker(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public ReactPicker(Context context, int mode) {
|
||||
super(context, mode);
|
||||
mMode = mode;
|
||||
}
|
||||
|
||||
public ReactPicker(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public ReactPicker(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
}
|
||||
|
||||
public ReactPicker(Context context, AttributeSet attrs, int defStyle, int mode) {
|
||||
super(context, attrs, defStyle, mode);
|
||||
mMode = mode;
|
||||
}
|
||||
|
||||
private final Runnable measureAndLayout =
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
measure(
|
||||
MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),
|
||||
MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));
|
||||
layout(getLeft(), getTop(), getRight(), getBottom());
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void requestLayout() {
|
||||
super.requestLayout();
|
||||
|
||||
// The spinner relies on a measure + layout pass happening after it calls requestLayout().
|
||||
// Without this, the widget never actually changes the selection and doesn't call the
|
||||
// appropriate listeners. Since we override onLayout in our ViewGroups, a layout pass never
|
||||
// happens after a call to requestLayout, so we simulate one here.
|
||||
post(measureAndLayout);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||
super.onLayout(changed, left, top, right, bottom);
|
||||
|
||||
// onItemSelected gets fired immediately after layout because checkSelectionChanged() in
|
||||
// AdapterView updates the selection position from the default INVALID_POSITION.
|
||||
// To match iOS behavior, which no onItemSelected during initial layout.
|
||||
// We setup the listener after layout.
|
||||
if (getOnItemSelectedListener() == null) setOnItemSelectedListener(mItemSelectedListener);
|
||||
}
|
||||
|
||||
public void setOnSelectListener(@Nullable OnSelectListener onSelectListener) {
|
||||
mOnSelectListener = onSelectListener;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public OnSelectListener getOnSelectListener() {
|
||||
return mOnSelectListener;
|
||||
}
|
||||
|
||||
/* package */ void setStagedItems(final @Nullable List<ReactPickerItem> items) {
|
||||
mStagedItems = items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Will cache "selection" value locally and set it only once {@link #commitStagedData} is called
|
||||
*/
|
||||
/* package */ void setStagedSelection(int selection) {
|
||||
mStagedSelection = selection;
|
||||
}
|
||||
|
||||
/** Will set the "selection" value immediately as opposed to {@link #setStagedSelection(int)} */
|
||||
/* package */ void setImmediateSelection(int selection) {
|
||||
if (selection != getSelectedItemPosition()) {
|
||||
setOnItemSelectedListener(null);
|
||||
setSelection(selection, false);
|
||||
setOnItemSelectedListener(mItemSelectedListener);
|
||||
}
|
||||
}
|
||||
|
||||
/* package */ void setStagedPrimaryTextColor(@Nullable Integer primaryColor) {
|
||||
mStagedPrimaryTextColor = primaryColor;
|
||||
}
|
||||
|
||||
/* package */ void setStagedBackgroundColor(@Nullable Integer backgroundColor) {
|
||||
mStagedBackgroundColor = backgroundColor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to commit staged data into ReactPicker view. During this period, we will disable {@link
|
||||
* OnSelectListener#onItemSelected(int)} temporarily, so we don't get an event when changing the
|
||||
* items/selection ourselves.
|
||||
*/
|
||||
/* package */ void commitStagedData() {
|
||||
setOnItemSelectedListener(null);
|
||||
|
||||
ReactPickerAdapter adapter = (ReactPickerAdapter) getAdapter();
|
||||
final int origSelection = getSelectedItemPosition();
|
||||
if (mStagedItems != null && mStagedItems != mItems) {
|
||||
mItems = mStagedItems;
|
||||
mStagedItems = null;
|
||||
if (adapter == null) {
|
||||
adapter = new ReactPickerAdapter(getContext(), mItems);
|
||||
setAdapter(adapter);
|
||||
} else {
|
||||
adapter.clear();
|
||||
adapter.addAll(mItems);
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
if (mStagedSelection != null && mStagedSelection != origSelection) {
|
||||
setSelection(mStagedSelection, false);
|
||||
mStagedSelection = null;
|
||||
}
|
||||
|
||||
if (mStagedPrimaryTextColor != null
|
||||
&& adapter != null
|
||||
&& mStagedPrimaryTextColor != adapter.getPrimaryTextColor()) {
|
||||
adapter.setPrimaryTextColor(mStagedPrimaryTextColor);
|
||||
ViewCompat.setBackgroundTintList(this, ColorStateList.valueOf(mStagedPrimaryTextColor));
|
||||
mStagedPrimaryTextColor = null;
|
||||
}
|
||||
|
||||
if (mStagedBackgroundColor != null
|
||||
&& adapter != null
|
||||
&& mStagedBackgroundColor != adapter.getBackgroundColor()) {
|
||||
adapter.setBackgroundColor(mStagedBackgroundColor);
|
||||
mStagedBackgroundColor = null;
|
||||
}
|
||||
|
||||
setOnItemSelectedListener(mItemSelectedListener);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public int getMode() {
|
||||
return mMode;
|
||||
}
|
||||
}
|
|
@ -1,95 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.picker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import java.util.List;
|
||||
|
||||
/* package */
|
||||
class ReactPickerAdapter extends ArrayAdapter<ReactPickerItem> {
|
||||
|
||||
private final LayoutInflater mInflater;
|
||||
private @Nullable Integer mPrimaryTextColor;
|
||||
private @Nullable Integer mBackgroundColor;
|
||||
|
||||
public ReactPickerAdapter(Context context, List<ReactPickerItem> data) {
|
||||
super(context, 0, data);
|
||||
|
||||
mInflater =
|
||||
(LayoutInflater)
|
||||
Assertions.assertNotNull(context.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
return getView(position, convertView, parent, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||
return getView(position, convertView, parent, true);
|
||||
}
|
||||
|
||||
private View getView(int position, View convertView, ViewGroup parent, boolean isDropdown) {
|
||||
ReactPickerItem item = getItem(position);
|
||||
boolean isNew = false;
|
||||
if (convertView == null) {
|
||||
int layoutResId =
|
||||
isDropdown
|
||||
? android.R.layout.simple_spinner_dropdown_item
|
||||
: android.R.layout.simple_spinner_item;
|
||||
convertView = mInflater.inflate(layoutResId, parent, false);
|
||||
// Save original text colors
|
||||
convertView.setTag(((TextView) convertView).getTextColors());
|
||||
isNew = true;
|
||||
}
|
||||
|
||||
TextView textView = (TextView) convertView;
|
||||
textView.setText(item.label);
|
||||
if (!isDropdown && mPrimaryTextColor != null) {
|
||||
textView.setTextColor(mPrimaryTextColor);
|
||||
} else if (item.color != null) {
|
||||
textView.setTextColor(item.color);
|
||||
} else if (textView.getTag() != null && !isNew) {
|
||||
// In case the new item does not set the color prop, go back to the default one
|
||||
textView.setTextColor((ColorStateList) textView.getTag());
|
||||
}
|
||||
|
||||
if (mBackgroundColor != null) {
|
||||
textView.setBackgroundColor(mBackgroundColor);
|
||||
}
|
||||
|
||||
return textView;
|
||||
}
|
||||
|
||||
public @Nullable Integer getPrimaryTextColor() {
|
||||
return mPrimaryTextColor;
|
||||
}
|
||||
|
||||
public @Nullable Integer getBackgroundColor() {
|
||||
return mBackgroundColor;
|
||||
}
|
||||
|
||||
public void setPrimaryTextColor(@Nullable Integer primaryTextColor) {
|
||||
mPrimaryTextColor = primaryTextColor;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void setBackgroundColor(@Nullable Integer backgroundColor) {
|
||||
mBackgroundColor = backgroundColor;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.picker;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/* package */
|
||||
class ReactPickerItem {
|
||||
public final String label;
|
||||
@Nullable public final Integer color;
|
||||
|
||||
public ReactPickerItem(final ReadableMap jsMapData) {
|
||||
label = jsMapData.getString("label");
|
||||
|
||||
if (jsMapData.hasKey("color") && !jsMapData.isNull("color")) {
|
||||
color = jsMapData.getInt("color");
|
||||
} else {
|
||||
color = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static List<ReactPickerItem> createFromJsArrayMap(final ReadableArray jsArrayMap) {
|
||||
if (jsArrayMap == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final List<ReactPickerItem> items = new ArrayList<>(jsArrayMap.size());
|
||||
for (int i = 0; i < jsArrayMap.size(); ++i) {
|
||||
items.add(new ReactPickerItem(jsArrayMap.getMap(i)));
|
||||
}
|
||||
return items;
|
||||
}
|
||||
}
|
|
@ -1,99 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.picker;
|
||||
|
||||
import android.widget.Spinner;
|
||||
import androidx.annotation.NonNull;
|
||||
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.UIManagerHelper;
|
||||
import com.facebook.react.uimanager.ViewProps;
|
||||
import com.facebook.react.uimanager.annotations.ReactProp;
|
||||
import com.facebook.react.uimanager.events.EventDispatcher;
|
||||
import com.facebook.react.views.picker.events.PickerItemSelectEvent;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* {@link ViewManager} for the {@link ReactPicker} view. This is abstract because the {@link
|
||||
* Spinner} doesn't support setting the mode (dropdown/dialog) outside the constructor, so that is
|
||||
* delegated to the separate {@link ReactDropdownPickerManager} and {@link ReactDialogPickerManager}
|
||||
* components. These are merged back on the JS side into one React component.
|
||||
*/
|
||||
public abstract class ReactPickerManager extends SimpleViewManager<ReactPicker> {
|
||||
|
||||
@ReactProp(name = "items")
|
||||
public void setItems(ReactPicker view, @Nullable ReadableArray items) {
|
||||
final List<ReactPickerItem> pickerItems = ReactPickerItem.createFromJsArrayMap(items);
|
||||
view.setStagedItems(pickerItems);
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.COLOR, customType = "Color")
|
||||
public void setColor(ReactPicker view, @Nullable Integer color) {
|
||||
view.setStagedPrimaryTextColor(color);
|
||||
}
|
||||
|
||||
@ReactProp(name = "prompt")
|
||||
public void setPrompt(ReactPicker view, @Nullable String prompt) {
|
||||
view.setPrompt(prompt);
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.ENABLED, defaultBoolean = true)
|
||||
public void setEnabled(ReactPicker view, boolean enabled) {
|
||||
view.setEnabled(enabled);
|
||||
}
|
||||
|
||||
@ReactProp(name = "selected")
|
||||
public void setSelected(ReactPicker view, int selected) {
|
||||
view.setStagedSelection(selected);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAfterUpdateTransaction(ReactPicker view) {
|
||||
super.onAfterUpdateTransaction(view);
|
||||
view.commitStagedData();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addEventEmitters(final ThemedReactContext reactContext, final ReactPicker picker) {
|
||||
picker.setOnSelectListener(
|
||||
new PickerEventEmitter(
|
||||
picker, UIManagerHelper.getEventDispatcherForReactTag(reactContext, picker.getId())));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveCommand(
|
||||
@NonNull ReactPicker view, String commandId, @Nullable ReadableArray args) {
|
||||
switch (commandId) {
|
||||
case "setNativeSelectedPosition":
|
||||
if (args != null) {
|
||||
view.setImmediateSelection(args.getInt(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class PickerEventEmitter implements ReactPicker.OnSelectListener {
|
||||
|
||||
private final ReactPicker mReactPicker;
|
||||
private final EventDispatcher mEventDispatcher;
|
||||
|
||||
public PickerEventEmitter(ReactPicker reactPicker, EventDispatcher eventDispatcher) {
|
||||
mReactPicker = reactPicker;
|
||||
mEventDispatcher = eventDispatcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemSelected(int position) {
|
||||
mEventDispatcher.dispatchEvent(
|
||||
new PickerItemSelectEvent(
|
||||
UIManagerHelper.getSurfaceId(mReactPicker), mReactPicker.getId(), position));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.picker.events;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.react.bridge.Arguments;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.uimanager.events.Event;
|
||||
|
||||
public class PickerItemSelectEvent extends Event<PickerItemSelectEvent> {
|
||||
public static final String EVENT_NAME = "topSelect";
|
||||
|
||||
private final int mPosition;
|
||||
|
||||
@Deprecated
|
||||
public PickerItemSelectEvent(int reactTag, int position) {
|
||||
this(-1, reactTag, position);
|
||||
}
|
||||
|
||||
public PickerItemSelectEvent(int surfaceId, int reactTag, int position) {
|
||||
super(surfaceId, reactTag);
|
||||
mPosition = position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEventName() {
|
||||
return EVENT_NAME;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected WritableMap getEventData() {
|
||||
WritableMap eventData = Arguments.createMap();
|
||||
eventData.putInt("position", mPosition);
|
||||
return eventData;
|
||||
}
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
# 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.
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := rrc_picker
|
||||
|
||||
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/androidpicker/react/renderer/components/androidpicker/*.cpp)
|
||||
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/androidpicker/react/renderer/components/androidpicker/
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/androidpicker/
|
||||
|
||||
LOCAL_CFLAGS := \
|
||||
-DLOG_TAG=\"Fabric\"
|
||||
|
||||
LOCAL_CFLAGS += -fexceptions -frtti -std=c++17 -Wall
|
||||
|
||||
LOCAL_STATIC_LIBRARIES :=
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := libyoga glog libfolly_json libglog_init libreact_render_core libreact_render_debug libreact_render_graphics libreact_render_uimanager librrc_view libreact_render_componentregistry libreact_codegen_rncore libreact_debug
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
$(call import-module,glog)
|
||||
$(call import-module,folly)
|
||||
$(call import-module,fbgloginit)
|
||||
$(call import-module,react/renderer/core)
|
||||
$(call import-module,react/renderer/componentregistry)
|
||||
$(call import-module,react/renderer/debug)
|
||||
$(call import-module,react/renderer/graphics)
|
||||
$(call import-module,react/renderer/uimanager)
|
||||
$(call import-module,react/renderer/components/view)
|
||||
$(call import-module,yogajni)
|
|
@ -1,98 +0,0 @@
|
|||
load(
|
||||
"//tools/build_defs/oss:rn_defs.bzl",
|
||||
"ANDROID",
|
||||
"APPLE",
|
||||
"CXX",
|
||||
"YOGA_CXX_TARGET",
|
||||
"fb_xplat_cxx_test",
|
||||
"get_apple_compiler_flags",
|
||||
"get_apple_inspector_flags",
|
||||
"get_preprocessor_flags_for_build_mode",
|
||||
"react_native_target",
|
||||
"react_native_xplat_target",
|
||||
"rn_xplat_cxx_library",
|
||||
"subdir_glob",
|
||||
)
|
||||
|
||||
APPLE_COMPILER_FLAGS = get_apple_compiler_flags()
|
||||
|
||||
rn_xplat_cxx_library(
|
||||
name = "androidpicker",
|
||||
srcs = glob(
|
||||
["androidpicker/**/*.cpp"],
|
||||
exclude = glob(["tests/**/*.cpp"]),
|
||||
),
|
||||
headers = glob(
|
||||
["androidpicker/**/*.h"],
|
||||
exclude = glob(["tests/**/*.h"]),
|
||||
),
|
||||
header_namespace = "",
|
||||
exported_headers = subdir_glob(
|
||||
[
|
||||
("", "*.h"),
|
||||
("androidpicker/react/renderer/components/androidpicker", "*.h"),
|
||||
],
|
||||
prefix = "react/renderer/components/androidpicker",
|
||||
),
|
||||
compiler_flags = [
|
||||
"-fexceptions",
|
||||
"-frtti",
|
||||
"-std=c++17",
|
||||
"-Wall",
|
||||
],
|
||||
cxx_tests = [":tests"],
|
||||
fbandroid_deps = [
|
||||
react_native_target("jni/react/jni:jni"),
|
||||
],
|
||||
fbobjc_compiler_flags = APPLE_COMPILER_FLAGS,
|
||||
fbobjc_preprocessor_flags = get_preprocessor_flags_for_build_mode() + get_apple_inspector_flags(),
|
||||
force_static = True,
|
||||
labels = ["supermodule:xplat/default/public.react_native.infra"],
|
||||
platforms = (ANDROID, APPLE, CXX),
|
||||
preprocessor_flags = [
|
||||
"-DLOG_TAG=\"ReactNative\"",
|
||||
"-DWITH_FBSYSTRACE=1",
|
||||
],
|
||||
visibility = ["PUBLIC"],
|
||||
deps = [
|
||||
"//third-party/glog:glog",
|
||||
"//xplat/fbsystrace:fbsystrace",
|
||||
"//xplat/folly:headers_only",
|
||||
"//xplat/folly:memory",
|
||||
"//xplat/folly:molly",
|
||||
YOGA_CXX_TARGET,
|
||||
react_native_xplat_target("react/renderer/debug:debug"),
|
||||
react_native_xplat_target("react/renderer/core:core"),
|
||||
react_native_xplat_target("react/renderer/graphics:graphics"),
|
||||
react_native_xplat_target("react/renderer/components/view:view"),
|
||||
react_native_xplat_target("react/renderer/uimanager:uimanager"),
|
||||
react_native_xplat_target("react/renderer/componentregistry:componentregistry"),
|
||||
"//xplat/js/react-native-github:generated_components-rncore",
|
||||
],
|
||||
)
|
||||
|
||||
fb_xplat_cxx_test(
|
||||
name = "tests",
|
||||
srcs = glob(["tests/**/*.cpp"]),
|
||||
headers = glob(["tests/**/*.h"]),
|
||||
compiler_flags = [
|
||||
"-fexceptions",
|
||||
"-frtti",
|
||||
"-std=c++17",
|
||||
"-Wall",
|
||||
],
|
||||
contacts = ["oncall+react_native@xmail.facebook.com"],
|
||||
platforms = (
|
||||
# `Apple` and `Android` flavors are disabled because the module depends on `textlayoutmanager` which requires real an Emulator/Simulator to run.
|
||||
# At the same time, the code of tests does not rely on the simulator capabilities and it would be wasteful to add `fbandroid_use_instrumentation_test = True`.
|
||||
# (Beware of this option though.)
|
||||
# ANDROID,
|
||||
# APPLE,
|
||||
CXX
|
||||
),
|
||||
deps = [
|
||||
":androidpicker",
|
||||
"//xplat/folly:molly",
|
||||
"//xplat/third-party/gmock:gtest",
|
||||
],
|
||||
)
|
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "AndroidDialogPickerShadowNode.h"
|
||||
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
using AndroidDialogPickerComponentDescriptor =
|
||||
ConcreteComponentDescriptor<AndroidDialogPickerShadowNode>;
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,23 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "AndroidDialogPickerEventEmitter.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
void AndroidDialogPickerEventEmitter::onSelect(
|
||||
AndroidDialogPickerOnSelectStruct event) const {
|
||||
dispatchEvent("select", [event = std::move(event)](jsi::Runtime &runtime) {
|
||||
auto payload = jsi::Object(runtime);
|
||||
payload.setProperty(runtime, "position", event.position);
|
||||
return payload;
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,27 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <react/renderer/components/view/ViewEventEmitter.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
struct AndroidDialogPickerOnSelectStruct {
|
||||
int position;
|
||||
};
|
||||
|
||||
class AndroidDialogPickerEventEmitter : public ViewEventEmitter {
|
||||
public:
|
||||
using ViewEventEmitter::ViewEventEmitter;
|
||||
|
||||
void onSelect(AndroidDialogPickerOnSelectStruct value) const;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "AndroidDialogPickerProps.h"
|
||||
|
||||
#include <react/renderer/components/image/conversions.h>
|
||||
#include <react/renderer/core/propsConversions.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
AndroidDialogPickerProps::AndroidDialogPickerProps(
|
||||
const AndroidDialogPickerProps &sourceProps,
|
||||
const RawProps &rawProps)
|
||||
: ViewProps(sourceProps, rawProps),
|
||||
color(convertRawProp(rawProps, "color", sourceProps.color, {})),
|
||||
enabled(convertRawProp(rawProps, "enabled", sourceProps.enabled, {true})),
|
||||
items(convertRawProp(rawProps, "items", sourceProps.items, {})),
|
||||
prompt(convertRawProp(rawProps, "prompt", sourceProps.prompt, {""})),
|
||||
selected(
|
||||
convertRawProp(rawProps, "selected", sourceProps.selected, {0})) {}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,77 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <react/renderer/components/view/ViewProps.h>
|
||||
#include <react/renderer/core/propsConversions.h>
|
||||
#include <react/renderer/graphics/Color.h>
|
||||
#include <react/renderer/imagemanager/primitives.h>
|
||||
#include <cinttypes>
|
||||
#include <vector>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
struct AndroidDialogPickerItemsStruct {
|
||||
std::string label;
|
||||
int color;
|
||||
};
|
||||
|
||||
static inline void fromRawValue(
|
||||
const RawValue &value,
|
||||
AndroidDialogPickerItemsStruct &result) {
|
||||
auto map = (better::map<std::string, RawValue>)value;
|
||||
|
||||
auto label = map.find("label");
|
||||
if (label != map.end()) {
|
||||
fromRawValue(label->second, result.label);
|
||||
}
|
||||
auto color = map.find("color");
|
||||
// C++ props are not used on Android at the moment, so we can leave
|
||||
// result.color uninitialized if the JS prop has a null value. TODO: revisit
|
||||
// this once we start using C++ props on Android.
|
||||
if (color != map.end() && color->second.hasValue()) {
|
||||
fromRawValue(color->second, result.color);
|
||||
}
|
||||
}
|
||||
|
||||
static inline std::string toString(
|
||||
const AndroidDialogPickerItemsStruct &value) {
|
||||
return "[Object AndroidDialogPickerItemsStruct]";
|
||||
}
|
||||
|
||||
static inline void fromRawValue(
|
||||
const RawValue &value,
|
||||
std::vector<AndroidDialogPickerItemsStruct> &result) {
|
||||
auto items = (std::vector<RawValue>)value;
|
||||
for (const auto &item : items) {
|
||||
AndroidDialogPickerItemsStruct newItem;
|
||||
fromRawValue(item, newItem);
|
||||
result.emplace_back(newItem);
|
||||
}
|
||||
}
|
||||
|
||||
class AndroidDialogPickerProps final : public ViewProps {
|
||||
public:
|
||||
AndroidDialogPickerProps() = default;
|
||||
|
||||
AndroidDialogPickerProps(
|
||||
const AndroidDialogPickerProps &sourceProps,
|
||||
const RawProps &rawProps);
|
||||
|
||||
#pragma mark - Props
|
||||
|
||||
const SharedColor color{};
|
||||
const bool enabled{true};
|
||||
const std::vector<AndroidDialogPickerItemsStruct> items{};
|
||||
const std::string prompt{""};
|
||||
const int selected{0};
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,16 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "AndroidDialogPickerShadowNode.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
extern const char AndroidDialogPickerComponentName[] = "AndroidDialogPicker";
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "AndroidDialogPickerEventEmitter.h"
|
||||
#include "AndroidDialogPickerProps.h"
|
||||
|
||||
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
extern const char AndroidDialogPickerComponentName[];
|
||||
|
||||
/*
|
||||
* `ShadowNode` for <AndroidDialogPicker> component.
|
||||
*/
|
||||
using AndroidDialogPickerShadowNode = ConcreteViewShadowNode<
|
||||
AndroidDialogPickerComponentName,
|
||||
AndroidDialogPickerProps,
|
||||
AndroidDialogPickerEventEmitter>;
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "AndroidDropdownPickerShadowNode.h"
|
||||
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
using AndroidDropdownPickerComponentDescriptor =
|
||||
ConcreteComponentDescriptor<AndroidDropdownPickerShadowNode>;
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,23 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "AndroidDropdownPickerEventEmitter.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
void AndroidDropdownPickerEventEmitter::onSelect(
|
||||
AndroidDropdownPickerOnSelectStruct event) const {
|
||||
dispatchEvent("select", [event = std::move(event)](jsi::Runtime &runtime) {
|
||||
auto payload = jsi::Object(runtime);
|
||||
payload.setProperty(runtime, "position", event.position);
|
||||
return payload;
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,27 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <react/renderer/components/view/ViewEventEmitter.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
struct AndroidDropdownPickerOnSelectStruct {
|
||||
int position;
|
||||
};
|
||||
|
||||
class AndroidDropdownPickerEventEmitter : public ViewEventEmitter {
|
||||
public:
|
||||
using ViewEventEmitter::ViewEventEmitter;
|
||||
|
||||
void onSelect(AndroidDropdownPickerOnSelectStruct value) const;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "AndroidDropdownPickerProps.h"
|
||||
|
||||
#include <react/renderer/components/image/conversions.h>
|
||||
#include <react/renderer/core/propsConversions.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
AndroidDropdownPickerProps::AndroidDropdownPickerProps(
|
||||
const AndroidDropdownPickerProps &sourceProps,
|
||||
const RawProps &rawProps)
|
||||
: ViewProps(sourceProps, rawProps),
|
||||
color(convertRawProp(rawProps, "color", sourceProps.color, {})),
|
||||
enabled(convertRawProp(rawProps, "enabled", sourceProps.enabled, {true})),
|
||||
items(convertRawProp(rawProps, "items", sourceProps.items, {})),
|
||||
prompt(convertRawProp(rawProps, "prompt", sourceProps.prompt, {""})),
|
||||
selected(
|
||||
convertRawProp(rawProps, "selected", sourceProps.selected, {0})) {}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,77 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <react/renderer/components/view/ViewProps.h>
|
||||
#include <react/renderer/core/propsConversions.h>
|
||||
#include <react/renderer/graphics/Color.h>
|
||||
#include <react/renderer/imagemanager/primitives.h>
|
||||
#include <cinttypes>
|
||||
#include <vector>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
struct AndroidDropdownPickerItemsStruct {
|
||||
std::string label;
|
||||
int color;
|
||||
};
|
||||
|
||||
static inline void fromRawValue(
|
||||
const RawValue &value,
|
||||
AndroidDropdownPickerItemsStruct &result) {
|
||||
auto map = (better::map<std::string, RawValue>)value;
|
||||
|
||||
auto label = map.find("label");
|
||||
if (label != map.end()) {
|
||||
fromRawValue(label->second, result.label);
|
||||
}
|
||||
auto color = map.find("color");
|
||||
// C++ props are not used on Android at the moment, so we can leave
|
||||
// result.color uninitialized if the JS prop has a null value. TODO: revisit
|
||||
// this once we start using C++ props on Android.
|
||||
if (color != map.end() && color->second.hasValue()) {
|
||||
fromRawValue(color->second, result.color);
|
||||
}
|
||||
}
|
||||
|
||||
static inline std::string toString(
|
||||
const AndroidDropdownPickerItemsStruct &value) {
|
||||
return "[Object AndroidDropdownPickerItemsStruct]";
|
||||
}
|
||||
|
||||
static inline void fromRawValue(
|
||||
const RawValue &value,
|
||||
std::vector<AndroidDropdownPickerItemsStruct> &result) {
|
||||
auto items = (std::vector<RawValue>)value;
|
||||
for (const auto &item : items) {
|
||||
AndroidDropdownPickerItemsStruct newItem;
|
||||
fromRawValue(item, newItem);
|
||||
result.emplace_back(newItem);
|
||||
}
|
||||
}
|
||||
|
||||
class AndroidDropdownPickerProps final : public ViewProps {
|
||||
public:
|
||||
AndroidDropdownPickerProps() = default;
|
||||
|
||||
AndroidDropdownPickerProps(
|
||||
const AndroidDropdownPickerProps &sourceProps,
|
||||
const RawProps &rawProps);
|
||||
|
||||
#pragma mark - Props
|
||||
|
||||
const SharedColor color{};
|
||||
const bool enabled{true};
|
||||
const std::vector<AndroidDropdownPickerItemsStruct> items{};
|
||||
const std::string prompt{""};
|
||||
const int selected{0};
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,17 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "AndroidDropdownPickerShadowNode.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
extern const char AndroidDropdownPickerComponentName[] =
|
||||
"AndroidDropdownPicker";
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "AndroidDropdownPickerEventEmitter.h"
|
||||
#include "AndroidDropdownPickerProps.h"
|
||||
|
||||
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
extern const char AndroidDropdownPickerComponentName[];
|
||||
|
||||
/*
|
||||
* `ShadowNode` for <AndroidDropdownPicker> component.
|
||||
*/
|
||||
using AndroidDropdownPickerShadowNode = ConcreteViewShadowNode<
|
||||
AndroidDropdownPickerComponentName,
|
||||
AndroidDropdownPickerProps,
|
||||
AndroidDropdownPickerEventEmitter>;
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
Загрузка…
Ссылка в новой задаче