Skip to content

Commit f1a5cc3

Browse files
committed
fix android object conversion
1 parent 456a302 commit f1a5cc3

File tree

4 files changed

+53
-3
lines changed

4 files changed

+53
-3
lines changed

android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,6 @@ public void removeListeners(int count) {
739739

740740
@ReactMethod
741741
public void trackEvent(String name, @Nullable ReadableMap properties) {
742-
OneSignal.getUser().trackEvent(name, properties != null ? RNUtils.convertReadableMapIntoStringMap(properties) : null);
742+
OneSignal.getUser().trackEvent(name, properties != null ? RNUtils.convertReadableMapToMap(properties) : null);
743743
}
744744
}

android/src/main/java/com/onesignal/rnonesignalandroid/RNUtils.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,54 @@ public static HashMap<String, String> convertReadableMapIntoStringMap(ReadableMa
284284
return stringMap;
285285
}
286286

287+
public static Map<String, Object> convertReadableMapToMap(ReadableMap readableMap) {
288+
Map<String, Object> map = new HashMap<>();
289+
ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
290+
291+
while (iterator.hasNextKey()) {
292+
String key = iterator.nextKey();
293+
ReadableType type = readableMap.getType(key);
294+
map.put(key, convertValue(type, readableMap, key));
295+
}
296+
297+
return map;
298+
}
299+
300+
public static List<Object> convertReadableArrayToList(ReadableArray readableArray) {
301+
List<Object> list = new ArrayList<>();
302+
303+
for (int i = 0; i < readableArray.size(); i++) {
304+
ReadableType type = readableArray.getType(i);
305+
list.add(convertValue(type, readableArray, i));
306+
}
307+
308+
return list;
309+
}
310+
311+
private static Object convertValue(ReadableType type, ReadableMap map, String key) {
312+
switch (type) {
313+
case Null: return null;
314+
case Boolean: return map.getBoolean(key);
315+
case Number: return map.getDouble(key);
316+
case String: return map.getString(key);
317+
case Map: return convertReadableMapToMap(map.getMap(key));
318+
case Array: return convertReadableArrayToList(map.getArray(key));
319+
default: throw new IllegalArgumentException("Unknown type for key: " + key);
320+
}
321+
}
322+
323+
private static Object convertValue(ReadableType type, ReadableArray array, int index) {
324+
switch (type) {
325+
case Null: return null;
326+
case Boolean: return array.getBoolean(index);
327+
case Number: return array.getDouble(index);
328+
case String: return array.getString(index);
329+
case Map: return convertReadableMapToMap(array.getMap(index));
330+
case Array: return convertReadableArrayToList(array.getArray(index));
331+
default: throw new IllegalArgumentException("Unknown type for index: " + index);
332+
}
333+
}
334+
287335
public static HashMap<String, Object> convertPermissionToMap(boolean granted) {
288336
HashMap<String, Object> hash = new HashMap<>();
289337

examples/RNOneSignalTS/OSButtons.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ class OSButtons extends React.Component<Props> {
437437
OneSignal.User.trackEvent(`ReactNative-${platform}-noprops`);
438438
OneSignal.User.trackEvent(`ReactNative-${platform}`, {
439439
someNum: 123,
440+
someFloat: 3.14159,
440441
someString: 'abc',
441442
someBool: true,
442443
someObject: {
@@ -445,7 +446,8 @@ class OSButtons extends React.Component<Props> {
445446
def: '456',
446447
},
447448
},
448-
someArray: [1, 2, 3],
449+
someArray: [1, 2, 3, 4],
450+
someMixedArray: [1, '2', { abc: '123' }],
449451
someNull: null,
450452
});
451453
});

examples/RNOneSignalTS/OSDemo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class OSDemo extends React.Component<Props, State> {
3838

3939
async componentDidMount() {
4040
OneSignal.initialize(APP_ID);
41-
OneSignal.Debug.setLogLevel(LogLevel.None);
41+
OneSignal.Debug.setLogLevel(LogLevel.Verbose);
4242

4343
OneSignal.LiveActivities.setupDefault();
4444
// OneSignal.LiveActivities.setupDefault({

0 commit comments

Comments
 (0)