Skip to content

Commit afb04ed

Browse files
committed
fix: new arch measurements
1 parent 166ec7f commit afb04ed

22 files changed

+483
-42
lines changed

.github/workflows/ReactNativeSlider-CI.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ jobs:
125125
path: example/node_modules
126126
key: ${{ hashFiles('./example/package-lock.json') }}-${{ hashFiles('./package/package-lock.json') }}
127127

128+
- name: Install xcbeautify for better logs
129+
run: |
130+
brew install xcbeautify
131+
128132
- name: Install required dependencies on cache miss (npm)
129133
if: steps.cache-npm.outputs.cache-hit != 'true'
130134
run: |
@@ -157,7 +161,7 @@ jobs:
157161
device=$(xcrun simctl list devices "${device_name}" available | grep "${device_name} (")
158162
re='\(([-0-9A-Fa-f]+)\)'
159163
[[ $device =~ $re ]] || exit 1
160-
xcodebuild -workspace example.xcworkspace -scheme example -destination "platform=iOS Simulator,id=${BASH_REMATCH[1]}" CODE_SIGNING_ALLOWED=NO COMPILER_INDEX_STORE_ENABLE=NO build
164+
set -o pipefail && xcodebuild -workspace example.xcworkspace -scheme example -destination "platform=iOS Simulator,id=${BASH_REMATCH[1]}" CODE_SIGNING_ALLOWED=NO COMPILER_INDEX_STORE_ENABLE=NO build | xcbeautify --renderer github-actions
161165
working-directory: example/ios
162166

163167

@@ -196,6 +200,10 @@ jobs:
196200
run: |
197201
cd example/ios && RCT_NEW_ARCH_ENABLED=1 pod install
198202
203+
- name: Install xcbeautify for better logs
204+
run: |
205+
brew install xcbeautify
206+
199207
- name: Reinstall Pods only if using cached ones
200208
if: steps.cache-pods.outputs.cache-hit == 'true'
201209
run: cd example/ios && RCT_NEW_ARCH_ENABLED=1 pod install
@@ -209,7 +217,7 @@ jobs:
209217
device=$(xcrun simctl list devices "${device_name}" available | grep "${device_name} (")
210218
re='\(([-0-9A-Fa-f]+)\)'
211219
[[ $device =~ $re ]] || exit 1
212-
xcodebuild -workspace example.xcworkspace -scheme example -destination "platform=iOS Simulator,id=${BASH_REMATCH[1]}" CODE_SIGNING_ALLOWED=NO COMPILER_INDEX_STORE_ENABLE=NO build
220+
set -o pipefail && xcodebuild -workspace example.xcworkspace -scheme example -destination "platform=iOS Simulator,id=${BASH_REMATCH[1]}" CODE_SIGNING_ALLOWED=NO COMPILER_INDEX_STORE_ENABLE=NO build | xcbeautify --renderer github-actions
213221
working-directory: example/ios
214222

215223

