1 | import * as AndroidUtils from './android';
|
2 | import { platformCheck } from './platform-check';
|
3 | import { numberHasDecimals, numberIs64Bit } from './types';
|
4 | export function dataDeserialize(nativeData) {
|
5 | if (nativeData === null || typeof nativeData !== 'object') {
|
6 | return nativeData;
|
7 | }
|
8 | let store;
|
9 | switch (nativeData.getClass().getName()) {
|
10 | case 'java.lang.String': {
|
11 | return String(nativeData);
|
12 | }
|
13 | case 'java.lang.Boolean': {
|
14 | return String(nativeData) === 'true';
|
15 | }
|
16 | case 'java.lang.Float':
|
17 | case 'java.lang.Integer':
|
18 | case 'java.lang.Long':
|
19 | case 'java.lang.Double':
|
20 | case 'java.lang.Short': {
|
21 | return Number(nativeData);
|
22 | }
|
23 | case 'org.json.JSONArray': {
|
24 | store = [];
|
25 | for (let j = 0; j < nativeData.length(); j++) {
|
26 | store[j] = dataDeserialize(nativeData.get(j));
|
27 | }
|
28 | break;
|
29 | }
|
30 | case 'org.json.JSONObject': {
|
31 | store = {};
|
32 | const i = nativeData.keys();
|
33 | let key;
|
34 | while (i.hasNext()) {
|
35 | key = i.next();
|
36 | store[key] = dataDeserialize(nativeData.get(key));
|
37 | }
|
38 | break;
|
39 | }
|
40 | case 'androidx.collection.SimpleArrayMap': {
|
41 | const count = nativeData.size();
|
42 | for (let l = 0; l < count; l++) {
|
43 | const key = nativeData.keyAt(l);
|
44 | store[key] = dataDeserialize(nativeData.get(key));
|
45 | }
|
46 | break;
|
47 | }
|
48 | case 'androidx.collection.ArrayMap':
|
49 | case 'android.os.Bundle':
|
50 | case 'java.util.HashMap':
|
51 | case 'java.util.Map': {
|
52 | store = {};
|
53 | const keys = nativeData.keySet().toArray();
|
54 | for (let k = 0; k < keys.length; k++) {
|
55 | const key = keys[k];
|
56 | store[key] = dataDeserialize(nativeData.get(key));
|
57 | }
|
58 | break;
|
59 | }
|
60 | default:
|
61 | if (typeof nativeData === 'object' && nativeData instanceof java.util.List) {
|
62 | const array = [];
|
63 | const size = nativeData.size();
|
64 | for (let i = 0, n = size; i < n; i++) {
|
65 | array[i] = dataDeserialize(nativeData.get(i));
|
66 | }
|
67 | store = array;
|
68 | }
|
69 | else {
|
70 | store = null;
|
71 | }
|
72 | break;
|
73 | }
|
74 | return store;
|
75 | }
|
76 | export function dataSerialize(data, wrapPrimitives) {
|
77 | let store;
|
78 | switch (typeof data) {
|
79 | case 'string':
|
80 | case 'boolean': {
|
81 | if (wrapPrimitives) {
|
82 | if (typeof data === 'string') {
|
83 | return new java.lang.String(data);
|
84 | }
|
85 | return new java.lang.Boolean(data);
|
86 | }
|
87 | return data;
|
88 | }
|
89 | case 'number': {
|
90 | const hasDecimals = numberHasDecimals(data);
|
91 | if (numberIs64Bit(data)) {
|
92 | if (hasDecimals) {
|
93 | return java.lang.Double.valueOf(data);
|
94 | }
|
95 | else {
|
96 | return java.lang.Long.valueOf(data);
|
97 | }
|
98 | }
|
99 | else {
|
100 | if (hasDecimals) {
|
101 | return java.lang.Float.valueOf(data);
|
102 | }
|
103 | else {
|
104 | return java.lang.Integer.valueOf(data);
|
105 | }
|
106 | }
|
107 | }
|
108 | case 'object': {
|
109 | if (!data) {
|
110 | return null;
|
111 | }
|
112 | if (data instanceof Date) {
|
113 | return new java.util.Date(data.getTime());
|
114 | }
|
115 | if (Array.isArray(data)) {
|
116 | store = new java.util.ArrayList();
|
117 | data.forEach((item) => store.add(dataSerialize(item, wrapPrimitives)));
|
118 | return store;
|
119 | }
|
120 | if (data.native) {
|
121 | return data.native;
|
122 | }
|
123 | store = new java.util.HashMap();
|
124 | Object.keys(data).forEach((key) => store.put(key, dataSerialize(data[key], wrapPrimitives)));
|
125 | return store;
|
126 | }
|
127 | default:
|
128 | return null;
|
129 | }
|
130 | }
|
131 | export var android = AndroidUtils;
|
132 |
|
133 |
|
134 |
|
135 | export var ad = AndroidUtils;
|
136 |
|
137 | export const iOSNativeHelper = platformCheck('Utils.iOSNativeHelper');
|
138 | export const ios = platformCheck('Utils.ios');
|
139 |
|
\ | No newline at end of file |