Skip to content

Commit 0dc5c5f

Browse files
ryanlntnfacebook-github-bot
authored andcommitted
Update bridge to handle long values (#43158)
Summary: This adds support for 64 bit integer (long) values to the Android bridge. Per the wide gamut color [RFC](react-native-community/discussions-and-proposals#738) Android encodes wide gamut colors as long values so we need to update the bridge to support 64 bit integers as well since these classes will soon receive those values from native. ## Changelog: [ANDROID] [ADDED] - Update bridge to handle long values Pull Request resolved: #43158 Test Plan: I added tests where I could for long types and truncation. I would like to add tests for ReadableNativeArray and ReadableNativeMap but I'm not sure how to go about mocking HybridData. Reviewed By: cipolleschi Differential Revision: D54276496 Pulled By: NickGerleman fbshipit-source-id: 1e71b5283f662748beef1bdb34d9c86099baecb0
1 parent 73664f5 commit 0dc5c5f

File tree

13 files changed

+131
-7
lines changed

13 files changed

+131
-7
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,7 @@ public class com/facebook/react/bridge/JavaOnlyArray : com/facebook/react/bridge
823823
public fun getDouble (I)D
824824
public fun getDynamic (I)Lcom/facebook/react/bridge/Dynamic;
825825
public fun getInt (I)I
826+
public fun getLong (I)J
826827
public fun getMap (I)Lcom/facebook/react/bridge/ReadableMap;
827828
public fun getString (I)Ljava/lang/String;
828829
public fun getType (I)Lcom/facebook/react/bridge/ReadableType;
@@ -833,6 +834,7 @@ public class com/facebook/react/bridge/JavaOnlyArray : com/facebook/react/bridge
833834
public fun pushBoolean (Z)V
834835
public fun pushDouble (D)V
835836
public fun pushInt (I)V
837+
public fun pushLong (J)V
836838
public fun pushMap (Lcom/facebook/react/bridge/ReadableMap;)V
837839
public fun pushNull ()V
838840
public fun pushString (Ljava/lang/String;)V
@@ -853,6 +855,7 @@ public class com/facebook/react/bridge/JavaOnlyMap : com/facebook/react/bridge/R
853855
public fun getDynamic (Ljava/lang/String;)Lcom/facebook/react/bridge/Dynamic;
854856
public fun getEntryIterator ()Ljava/util/Iterator;
855857
public fun getInt (Ljava/lang/String;)I
858+
public fun getLong (Ljava/lang/String;)J
856859
public fun getMap (Ljava/lang/String;)Lcom/facebook/react/bridge/ReadableMap;
857860
public fun getString (Ljava/lang/String;)Ljava/lang/String;
858861
public fun getType (Ljava/lang/String;)Lcom/facebook/react/bridge/ReadableType;
@@ -866,6 +869,7 @@ public class com/facebook/react/bridge/JavaOnlyMap : com/facebook/react/bridge/R
866869
public fun putBoolean (Ljava/lang/String;Z)V
867870
public fun putDouble (Ljava/lang/String;D)V
868871
public fun putInt (Ljava/lang/String;I)V
872+
public fun putLong (Ljava/lang/String;J)V
869873
public fun putMap (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableMap;)V
870874
public fun putNull (Ljava/lang/String;)V
871875
public fun putString (Ljava/lang/String;Ljava/lang/String;)V
@@ -1326,6 +1330,7 @@ public abstract interface class com/facebook/react/bridge/ReadableArray {
13261330
public abstract fun getDouble (I)D
13271331
public abstract fun getDynamic (I)Lcom/facebook/react/bridge/Dynamic;
13281332
public abstract fun getInt (I)I
1333+
public abstract fun getLong (I)J
13291334
public abstract fun getMap (I)Lcom/facebook/react/bridge/ReadableMap;
13301335
public abstract fun getString (I)Ljava/lang/String;
13311336
public abstract fun getType (I)Lcom/facebook/react/bridge/ReadableType;
@@ -1341,6 +1346,7 @@ public abstract interface class com/facebook/react/bridge/ReadableMap {
13411346
public abstract fun getDynamic (Ljava/lang/String;)Lcom/facebook/react/bridge/Dynamic;
13421347
public abstract fun getEntryIterator ()Ljava/util/Iterator;
13431348
public abstract fun getInt (Ljava/lang/String;)I
1349+
public abstract fun getLong (Ljava/lang/String;)J
13441350
public abstract fun getMap (Ljava/lang/String;)Lcom/facebook/react/bridge/ReadableMap;
13451351
public abstract fun getString (Ljava/lang/String;)Ljava/lang/String;
13461352
public abstract fun getType (Ljava/lang/String;)Lcom/facebook/react/bridge/ReadableType;
@@ -1365,6 +1371,7 @@ public class com/facebook/react/bridge/ReadableNativeArray : com/facebook/react/
13651371
public fun getDynamic (I)Lcom/facebook/react/bridge/Dynamic;
13661372
public fun getInt (I)I
13671373
public static fun getJNIPassCounter ()I
1374+
public fun getLong (I)J
13681375
public synthetic fun getMap (I)Lcom/facebook/react/bridge/ReadableMap;
13691376
public fun getMap (I)Lcom/facebook/react/bridge/ReadableNativeMap;
13701377
public fun getString (I)Ljava/lang/String;
@@ -1385,6 +1392,7 @@ public class com/facebook/react/bridge/ReadableNativeMap : com/facebook/react/br
13851392
public fun getEntryIterator ()Ljava/util/Iterator;
13861393
public fun getInt (Ljava/lang/String;)I
13871394
public static fun getJNIPassCounter ()I
1395+
public fun getLong (Ljava/lang/String;)J
13881396
public synthetic fun getMap (Ljava/lang/String;)Lcom/facebook/react/bridge/ReadableMap;
13891397
public fun getMap (Ljava/lang/String;)Lcom/facebook/react/bridge/ReadableNativeMap;
13901398
public fun getString (Ljava/lang/String;)Ljava/lang/String;
@@ -1480,6 +1488,7 @@ public abstract interface class com/facebook/react/bridge/WritableArray : com/fa
14801488
public abstract fun pushBoolean (Z)V
14811489
public abstract fun pushDouble (D)V
14821490
public abstract fun pushInt (I)V
1491+
public abstract fun pushLong (J)V
14831492
public abstract fun pushMap (Lcom/facebook/react/bridge/ReadableMap;)V
14841493
public abstract fun pushNull ()V
14851494
public abstract fun pushString (Ljava/lang/String;)V
@@ -1492,6 +1501,7 @@ public abstract interface class com/facebook/react/bridge/WritableMap : com/face
14921501
public abstract fun putBoolean (Ljava/lang/String;Z)V
14931502
public abstract fun putDouble (Ljava/lang/String;D)V
14941503
public abstract fun putInt (Ljava/lang/String;I)V
1504+
public abstract fun putLong (Ljava/lang/String;J)V
14951505
public abstract fun putMap (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableMap;)V
14961506
public abstract fun putNull (Ljava/lang/String;)V
14971507
public abstract fun putString (Ljava/lang/String;Ljava/lang/String;)V
@@ -1503,6 +1513,7 @@ public class com/facebook/react/bridge/WritableNativeArray : com/facebook/react/
15031513
public fun pushBoolean (Z)V
15041514
public fun pushDouble (D)V
15051515
public fun pushInt (I)V
1516+
public fun pushLong (J)V
15061517
public fun pushMap (Lcom/facebook/react/bridge/ReadableMap;)V
15071518
public fun pushNull ()V
15081519
public fun pushString (Ljava/lang/String;)V
@@ -1516,6 +1527,7 @@ public class com/facebook/react/bridge/WritableNativeMap : com/facebook/react/br
15161527
public fun putBoolean (Ljava/lang/String;Z)V
15171528
public fun putDouble (Ljava/lang/String;D)V
15181529
public fun putInt (Ljava/lang/String;I)V
1530+
public fun putLong (Ljava/lang/String;J)V
15191531
public fun putMap (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableMap;)V
15201532
public fun putNull (Ljava/lang/String;)V
15211533
public fun putString (Ljava/lang/String;Ljava/lang/String;)V

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ public int getInt(int index) {
9696
return ((Number) mBackingList.get(index)).intValue();
9797
}
9898

99+
@Override
100+
public long getLong(int index) {
101+
return ((Number) mBackingList.get(index)).longValue();
102+
}
103+
99104
@Override
100105
public @Nullable String getString(int index) {
101106
return (String) mBackingList.get(index);
@@ -129,7 +134,10 @@ public ReadableMap getMap(int index) {
129134
return ReadableType.Null;
130135
} else if (object instanceof Boolean) {
131136
return ReadableType.Boolean;
132-
} else if (object instanceof Double || object instanceof Float || object instanceof Integer) {
137+
} else if (object instanceof Double
138+
|| object instanceof Float
139+
|| object instanceof Integer
140+
|| object instanceof Long) {
133141
return ReadableType.Number;
134142
} else if (object instanceof String) {
135143
return ReadableType.String;
@@ -156,6 +164,11 @@ public void pushInt(int value) {
156164
mBackingList.add(new Double(value));
157165
}
158166

167+
@Override
168+
public void pushLong(long value) {
169+
mBackingList.add(value);
170+
}
171+
159172
@Override
160173
public void pushString(@Nullable String value) {
161174
mBackingList.add(value);

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
package com.facebook.react.bridge;
99

10+
import static androidx.core.util.Preconditions.checkNotNull;
11+
1012
import androidx.annotation.NonNull;
1113
import androidx.annotation.Nullable;
1214
import java.util.HashMap;
@@ -110,6 +112,11 @@ public int getInt(@NonNull String name) {
110112
return ((Number) mBackingMap.get(name)).intValue();
111113
}
112114

115+
@Override
116+
public long getLong(@NonNull String name) {
117+
return ((Number) checkNotNull(mBackingMap.get(name))).longValue();
118+
}
119+
113120
@Override
114121
public String getString(@NonNull String name) {
115122
return (String) mBackingMap.get(name);
@@ -190,6 +197,11 @@ public void putInt(@NonNull String key, int value) {
190197
mBackingMap.put(key, new Double(value));
191198
}
192199

200+
@Override
201+
public void putLong(@NonNull String key, long value) {
202+
mBackingMap.put(key, value);
203+
}
204+
193205
@Override
194206
public void putString(@NonNull String key, @Nullable String value) {
195207
mBackingMap.put(key, value);

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableArray.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public interface ReadableArray {
2626

2727
int getInt(int index);
2828

29+
long getLong(int index);
30+
2931
@NonNull
3032
String getString(int index);
3133

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableMap.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public interface ReadableMap {
2929

3030
int getInt(@NonNull String name);
3131

32+
long getLong(@NonNull String name);
33+
3234
@Nullable
3335
String getString(@NonNull String name);
3436

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ public int getInt(int index) {
9797
return ((Double) getLocalArray()[index]).intValue();
9898
}
9999

100+
@Override
101+
public long getLong(int index) {
102+
return ((Long) getLocalArray()[index]).longValue();
103+
}
104+
100105
@Override
101106
public @NonNull String getString(int index) {
102107
return (String) getLocalArray()[index];

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,11 @@ public int getInt(@NonNull String name) {
160160
return getValue(name, Double.class).intValue();
161161
}
162162

163+
@Override
164+
public long getLong(@NonNull String name) {
165+
return getValue(name, Long.class).longValue();
166+
}
167+
163168
@Override
164169
public @Nullable String getString(@NonNull String name) {
165170
return getNullableValue(name, String.class);

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableArray.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public interface WritableArray extends ReadableArray {
2020

2121
void pushInt(int value);
2222

23+
void pushLong(long value);
24+
2325
void pushString(@Nullable String value);
2426

2527
void pushArray(@Nullable ReadableArray array);

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableMap.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface WritableMap extends ReadableMap {
2121

2222
void putInt(@NonNull String key, int value);
2323

24+
void putLong(@NonNull String key, long value);
25+
2426
void putString(@NonNull String key, @Nullable String value);
2527

2628
void putArray(@NonNull String key, @Nullable ReadableArray value);

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public WritableNativeArray() {
3838
@Override
3939
public native void pushInt(int value);
4040

41+
@Override
42+
public native void pushLong(long value);
43+
4144
@Override
4245
public native void pushString(@Nullable String value);
4346

0 commit comments

Comments
 (0)