example/ios/Podfile.lock

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -932,15 +932,40 @@ PODS:
932932
- React-jsinspector (0.72.6)
933933
- React-logger (0.72.6):
934934
- glog
935-
- react-native-pager-view (6.2.2):
936-
- RCT-Folly
935+
- react-native-pager-view (6.3.0):
936+
- hermes-engine
937+
- RCT-Folly (= 2021.07.22.00)
937938
- RCTRequired
938939
- RCTTypeSafety
939940
- React-Codegen
940941
- React-Core
942+
- React-debug
943+
- React-Fabric
944+
- React-graphics
945+
- React-NativeModulesApple
941946
- React-RCTFabric
947+
- React-utils
948+
- ReactCommon/turbomodule/bridging
942949
- ReactCommon/turbomodule/core
950+
- Yoga
943951
- react-native-slider (4.5.0):
952+
- hermes-engine
953+
- RCT-Folly (= 2021.07.22.00)
954+
- RCTRequired
955+
- RCTTypeSafety
956+
- React-Codegen
957+
- React-Core
958+
- React-debug
959+
- React-Fabric
960+
- React-graphics
961+
- react-native-slider/common (= 4.5.0)
962+
- React-NativeModulesApple
963+
- React-RCTFabric
964+
- React-utils
965+
- ReactCommon/turbomodule/bridging
966+
- ReactCommon/turbomodule/core
967+
- Yoga
968+
- react-native-slider/common (4.5.0):
944969
- hermes-engine
945970
- RCT-Folly (= 2021.07.22.00)
946971
- RCTRequired
@@ -1302,13 +1327,13 @@ SPEC CHECKSUMS:
13021327
React-jsiexecutor: 3bf18ff7cb03cd8dfdce08fbbc0d15058c1d71ae
13031328
React-jsinspector: 194e32c6aab382d88713ad3dd0025c5f5c4ee072
13041329
React-logger: cebf22b6cf43434e471dc561e5911b40ac01d289
1305-
react-native-pager-view: 0ad4b83218270c9bbaa8733090554da78075aa7d
1306-
react-native-slider: 6b93a4a8d903b8e20ca9875245872c3a19b3f892
1330+
react-native-pager-view: 7e59cad76754a76ab5a67e821efa52679c8485a6
1331+
react-native-slider: de2f2e1538a353d183bc8caceddd7e9456351ed6
13071332
React-NativeModulesApple: 02e35e9a51e10c6422f04f5e4076a7c02243fff2
13081333
React-perflogger: e3596db7e753f51766bceadc061936ef1472edc3
13091334
React-RCTActionSheet: 17ab132c748b4471012abbcdcf5befe860660485
13101335
React-RCTAnimation: c8bbaab62be5817d2a31c36d5f2571e3f7dcf099
1311-
React-RCTAppDelegate: 908a42129440b88e030d236cc75cd289d855e9b0
1336+
React-RCTAppDelegate: a2b51c18191ef6e3f15fd83f2ccbcc8381344fbb
13121337
React-RCTBlob: 1bcf3a0341eb8d6950009b1ddb8aefaf46996b8c
13131338
React-RCTFabric: 2d72175df6e0e230a13ec2a7eef184ac0a122fd3
13141339
React-RCTImage: 670a3486b532292649b1aef3ffddd0b495a5cee4
@@ -1328,4 +1353,4 @@ SPEC CHECKSUMS:
13281353

13291354
PODFILE CHECKSUM: fc294bda6eb4bdf564e8b01f128fbe9addb961d2
13301355

1331-
COCOAPODS: 1.14.2
1356+
COCOAPODS: 1.15.2

