From 5925b3d40828c0f33413bc52be729f8eede5e076 Mon Sep 17 00:00:00 2001 From: Oleksandr Melnykov Date: Mon, 23 Sep 2019 07:15:16 -0700 Subject: [PATCH] Use generated Java delegate for setting properties on ReactSliderManager Summary: This diff migrates `ReactSliderManager` to use the generated `SliderManagerDelegate` for setting its properties. Reviewed By: mdvacca Differential Revision: D17203078 fbshipit-source-id: 726736ef275074ecb799b334342ac64976153e2b --- .../Slider/SliderNativeComponent.js | 14 +++--- .../viewmanagers/SliderManagerDelegate.java | 10 ++-- .../viewmanagers/SliderManagerInterface.java | 8 ++-- .../java/com/facebook/react/views/slider/BUCK | 1 + .../views/slider/ReactSliderManager.java | 46 ++++++++++++++++++- 5 files changed, 62 insertions(+), 17 deletions(-) diff --git a/Libraries/Components/Slider/SliderNativeComponent.js b/Libraries/Components/Slider/SliderNativeComponent.js index 344aae387da..a30b4b6da6e 100644 --- a/Libraries/Components/Slider/SliderNativeComponent.js +++ b/Libraries/Components/Slider/SliderNativeComponent.js @@ -11,9 +11,9 @@ 'use strict'; import type { - Float, BubblingEventHandler, DirectEventHandler, + Double, WithDefault, } from '../../Types/CodegenTypes'; @@ -25,7 +25,7 @@ import type {ImageSource} from '../../Image/ImageSource'; import type {ViewProps} from '../View/ViewPropTypes'; type Event = $ReadOnly<{| - value: Float, + value: Double, fromUser?: boolean, |}>; @@ -34,19 +34,19 @@ type NativeProps = $ReadOnly<{| // Props disabled?: WithDefault, - enabled?: WithDefault, + enabled?: WithDefault, maximumTrackImage?: ?ImageSource, maximumTrackTintColor?: ?ColorValue, - maximumValue?: WithDefault, + maximumValue?: WithDefault, minimumTrackImage?: ?ImageSource, minimumTrackTintColor?: ?ColorValue, - minimumValue?: WithDefault, - step?: WithDefault, + minimumValue?: WithDefault, + step?: WithDefault, testID?: WithDefault, thumbImage?: ?ImageSource, thumbTintColor?: ?ColorValue, trackImage?: ?ImageSource, - value?: WithDefault, + value?: WithDefault, // Events onChange?: ?BubblingEventHandler, diff --git a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SliderManagerDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SliderManagerDelegate.java index 2dda0304e25..cfc33e90c7d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SliderManagerDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/SliderManagerDelegate.java @@ -27,7 +27,7 @@ public class SliderManagerDelegate { void setEnabled(T view, boolean value); void setMaximumTrackImage(T view, @Nullable ReadableMap value); void setMaximumTrackTintColor(T view, @Nullable Integer value); - void setMaximumValue(T view, float value); + void setMaximumValue(T view, double value); void setMinimumTrackImage(T view, @Nullable ReadableMap value); void setMinimumTrackTintColor(T view, @Nullable Integer value); - void setMinimumValue(T view, float value); - void setStep(T view, float value); + void setMinimumValue(T view, double value); + void setStep(T view, double value); void setTestID(T view, @Nullable String value); void setThumbImage(T view, @Nullable ReadableMap value); void setThumbTintColor(T view, @Nullable Integer value); void setTrackImage(T view, @Nullable ReadableMap value); - void setValue(T view, float value); + void setValue(T view, double value); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/slider/BUCK index f8e9f22cbbc..f41e9bcc83b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/BUCK @@ -20,5 +20,6 @@ rn_android_library( react_native_target("java/com/facebook/react/common:common"), 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"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java index 25176ef1dee..1b31adfdaad 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java @@ -13,6 +13,7 @@ import android.graphics.drawable.LayerDrawable; import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; +import androidx.annotation.Nullable; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.common.MapBuilder; @@ -20,8 +21,11 @@ import com.facebook.react.uimanager.LayoutShadowNode; import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIManagerModule; +import com.facebook.react.uimanager.ViewManagerDelegate; import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; +import com.facebook.react.viewmanagers.SliderManagerDelegate; +import com.facebook.react.viewmanagers.SliderManagerInterface; import com.facebook.yoga.YogaMeasureFunction; import com.facebook.yoga.YogaMeasureMode; import com.facebook.yoga.YogaMeasureOutput; @@ -33,7 +37,8 @@ import java.util.Map; * *

Note that the slider is _not_ a controlled component. */ -public class ReactSliderManager extends SimpleViewManager { +public class ReactSliderManager extends SimpleViewManager + implements SliderManagerInterface { private static final int STYLE = android.R.attr.seekBarStyle; @@ -104,6 +109,12 @@ public class ReactSliderManager extends SimpleViewManager { } }; + private final ViewManagerDelegate mDelegate; + + public ReactSliderManager() { + mDelegate = new SliderManagerDelegate<>(this); + } + @Override public String getName() { return REACT_CLASS; @@ -124,11 +135,13 @@ public class ReactSliderManager extends SimpleViewManager { return new ReactSlider(context, null, STYLE); } + @Override @ReactProp(name = ViewProps.ENABLED, defaultBoolean = true) public void setEnabled(ReactSlider view, boolean enabled) { view.setEnabled(enabled); } + @Override @ReactProp(name = "value", defaultDouble = 0d) public void setValue(ReactSlider view, double value) { view.setOnSeekBarChangeListener(null); @@ -136,21 +149,25 @@ public class ReactSliderManager extends SimpleViewManager { view.setOnSeekBarChangeListener(ON_CHANGE_LISTENER); } + @Override @ReactProp(name = "minimumValue", defaultDouble = 0d) public void setMinimumValue(ReactSlider view, double value) { view.setMinValue(value); } + @Override @ReactProp(name = "maximumValue", defaultDouble = 1d) public void setMaximumValue(ReactSlider view, double value) { view.setMaxValue(value); } + @Override @ReactProp(name = "step", defaultDouble = 0d) public void setStep(ReactSlider view, double value) { view.setStep(value); } + @Override @ReactProp(name = "thumbTintColor", customType = "Color") public void setThumbTintColor(ReactSlider view, Integer color) { if (color == null) { @@ -160,6 +177,7 @@ public class ReactSliderManager extends SimpleViewManager { } } + @Override @ReactProp(name = "minimumTrackTintColor", customType = "Color") public void setMinimumTrackTintColor(ReactSlider view, Integer color) { LayerDrawable drawable = (LayerDrawable) view.getProgressDrawable().getCurrent(); @@ -171,6 +189,7 @@ public class ReactSliderManager extends SimpleViewManager { } } + @Override @ReactProp(name = "maximumTrackTintColor", customType = "Color") public void setMaximumTrackTintColor(ReactSlider view, Integer color) { LayerDrawable drawable = (LayerDrawable) view.getProgressDrawable().getCurrent(); @@ -182,6 +201,26 @@ public class ReactSliderManager extends SimpleViewManager { } } + @Override + public void setDisabled(ReactSlider view, boolean value) {} + + @Override + public void setMaximumTrackImage(ReactSlider view, @Nullable ReadableMap value) {} + + @Override + public void setMinimumTrackImage(ReactSlider view, @Nullable ReadableMap value) {} + + @Override + public void setTestID(ReactSlider view, @Nullable String value) { + super.setTestId(view, value); + } + + @Override + public void setThumbImage(ReactSlider view, @Nullable ReadableMap value) {} + + @Override + public void setTrackImage(ReactSlider view, @Nullable ReadableMap value) {} + @Override protected void addEventEmitters(final ThemedReactContext reactContext, final ReactSlider view) { view.setOnSeekBarChangeListener(ON_CHANGE_LISTENER); @@ -212,4 +251,9 @@ public class ReactSliderManager extends SimpleViewManager { return YogaMeasureOutput.make(reactSlider.getMeasuredWidth(), reactSlider.getMeasuredHeight()); } + + @Override + protected ViewManagerDelegate getDelegate() { + return mDelegate; + } }