From 2e7545cf7ec616b00047cbb2b5cb7126d9117e12 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 ReactProgressBarViewManager Summary: This diff migrates `ReactProgressBarViewManager` to use the generated `AndroidProgressBarManagerDelegate` for setting its properties. Reviewed By: JoshuaGross, mdvacca Differential Revision: D17315619 fbshipit-source-id: 6293c6fc18567a934b6f3dce9b77abcc408052d8 --- .../ProgressBarAndroidNativeComponent.js | 4 +-- .../AndroidProgressBarManagerDelegate.java | 2 +- .../AndroidProgressBarManagerInterface.java | 2 +- .../com/facebook/react/views/progressbar/BUCK | 1 + .../ReactProgressBarViewManager.java | 32 +++++++++++++++++-- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js b/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js index 033d2637c32..4ed47171547 100644 --- a/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +++ b/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js @@ -12,7 +12,7 @@ import type {ColorValue} from '../../StyleSheet/StyleSheetTypes'; import type {ViewProps} from '../View/ViewPropTypes'; -import type {Float, WithDefault} from '../../Types/CodegenTypes'; +import type {Double, WithDefault} from '../../Types/CodegenTypes'; import codegenNativeComponent from '../../Utilities/codegenNativeComponent'; import {type NativeComponentType} from '../../Utilities/codegenNativeComponent'; @@ -24,7 +24,7 @@ type NativeProps = $ReadOnly<{| styleAttr?: string, typeAttr?: string, indeterminate: boolean, - progress?: WithDefault, + progress?: WithDefault, animating?: WithDefault, color?: ?ColorValue, testID?: WithDefault, diff --git a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidProgressBarManagerDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidProgressBarManagerDelegate.java index f0097b2c11d..83a3336c030 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidProgressBarManagerDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidProgressBarManagerDelegate.java @@ -32,7 +32,7 @@ public class AndroidProgressBarManagerDelegate { void setStyleAttr(T view, @Nullable String value); void setTypeAttr(T view, @Nullable String value); void setIndeterminate(T view, boolean value); - void setProgress(T view, float value); + void setProgress(T view, double value); void setAnimating(T view, boolean value); void setColor(T view, @Nullable Integer value); void setTestID(T view, @Nullable String value); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/BUCK index 70bf5aea089..4e480cd5c81 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/BUCK @@ -17,5 +17,6 @@ rn_android_library( 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"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.java index 2da1e426409..a6d8939a038 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.java @@ -13,8 +13,11 @@ import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.BaseViewManager; import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.ViewManagerDelegate; import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; +import com.facebook.react.viewmanagers.AndroidProgressBarManagerDelegate; +import com.facebook.react.viewmanagers.AndroidProgressBarManagerInterface; /** * Manages instances of ProgressBar. ProgressBar is wrapped in a ProgressBarContainerView because @@ -24,7 +27,8 @@ import com.facebook.react.uimanager.annotations.ReactProp; */ @ReactModule(name = ReactProgressBarViewManager.REACT_CLASS) public class ReactProgressBarViewManager - extends BaseViewManager { + extends BaseViewManager + implements AndroidProgressBarManagerInterface { public static final String REACT_CLASS = "AndroidProgressBar"; @@ -37,6 +41,8 @@ public class ReactProgressBarViewManager private static Object sProgressBarCtorLock = new Object(); + private final ViewManagerDelegate mDelegate; + /** * We create ProgressBars on both the UI and shadow threads. There is a race condition in the * ProgressBar constructor that may cause crashes when two ProgressBars are constructed at the @@ -48,6 +54,10 @@ public class ReactProgressBarViewManager } } + public ReactProgressBarViewManager() { + mDelegate = new AndroidProgressBarManagerDelegate<>(this); + } + @Override public String getName() { return REACT_CLASS; @@ -58,31 +68,44 @@ public class ReactProgressBarViewManager return new ProgressBarContainerView(context); } + @Override @ReactProp(name = PROP_STYLE) - public void setStyle(ProgressBarContainerView view, @Nullable String styleName) { + public void setStyleAttr(ProgressBarContainerView view, @Nullable String styleName) { view.setStyle(styleName); } + @Override @ReactProp(name = ViewProps.COLOR, customType = "Color") public void setColor(ProgressBarContainerView view, @Nullable Integer color) { view.setColor(color); } + @Override @ReactProp(name = PROP_INDETERMINATE) public void setIndeterminate(ProgressBarContainerView view, boolean indeterminate) { view.setIndeterminate(indeterminate); } + @Override @ReactProp(name = PROP_PROGRESS) public void setProgress(ProgressBarContainerView view, double progress) { view.setProgress(progress); } + @Override @ReactProp(name = PROP_ANIMATING) public void setAnimating(ProgressBarContainerView view, boolean animating) { view.setAnimating(animating); } + @Override + public void setTestID(ProgressBarContainerView view, @Nullable String value) { + super.setTestId(view, value); + } + + @Override + public void setTypeAttr(ProgressBarContainerView view, @Nullable String value) {} + @Override public ProgressBarShadowNode createShadowNodeInstance() { return new ProgressBarShadowNode(); @@ -103,6 +126,11 @@ public class ReactProgressBarViewManager view.apply(); } + @Override + protected ViewManagerDelegate getDelegate() { + return mDelegate; + } + /* package */ static int getStyleFromString(@Nullable String styleStr) { if (styleStr == null) { throw new JSApplicationIllegalArgumentException(