package/android/build.gradle

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ android {
5555
sourceSets {
5656
main {
5757
if (isNewArchitectureEnabled()) {
58-
java.srcDirs += ['src/newarch']
58+
java.srcDirs += ['src/newarch', "${project.buildDir}/generated/source/codegen/java"]
5959
} else {
6060
java.srcDirs += ['src/oldarch']
6161
}
@@ -73,10 +73,3 @@ dependencies {
7373
api 'com.facebook.react:react-native:+'
7474
}
7575

76-
if (isNewArchitectureEnabled()) {
77-
react {
78-
jsRootDir = file("../src")
79-
libraryName = "ReactSlider"
80-
codegenJavaPackageName = "com.reactnativecommunity.slider"
81-
}
82-
}

package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,16 @@ public static void setAccessibilityIncrements(ReactSlider view, ReadableArray ac
134134
view.setAccessibilityIncrements(stringList);
135135
}
136136

137-
public static Map getExportedCustomDirectEventTypeConstants() {
138-
return MapBuilder.of(ReactSlidingCompleteEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRNCSliderSlidingComplete"),
139-
ReactSlidingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRNCSliderSlidingStart"));
137+
public static Map<String, Object> getExportedCustomBubblingEventTypeConstants() {
138+
return MapBuilder.of(
139+
ReactSliderEvent.EVENT_NAME, MapBuilder.of("registrationName", ReactSliderEvent.EVENT_NAME)
140+
);
141+
}
142+
143+
public static Map<String, Object> getExportedCustomDirectEventTypeConstants() {
144+
return MapBuilder.of(
145+
ReactSlidingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", ReactSlidingStartEvent.EVENT_NAME),
146+
ReactSlidingCompleteEvent.EVENT_NAME, MapBuilder.of("registrationName", ReactSlidingCompleteEvent.EVENT_NAME)
147+
);
140148
}
141149
}

package/android/src/main/java/com/reactnativecommunity/slider/ReactSlidingCompleteEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818
public class ReactSlidingCompleteEvent extends Event<ReactSlidingCompleteEvent> {
1919

20-
public static final String EVENT_NAME = "topSlidingComplete";
20+
public static final String EVENT_NAME = "onRNCSliderSlidingComplete";
2121

2222
private final double mValue;
2323

package/android/src/main/java/com/reactnativecommunity/slider/ReactSlidingStartEvent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818

1919
public class ReactSlidingStartEvent extends Event<ReactSlidingStartEvent> {
20-
public static final String EVENT_NAME = "topSlidingStart";
20+
public static final String EVENT_NAME = "onRNCSliderSlidingStart";
2121

2222
private final double mValue;
2323

@@ -58,4 +58,4 @@ private WritableMap serializeEventData() {
5858
return eventData;
5959
}
6060

61-
}
61+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
cmake_minimum_required(VERSION 3.13)
2+
set(CMAKE_VERBOSE_MAKEFILE ON)
3+
4+
set(LIB_LITERAL RNCSlider)
5+
set(LIB_TARGET_NAME react_codegen_${LIB_LITERAL})
6+
7+
set(LIB_ANDROID_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
8+
set(LIB_COMMON_DIR ${LIB_ANDROID_DIR}/../common/cpp)
9+
set(LIB_ANDROID_GENERATED_JNI_DIR ${LIB_ANDROID_DIR}/build/generated/source/codegen/jni)
10+
set(LIB_ANDROID_GENERATED_COMPONENTS_DIR ${LIB_ANDROID_GENERATED_JNI_DIR}/react/renderer/components/${LIB_LITERAL})
11+
12+
add_compile_options(
13+
-fexceptions
14+
-frtti
15+
-std=c++20
16+
-Wall
17+
-Wpedantic
18+
-Wno-gnu-zero-variadic-macro-arguments
19+
)
20+
21+
file(GLOB LIB_CUSTOM_SRCS CONFIGURE_DEPENDS *.cpp ${LIB_COMMON_DIR}/react/renderer/components/${LIB_LITERAL}/*.cpp)
22+
file(GLOB LIB_CODEGEN_SRCS CONFIGURE_DEPENDS ${LIB_ANDROID_GENERATED_JNI_DIR}/*.cpp ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}/*.cpp)
23+
24+
add_library(
25+
${LIB_TARGET_NAME}
26+
SHARED
27+
${LIB_CUSTOM_SRCS}
28+
${LIB_CODEGEN_SRCS}
29+
)
30+
31+
target_include_directories(
32+
${LIB_TARGET_NAME}
33+
PUBLIC
34+
.
35+
${LIB_COMMON_DIR}
36+
${LIB_ANDROID_GENERATED_JNI_DIR}
37+
${LIB_ANDROID_GENERATED_COMPONENTS_DIR}
38+
)
39+
40+
target_link_libraries(
41+
${LIB_TARGET_NAME}
42+
fbjni
43+
folly_runtime
44+
glog
45+
jsi
46+
react_codegen_rncore
47+
react_debug
48+
react_render_componentregistry
49+
react_render_core
50+
react_render_debug
51+
react_render_graphics
52+
react_render_imagemanager
53+
react_render_mapbuffer
54+
react_render_textlayoutmanager
55+
react_utils
56+
react_nativemodule_core
57+
rrc_image
58+
turbomodulejsijni
59+
rrc_text
60+
rrc_textinput
61+
rrc_view
62+
yoga
63+
)
64+
65+
target_compile_options(
66+
${LIB_TARGET_NAME}
67+
PRIVATE
68+
-DLOG_TAG=\"ReactNative\"
69+
-fexceptions
70+
-frtti
71+
-std=c++20
72+
-Wall
73+
)
74+
75+
target_include_directories(
76+
${CMAKE_PROJECT_NAME}
77+
PUBLIC
78+
${CMAKE_CURRENT_SOURCE_DIR}
79+
)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include <ReactCommon/JavaTurboModule.h>
4+
#include <ReactCommon/TurboModule.h>
5+
#include <jsi/jsi.h>
6+
#include <react/renderer/components/RNCSlider/RNCSliderComponentDescriptor.h>
7+
8+
namespace facebook {
9+
namespace react {
10+
11+
JSI_EXPORT
12+
std::shared_ptr<TurboModule> RNCSlider_ModuleProvider(
13+
const std::string &moduleName,
14+
const JavaTurboModule::InitParams &params);
15+
16+
} // namespace react
17+
} // namespace facebook
18+

package/android/src/newarch/java/com/reactnativecommunity/slider/ReactSliderManager.java

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.reactnativecommunity.slider;
22

3+
import android.content.Context;
4+
import android.view.View;
35
import android.widget.SeekBar;
46
import androidx.annotation.Nullable;
57

68
import com.facebook.react.bridge.ReactContext;
79
import com.facebook.react.bridge.ReadableArray;
810
import com.facebook.react.bridge.ReadableMap;
11+
import com.facebook.react.common.MapBuilder;
12+
import com.facebook.react.uimanager.PixelUtil;
913
import com.facebook.react.uimanager.SimpleViewManager;
1014
import com.facebook.react.uimanager.ThemedReactContext;
1115
import com.facebook.react.uimanager.UIManagerHelper;
@@ -17,6 +21,8 @@
1721
import com.facebook.react.viewmanagers.RNCSliderManagerInterface;
1822
import com.facebook.react.viewmanagers.RNCSliderManagerDelegate;
1923
import com.facebook.react.module.annotations.ReactModule;
24+
import com.facebook.yoga.YogaMeasureMode;
25+
import com.facebook.yoga.YogaMeasureOutput;
2026

2127
/**
2228
* Manages instances of {@code ReactSlider}.
@@ -190,11 +196,6 @@ protected void addEventEmitters(final ThemedReactContext reactContext, final Rea
190196
view.setOnSeekBarChangeListener(ON_CHANGE_LISTENER);
191197
}
192198

193-
@Override
194-
public Map getExportedCustomDirectEventTypeConstants() {
195-
return ReactSliderManagerImpl.getExportedCustomDirectEventTypeConstants();
196-
}
197-
198199
// these props are not available on Android, however we must override their setters
199200
@Override
200201
public void setMinimumTrackImage(ReactSlider view, @Nullable ReadableMap readableMap) {}
@@ -210,4 +211,35 @@ public void setTapToSeek(ReactSlider view, boolean value) {}
210211

211212
@Override
212213
public void setVertical(ReactSlider view, boolean value) {}
214+
215+
@Override
216+
public long measure(
217+
Context context,
218+
ReadableMap localData,
219+
ReadableMap props,
220+
ReadableMap state,
221+
float width,
222+
YogaMeasureMode widthMode,
223+
float height,
224+
YogaMeasureMode heightMode,
225+
@Nullable float[] attachmentsPositions) {
226+
ReactSlider view = new ReactSlider(context, null);
227+
int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
228+
view.measure(measureSpec, measureSpec);
229+
return YogaMeasureOutput.make(
230+
PixelUtil.toDIPFromPixel(view.getMeasuredWidth()),
231+
PixelUtil.toDIPFromPixel(view.getMeasuredHeight()));
232+
}
233+
234+
@Nullable
235+
@Override
236+
public Map<String, Object> getExportedCustomBubblingEventTypeConstants() {
237+
return ReactSliderManagerImpl.getExportedCustomBubblingEventTypeConstants();
238+
}
239+
240+
@Nullable
241+
@Override
242+
public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
243+
return ReactSliderManagerImpl.getExportedCustomDirectEventTypeConstants();
244+
}
213245
}

package/android/src/oldarch/java/com/reactnativecommunity/slider/ReactSliderManager.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,15 @@ protected void addEventEmitters(final ThemedReactContext reactContext, final Rea
200200
view.setOnSeekBarChangeListener(ON_CHANGE_LISTENER);
201201
}
202202

203-
@Override
204-
public Map getExportedCustomDirectEventTypeConstants() {
205-
return ReactSliderManagerImpl.getExportedCustomDirectEventTypeConstants();
206-
}
203+
@Nullable
204+
@Override
205+
public Map<String, Object> getExportedCustomBubblingEventTypeConstants() {
206+
return ReactSliderManagerImpl.getExportedCustomBubblingEventTypeConstants();
207+
}
208+
209+
@Nullable
210+
@Override
211+
public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
212+
return ReactSliderManagerImpl.getExportedCustomDirectEventTypeConstants();
213+
}
207214
}

0 commit comments

Comments
 (0)