react-native 0.80.1 → 0.80.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/RCTDeviceInfo.mm +3 -4
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm +30 -25
- package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +2 -1
- package/ReactAndroid/api/ReactAndroid.api +2 -2
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt +3 -2
- package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +25 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/internal/interop/InteropUiBlockListener.kt +27 -16
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +0 -3
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java +17 -6
- package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
- package/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.h +2 -1
- package/package.json +8 -8
- package/scripts/cocoapods/rndependencies.rb +4 -1
- package/sdks/.hermesversion +1 -1
- package/sdks/hermes-engine/hermes-utils.rb +4 -1
- package/sdks/hermesc/osx-bin/hermes +0 -0
- package/sdks/hermesc/osx-bin/hermesc +0 -0
- package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
- package/sdks/hermesc/win64-bin/msvcp140.dll +0 -0
- package/sdks/hermesc/win64-bin/vcruntime140.dll +0 -0
- package/sdks/hermesc/win64-bin/vcruntime140_1.dll +0 -0
- package/third-party-podspecs/ReactNativeDependencies.podspec +1 -1
package/React/Base/RCTVersion.m
CHANGED
|
@@ -237,11 +237,10 @@ static NSDictionary *RCTExportedDimensions(CGFloat fontScale)
|
|
|
237
237
|
- (void)interfaceOrientationDidChange
|
|
238
238
|
{
|
|
239
239
|
#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST
|
|
240
|
-
|
|
241
|
-
UIInterfaceOrientation nextOrientation =
|
|
240
|
+
UIWindow *window = RCTKeyWindow();
|
|
241
|
+
UIInterfaceOrientation nextOrientation = window.windowScene.interfaceOrientation;
|
|
242
242
|
|
|
243
|
-
BOOL isRunningInFullScreen =
|
|
244
|
-
CGRectEqualToRect(application.delegate.window.frame, application.delegate.window.screen.bounds);
|
|
243
|
+
BOOL isRunningInFullScreen = window ? CGRectEqualToRect(window.frame, window.screen.bounds) : YES;
|
|
245
244
|
// We are catching here two situations for multitasking view:
|
|
246
245
|
// a) The app is in Split View and the container gets resized -> !isRunningInFullScreen
|
|
247
246
|
// b) The app changes to/from fullscreen example: App runs in slide over mode and goes into fullscreen->
|
package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm
CHANGED
|
@@ -24,9 +24,13 @@ using namespace facebook::react;
|
|
|
24
24
|
@end
|
|
25
25
|
|
|
26
26
|
@implementation RCTPullToRefreshViewComponentView {
|
|
27
|
-
BOOL _isBeforeInitialLayout;
|
|
28
27
|
UIRefreshControl *_refreshControl;
|
|
29
28
|
RCTScrollViewComponentView *__weak _scrollViewComponentView;
|
|
29
|
+
// This variable keeps track of whether the view is recycled or not. Once the view is recycled, the component
|
|
30
|
+
// creates a new instance of UIRefreshControl, resetting the native props to the default values.
|
|
31
|
+
// However, when recycling, we are keeping around the old _props. The flag is used to force the application
|
|
32
|
+
// of the current props to the newly created UIRefreshControl the first time that updateProps is called.
|
|
33
|
+
BOOL _recycled;
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
@@ -36,8 +40,7 @@ using namespace facebook::react;
|
|
|
36
40
|
// attaching and detaching of a pull-to-refresh view to a scroll view.
|
|
37
41
|
// The pull-to-refresh view is not a subview of this view.
|
|
38
42
|
self.hidden = YES;
|
|
39
|
-
|
|
40
|
-
_isBeforeInitialLayout = YES;
|
|
43
|
+
_recycled = NO;
|
|
41
44
|
[self _initializeUIRefreshControl];
|
|
42
45
|
}
|
|
43
46
|
|
|
@@ -63,54 +66,53 @@ using namespace facebook::react;
|
|
|
63
66
|
{
|
|
64
67
|
[super prepareForRecycle];
|
|
65
68
|
_scrollViewComponentView = nil;
|
|
66
|
-
_props = nil;
|
|
67
|
-
_isBeforeInitialLayout = YES;
|
|
68
69
|
[self _initializeUIRefreshControl];
|
|
70
|
+
_recycled = YES;
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
- (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps
|
|
72
74
|
{
|
|
73
|
-
// Prop updates are ignored by _refreshControl until after the initial layout, so just store them in _props until then
|
|
74
|
-
if (_isBeforeInitialLayout) {
|
|
75
|
-
_props = std::static_pointer_cast<const PullToRefreshViewProps>(props);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
75
|
const auto &oldConcreteProps = static_cast<const PullToRefreshViewProps &>(*_props);
|
|
80
76
|
const auto &newConcreteProps = static_cast<const PullToRefreshViewProps &>(*props);
|
|
81
77
|
|
|
82
|
-
if (newConcreteProps.tintColor != oldConcreteProps.tintColor) {
|
|
78
|
+
if (_recycled || newConcreteProps.tintColor != oldConcreteProps.tintColor) {
|
|
83
79
|
_refreshControl.tintColor = RCTUIColorFromSharedColor(newConcreteProps.tintColor);
|
|
84
80
|
}
|
|
85
81
|
|
|
86
|
-
if (newConcreteProps.progressViewOffset != oldConcreteProps.progressViewOffset) {
|
|
82
|
+
if (_recycled || newConcreteProps.progressViewOffset != oldConcreteProps.progressViewOffset) {
|
|
87
83
|
[self _updateProgressViewOffset:newConcreteProps.progressViewOffset];
|
|
88
84
|
}
|
|
89
85
|
|
|
90
86
|
BOOL needsUpdateTitle = NO;
|
|
91
87
|
|
|
92
|
-
if (newConcreteProps.title != oldConcreteProps.title) {
|
|
88
|
+
if (_recycled || newConcreteProps.title != oldConcreteProps.title) {
|
|
93
89
|
needsUpdateTitle = YES;
|
|
94
90
|
}
|
|
95
91
|
|
|
96
|
-
if (newConcreteProps.titleColor != oldConcreteProps.titleColor) {
|
|
92
|
+
if (_recycled || newConcreteProps.titleColor != oldConcreteProps.titleColor) {
|
|
97
93
|
needsUpdateTitle = YES;
|
|
98
94
|
}
|
|
99
95
|
|
|
100
96
|
[super updateProps:props oldProps:oldProps];
|
|
101
97
|
|
|
102
|
-
if (needsUpdateTitle) {
|
|
98
|
+
if (_recycled || needsUpdateTitle) {
|
|
103
99
|
[self _updateTitle];
|
|
104
100
|
}
|
|
105
101
|
|
|
106
102
|
// All prop updates must happen above the call to begin refreshing, or else _refreshControl will ignore the updates
|
|
107
|
-
if (newConcreteProps.refreshing != oldConcreteProps.refreshing) {
|
|
103
|
+
if (_recycled || newConcreteProps.refreshing != oldConcreteProps.refreshing) {
|
|
108
104
|
if (newConcreteProps.refreshing) {
|
|
109
105
|
[self beginRefreshingProgrammatically];
|
|
110
106
|
} else {
|
|
111
107
|
[_refreshControl endRefreshing];
|
|
112
108
|
}
|
|
113
109
|
}
|
|
110
|
+
|
|
111
|
+
if (_recycled || newConcreteProps.zIndex != oldConcreteProps.zIndex) {
|
|
112
|
+
_refreshControl.layer.zPosition = newConcreteProps.zIndex.value_or(0);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
_recycled = NO;
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
#pragma mark -
|
|
@@ -155,10 +157,12 @@ using namespace facebook::react;
|
|
|
155
157
|
|
|
156
158
|
// Attempts to begin refreshing before the initial layout are ignored by _refreshControl. So if the control is
|
|
157
159
|
// refreshing when mounted, we need to call beginRefreshing in layoutSubviews or it won't work.
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
+
if (self.window) {
|
|
161
|
+
const auto &concreteProps = static_cast<const PullToRefreshViewProps &>(*_props);
|
|
160
162
|
|
|
161
|
-
|
|
163
|
+
if (concreteProps.refreshing) {
|
|
164
|
+
[self beginRefreshingProgrammatically];
|
|
165
|
+
}
|
|
162
166
|
}
|
|
163
167
|
}
|
|
164
168
|
|
|
@@ -214,11 +218,12 @@ using namespace facebook::react;
|
|
|
214
218
|
|
|
215
219
|
// When refreshing programmatically (i.e. without pulling down), we must explicitly adjust the ScrollView content
|
|
216
220
|
// offset, or else the _refreshControl won't be visible
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
221
|
+
if (!_refreshControl.isRefreshing) {
|
|
222
|
+
UIScrollView *scrollView = _scrollViewComponentView.scrollView;
|
|
223
|
+
CGPoint offset = {scrollView.contentOffset.x, scrollView.contentOffset.y - _refreshControl.frame.size.height};
|
|
224
|
+
[scrollView setContentOffset:offset];
|
|
225
|
+
[_refreshControl beginRefreshing];
|
|
226
|
+
}
|
|
222
227
|
}
|
|
223
228
|
|
|
224
229
|
#pragma mark - Native commands
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#import "RCTTextInputNativeCommands.h"
|
|
23
23
|
#import "RCTTextInputUtils.h"
|
|
24
24
|
|
|
25
|
+
#import <limits>
|
|
25
26
|
#import "RCTFabricComponentsPlugins.h"
|
|
26
27
|
|
|
27
28
|
/** Native iOS text field bottom keyboard offset amount */
|
|
@@ -447,7 +448,7 @@ static NSSet<NSNumber *> *returnKeyTypesSet;
|
|
|
447
448
|
}
|
|
448
449
|
}
|
|
449
450
|
|
|
450
|
-
if (props.maxLength) {
|
|
451
|
+
if (props.maxLength < std::numeric_limits<int>::max()) {
|
|
451
452
|
NSInteger allowedLength = props.maxLength - _backedTextInputView.attributedText.string.length + range.length;
|
|
452
453
|
|
|
453
454
|
if (allowedLength > 0 && text.length > allowedLength) {
|
|
@@ -31,8 +31,8 @@ public abstract class com/facebook/react/HeadlessJsTaskService : android/app/Ser
|
|
|
31
31
|
public fun <init> ()V
|
|
32
32
|
public static final fun acquireWakeLockNow (Landroid/content/Context;)V
|
|
33
33
|
protected final fun getReactContext ()Lcom/facebook/react/bridge/ReactContext;
|
|
34
|
-
protected
|
|
35
|
-
protected
|
|
34
|
+
protected fun getReactHost ()Lcom/facebook/react/ReactHost;
|
|
35
|
+
protected fun getReactNativeHost ()Lcom/facebook/react/ReactNativeHost;
|
|
36
36
|
protected fun getTaskConfig (Landroid/content/Intent;)Lcom/facebook/react/jstasks/HeadlessJsTaskConfig;
|
|
37
37
|
public fun onBind (Landroid/content/Intent;)Landroid/os/IBinder;
|
|
38
38
|
public fun onDestroy ()V
|
|
@@ -112,7 +112,8 @@ public abstract class HeadlessJsTaskService : Service(), HeadlessJsTaskEventList
|
|
|
112
112
|
* simply have a different mechanism for storing a `ReactNativeHost`, e.g. as a static field
|
|
113
113
|
* somewhere.
|
|
114
114
|
*/
|
|
115
|
-
|
|
115
|
+
@Suppress("DEPRECATION")
|
|
116
|
+
protected open val reactNativeHost: ReactNativeHost
|
|
116
117
|
get() = (application as ReactApplication).reactNativeHost
|
|
117
118
|
|
|
118
119
|
/**
|
|
@@ -120,7 +121,7 @@ public abstract class HeadlessJsTaskService : Service(), HeadlessJsTaskEventList
|
|
|
120
121
|
* [ReactApplication] and calls [ReactApplication.reactHost]. This method assumes it is called in
|
|
121
122
|
* new architecture and returns null if not.
|
|
122
123
|
*/
|
|
123
|
-
protected val reactHost: ReactHost?
|
|
124
|
+
protected open val reactHost: ReactHost?
|
|
124
125
|
get() = (application as ReactApplication).reactHost
|
|
125
126
|
|
|
126
127
|
protected val reactContext: ReactContext?
|
|
@@ -20,6 +20,7 @@ import com.facebook.infer.annotation.Assertions;
|
|
|
20
20
|
import com.facebook.react.bridge.Callback;
|
|
21
21
|
import com.facebook.react.bridge.ReactContext;
|
|
22
22
|
import com.facebook.react.common.annotations.DeprecatedInNewArchitecture;
|
|
23
|
+
import com.facebook.react.common.LifecycleState;
|
|
23
24
|
import com.facebook.react.interfaces.fabric.ReactSurface;
|
|
24
25
|
import com.facebook.react.internal.featureflags.ReactNativeNewArchitectureFeatureFlags;
|
|
25
26
|
import com.facebook.react.modules.core.PermissionListener;
|
|
@@ -228,7 +229,7 @@ public class ReactActivityDelegate {
|
|
|
228
229
|
|
|
229
230
|
public void onRequestPermissionsResult(
|
|
230
231
|
final int requestCode, final String[] permissions, final int[] grantResults) {
|
|
231
|
-
|
|
232
|
+
Callback permissionsCallback =
|
|
232
233
|
args -> {
|
|
233
234
|
if (mPermissionListener != null
|
|
234
235
|
&& mPermissionListener.onRequestPermissionsResult(
|
|
@@ -236,6 +237,29 @@ public class ReactActivityDelegate {
|
|
|
236
237
|
mPermissionListener = null;
|
|
237
238
|
}
|
|
238
239
|
};
|
|
240
|
+
|
|
241
|
+
LifecycleState lifecycle;
|
|
242
|
+
if (isFabricEnabled()) {
|
|
243
|
+
ReactHost reactHost = getReactHost();
|
|
244
|
+
lifecycle = reactHost != null ? reactHost.getLifecycleState() : LifecycleState.BEFORE_CREATE;
|
|
245
|
+
} else {
|
|
246
|
+
ReactNativeHost reactNativeHost = getReactNativeHost();
|
|
247
|
+
if (!reactNativeHost.hasInstance()) {
|
|
248
|
+
lifecycle = LifecycleState.BEFORE_CREATE;
|
|
249
|
+
} else {
|
|
250
|
+
lifecycle = reactNativeHost.getReactInstanceManager().getLifecycleState();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// If the permission request didn't show a dialog to the user, we can call the callback
|
|
255
|
+
// immediately.
|
|
256
|
+
// Otherwise, we need to wait until onResume to call it.
|
|
257
|
+
if (lifecycle == LifecycleState.RESUMED) {
|
|
258
|
+
permissionsCallback.invoke();
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
mPermissionsCallback = permissionsCallback;
|
|
239
263
|
}
|
|
240
264
|
|
|
241
265
|
protected Context getContext() {
|
|
@@ -1403,14 +1403,14 @@ public class ReactInstanceManager {
|
|
|
1403
1403
|
new RuntimeException(
|
|
1404
1404
|
"detachRootViewFromInstance called with ReactRootView with invalid id"));
|
|
1405
1405
|
}
|
|
1406
|
-
|
|
1407
|
-
clearReactRoot(reactRoot);
|
|
1408
1406
|
} else {
|
|
1409
1407
|
reactContext
|
|
1410
1408
|
.getCatalystInstance()
|
|
1411
1409
|
.getJSModule(AppRegistry.class)
|
|
1412
1410
|
.unmountApplicationComponentAtRootTag(reactRoot.getRootViewTag());
|
|
1413
1411
|
}
|
|
1412
|
+
|
|
1413
|
+
clearReactRoot(reactRoot);
|
|
1414
1414
|
}
|
|
1415
1415
|
|
|
1416
1416
|
@ThreadConfined(UI)
|
|
@@ -135,6 +135,10 @@ public class ReactRootView extends FrameLayout implements RootView, ReactRoot {
|
|
|
135
135
|
private void init() {
|
|
136
136
|
setRootViewTag(ReactRootViewTagGenerator.getNextRootViewTag());
|
|
137
137
|
setClipChildren(false);
|
|
138
|
+
|
|
139
|
+
if (ReactNativeFeatureFlags.enableFontScaleChangesUpdatingLayout()) {
|
|
140
|
+
DisplayMetricsHolder.initDisplayMetrics(getContext().getApplicationContext());
|
|
141
|
+
}
|
|
138
142
|
}
|
|
139
143
|
|
|
140
144
|
@Override
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
package com.facebook.react.fabric.internal.interop
|
|
11
11
|
|
|
12
|
+
import androidx.annotation.VisibleForTesting
|
|
12
13
|
import com.facebook.react.bridge.UIManager
|
|
13
14
|
import com.facebook.react.bridge.UIManagerListener
|
|
14
15
|
import com.facebook.react.common.annotations.UnstableReactNativeAPI
|
|
@@ -24,9 +25,9 @@ import com.facebook.react.fabric.interop.UIBlockViewResolver
|
|
|
24
25
|
*/
|
|
25
26
|
@OptIn(UnstableReactNativeAPI::class)
|
|
26
27
|
internal class InteropUIBlockListener : UIManagerListener {
|
|
28
|
+
@VisibleForTesting internal val beforeUIBlocks: MutableList<UIBlock> = mutableListOf()
|
|
27
29
|
|
|
28
|
-
internal val
|
|
29
|
-
internal val afterUIBlocks: MutableList<UIBlock> = mutableListOf()
|
|
30
|
+
@VisibleForTesting internal val afterUIBlocks: MutableList<UIBlock> = mutableListOf()
|
|
30
31
|
|
|
31
32
|
@Synchronized
|
|
32
33
|
fun prependUIBlock(block: UIBlock) {
|
|
@@ -39,27 +40,37 @@ internal class InteropUIBlockListener : UIManagerListener {
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
override fun willMountItems(uiManager: UIManager) {
|
|
42
|
-
if (
|
|
43
|
+
if (uiManager !is UIBlockViewResolver) {
|
|
43
44
|
return
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
|
|
47
|
+
// avoid ConcurrentModificationException by iterating over a copy
|
|
48
|
+
val blocks =
|
|
49
|
+
synchronized(this) {
|
|
50
|
+
if (beforeUIBlocks.isEmpty()) {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
beforeUIBlocks.toList().also { beforeUIBlocks.clear() }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
blocks.forEach { block -> block.execute(uiManager) }
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
override fun didMountItems(uiManager: UIManager) {
|
|
54
|
-
if (
|
|
60
|
+
if (uiManager !is UIBlockViewResolver) {
|
|
55
61
|
return
|
|
56
62
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
|
|
64
|
+
// avoid ConcurrentModificationException by iterating over a copy
|
|
65
|
+
val blocks =
|
|
66
|
+
synchronized(this) {
|
|
67
|
+
if (afterUIBlocks.isEmpty()) {
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
afterUIBlocks.toList().also { afterUIBlocks.clear() }
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
blocks.forEach { block -> block.execute(uiManager) }
|
|
63
74
|
}
|
|
64
75
|
|
|
65
76
|
override fun didDispatchMountItems(uiManager: UIManager) = didMountItems(uiManager)
|
package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java
CHANGED
|
@@ -43,6 +43,7 @@ import com.facebook.react.uimanager.events.EventDispatcher;
|
|
|
43
43
|
import com.facebook.react.uimanager.util.ReactFindViewUtil;
|
|
44
44
|
import java.util.HashMap;
|
|
45
45
|
import java.util.List;
|
|
46
|
+
import java.util.Map;
|
|
46
47
|
|
|
47
48
|
/**
|
|
48
49
|
* Utility class that handles the addition of a "role" for accessibility to either a View or
|
|
@@ -54,7 +55,8 @@ public class ReactAccessibilityDelegate extends ExploreByTouchHelper {
|
|
|
54
55
|
public static final HashMap<String, Integer> sActionIdMap = new HashMap<>();
|
|
55
56
|
|
|
56
57
|
private static final String TAG = "ReactAccessibilityDelegate";
|
|
57
|
-
private static int
|
|
58
|
+
private static int sCustomActionCounter = 0x3f000000;
|
|
59
|
+
private static final Map<String, Integer> sCustomActionIdMap = new HashMap<>();
|
|
58
60
|
private static final int TIMEOUT_SEND_ACCESSIBILITY_EVENT = 200;
|
|
59
61
|
private static final int SEND_EVENT = 1;
|
|
60
62
|
private static final String delimiter = ", ";
|
|
@@ -206,14 +208,23 @@ public class ReactAccessibilityDelegate extends ExploreByTouchHelper {
|
|
|
206
208
|
if (!action.hasKey("name")) {
|
|
207
209
|
throw new IllegalArgumentException("Unknown accessibility action.");
|
|
208
210
|
}
|
|
209
|
-
|
|
211
|
+
|
|
212
|
+
String actionName = action.getString("name");
|
|
210
213
|
String actionLabel = action.hasKey("label") ? action.getString("label") : null;
|
|
211
|
-
|
|
212
|
-
|
|
214
|
+
int actionId;
|
|
215
|
+
|
|
216
|
+
if (sActionIdMap.containsKey(actionName)) {
|
|
217
|
+
actionId = sActionIdMap.get(actionName);
|
|
213
218
|
} else {
|
|
214
|
-
|
|
219
|
+
if (sCustomActionIdMap.containsKey(actionName)) {
|
|
220
|
+
actionId = sCustomActionIdMap.get(actionName);
|
|
221
|
+
} else {
|
|
222
|
+
actionId = sCustomActionCounter++;
|
|
223
|
+
sCustomActionIdMap.put(actionName, actionId);
|
|
224
|
+
}
|
|
215
225
|
}
|
|
216
|
-
|
|
226
|
+
|
|
227
|
+
mAccessibilityActionsMap.put(actionId, actionName);
|
|
217
228
|
final AccessibilityActionCompat accessibilityAction =
|
|
218
229
|
new AccessibilityActionCompat(actionId, actionLabel);
|
|
219
230
|
info.addAction(accessibilityAction);
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
|
|
15
15
|
#define REACT_NATIVE_VERSION_MAJOR 0
|
|
16
16
|
#define REACT_NATIVE_VERSION_MINOR 80
|
|
17
|
-
#define REACT_NATIVE_VERSION_PATCH
|
|
17
|
+
#define REACT_NATIVE_VERSION_PATCH 3
|
|
18
18
|
|
|
19
19
|
namespace facebook::react {
|
|
20
20
|
|
|
21
21
|
constexpr struct {
|
|
22
22
|
int32_t Major = 0;
|
|
23
23
|
int32_t Minor = 80;
|
|
24
|
-
int32_t Patch =
|
|
24
|
+
int32_t Patch = 3;
|
|
25
25
|
std::string_view Prerelease = "";
|
|
26
26
|
} ReactNativeVersion;
|
|
27
27
|
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include <react/renderer/components/view/ViewProps.h>
|
|
14
14
|
#include <react/renderer/core/PropsParserContext.h>
|
|
15
15
|
#include <react/renderer/graphics/Color.h>
|
|
16
|
+
#include <limits>
|
|
16
17
|
#include <string>
|
|
17
18
|
|
|
18
19
|
namespace facebook::react {
|
|
@@ -60,7 +61,7 @@ class BaseTextInputProps : public ViewProps, public BaseTextProps {
|
|
|
60
61
|
// TODO: Rename to `tintColor` and make universal.
|
|
61
62
|
SharedColor underlineColorAndroid{};
|
|
62
63
|
|
|
63
|
-
int maxLength
|
|
64
|
+
int maxLength = std::numeric_limits<int>::max();
|
|
64
65
|
|
|
65
66
|
/*
|
|
66
67
|
* "Private" (only used by TextInput.js) props
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native",
|
|
3
|
-
"version": "0.80.
|
|
3
|
+
"version": "0.80.3",
|
|
4
4
|
"description": "A framework for building native apps using React",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -160,13 +160,13 @@
|
|
|
160
160
|
},
|
|
161
161
|
"dependencies": {
|
|
162
162
|
"@jest/create-cache-key-function": "^29.7.0",
|
|
163
|
-
"@react-native/assets-registry": "0.80.
|
|
164
|
-
"@react-native/codegen": "0.80.
|
|
165
|
-
"@react-native/community-cli-plugin": "0.80.
|
|
166
|
-
"@react-native/gradle-plugin": "0.80.
|
|
167
|
-
"@react-native/js-polyfills": "0.80.
|
|
168
|
-
"@react-native/normalize-colors": "0.80.
|
|
169
|
-
"@react-native/virtualized-lists": "0.80.
|
|
163
|
+
"@react-native/assets-registry": "0.80.3",
|
|
164
|
+
"@react-native/codegen": "0.80.3",
|
|
165
|
+
"@react-native/community-cli-plugin": "0.80.3",
|
|
166
|
+
"@react-native/gradle-plugin": "0.80.3",
|
|
167
|
+
"@react-native/js-polyfills": "0.80.3",
|
|
168
|
+
"@react-native/normalize-colors": "0.80.3",
|
|
169
|
+
"@react-native/virtualized-lists": "0.80.3",
|
|
170
170
|
"abort-controller": "^3.0.0",
|
|
171
171
|
"anser": "^1.4.9",
|
|
172
172
|
"ansi-regex": "^5.0.0",
|
|
@@ -134,7 +134,10 @@ class ReactNativeDependenciesUtils
|
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
def self.release_tarball_url(version, build_type)
|
|
137
|
-
maven_repo_url =
|
|
137
|
+
maven_repo_url =
|
|
138
|
+
ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ?
|
|
139
|
+
ENV['ENTERPRISE_REPOSITORY'] :
|
|
140
|
+
"https://repo1.maven.org/maven2"
|
|
138
141
|
group = "com/facebook/react"
|
|
139
142
|
# Sample url from Maven:
|
|
140
143
|
# https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.79.0-rc.0/react-native-artifacts-0.79.0-rc.0-reactnative-dependencies-debug.tar.gz
|
package/sdks/.hermesversion
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
hermes-2025-
|
|
1
|
+
hermes-2025-07-24-RNv0.80.2-5c7dbc0a78cb2d2a8bc81c41c617c3abecf209ff
|
|
@@ -204,7 +204,10 @@ def hermestag_file(react_native_path)
|
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
def release_tarball_url(version, build_type)
|
|
207
|
-
maven_repo_url =
|
|
207
|
+
maven_repo_url =
|
|
208
|
+
ENV['ENTERPRISE_REPOSITORY'] != nil && ENV['ENTERPRISE_REPOSITORY'] != "" ?
|
|
209
|
+
ENV['ENTERPRISE_REPOSITORY'] :
|
|
210
|
+
"https://repo1.maven.org/maven2"
|
|
208
211
|
namespace = "com/facebook/react"
|
|
209
212
|
# Sample url from Maven:
|
|
210
213
|
# https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.71.0/react-native-artifacts-0.71.0-hermes-ios-debug.tar.gz
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -49,7 +49,7 @@ Pod::Spec.new do |spec|
|
|
|
49
49
|
mkdir -p Headers
|
|
50
50
|
XCFRAMEWORK_PATH=$(find "$CURRENT_PATH" -type d -name "ReactNativeDependencies.xcframework")
|
|
51
51
|
HEADERS_PATH=$(find "$XCFRAMEWORK_PATH" -type d -name "Headers" | head -n 1)
|
|
52
|
-
cp -R "$HEADERS_PATH
|
|
52
|
+
cp -R "$HEADERS_PATH/." Headers
|
|
53
53
|
mkdir -p framework/packages/react-native
|
|
54
54
|
cp -R "$XCFRAMEWORK_PATH/.." framework/packages/react-native/
|
|
55
55
|
find "$XCFRAMEWORK_PATH/.." -type f -exec rm {} +
|