diff --git a/Libraries/Components/CheckBox/AndroidCheckBoxNativeComponent.js b/Libraries/Components/CheckBox/AndroidCheckBoxNativeComponent.js index fbb3e07be3d..c7680040646 100644 --- a/Libraries/Components/CheckBox/AndroidCheckBoxNativeComponent.js +++ b/Libraries/Components/CheckBox/AndroidCheckBoxNativeComponent.js @@ -10,6 +10,10 @@ 'use strict'; +import * as React from 'react'; + +import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; + const requireNativeComponent = require('../../ReactNative/requireNativeComponent'); import type {HostComponent} from '../../Renderer/shims/ReactNativeTypes'; @@ -46,8 +50,19 @@ type NativeProps = $ReadOnly<{| tintColors: {|true: ?number, false: ?number|} | typeof undefined, |}>; -const AndroidCheckBoxNativeComponent: HostComponent = requireNativeComponent( - 'AndroidCheckBox', -); +type NativeType = HostComponent; -module.exports = AndroidCheckBoxNativeComponent; +interface NativeCommands { + +setNativeValue: ( + viewRef: React.ElementRef, + value: boolean, + ) => void; +} + +export const Commands: NativeCommands = codegenNativeCommands({ + supportedCommands: ['setNativeValue'], +}); + +export default (requireNativeComponent( + 'AndroidCheckBox', +): NativeType); diff --git a/Libraries/Components/CheckBox/CheckBox.android.js b/Libraries/Components/CheckBox/CheckBox.android.js index 10d5d939507..b953fdc2a60 100644 --- a/Libraries/Components/CheckBox/CheckBox.android.js +++ b/Libraries/Components/CheckBox/CheckBox.android.js @@ -14,10 +14,11 @@ const React = require('react'); const StyleSheet = require('../../StyleSheet/StyleSheet'); const processColor = require('../../StyleSheet/processColor'); -const AndroidCheckBoxNativeComponent = require('./AndroidCheckBoxNativeComponent'); const nullthrows = require('nullthrows'); const setAndForwardRef = require('../../Utilities/setAndForwardRef'); +import AndroidCheckBoxNativeComponent from './AndroidCheckBoxNativeComponent'; + import type {ViewProps} from '../View/ViewPropTypes'; import type {SyntheticEvent} from '../../Types/CoreEventTypes'; import type {ColorValue} from '../../StyleSheet/StyleSheetTypes'; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/checkbox/ReactCheckBoxManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/checkbox/ReactCheckBoxManager.java index 847942e3cd1..6f0bd7eeaf2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/checkbox/ReactCheckBoxManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/checkbox/ReactCheckBoxManager.java @@ -11,10 +11,12 @@ import android.content.Context; import android.content.res.ColorStateList; import android.util.TypedValue; import android.widget.CompoundButton; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.TintContextWrapper; import androidx.core.widget.CompoundButtonCompat; import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; @@ -80,6 +82,18 @@ public class ReactCheckBoxManager extends SimpleViewManager { view.setOnCheckedChangeListener(ON_CHECKED_CHANGE_LISTENER); } + @Override + public void receiveCommand( + @NonNull ReactCheckBox root, String commandId, @Nullable ReadableArray args) { + switch (commandId) { + case "setNativeValue": + if (args != null) { + setOn(root, args.getBoolean(0)); + break; + } + } + } + private static int getThemeColor(final Context context, String colorId) { final TypedValue value = new TypedValue(); context.getTheme().resolveAttribute(getIdentifier(context, colorId), value, true);