reactnative-plugin-appice 1.7.30 → 1.7.31

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.
File without changes
File without changes
@@ -94,7 +94,7 @@ dependencies {
94
94
  annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.3.1"
95
95
 
96
96
  //appice
97
- implementation "appice.io.android:sdk:2.6.23"
97
+ implementation "appice.io.android:sdk:2.6.26-release"
98
98
 
99
99
  //glide
100
100
  implementation "com.github.bumptech.glide:glide:4.11.0"
@@ -1,27 +1,212 @@
1
1
  package com.appice.react;
2
2
 
3
+ import android.content.Context;
4
+ import android.content.Intent;
5
+ import android.os.Bundle;
6
+
7
+ import androidx.annotation.NonNull;
8
+ import androidx.annotation.Nullable;
9
+
3
10
  import com.facebook.react.bridge.Arguments;
11
+ import com.facebook.react.bridge.ReactContext;
4
12
  import com.facebook.react.bridge.ReadableArray;
5
13
  import com.facebook.react.bridge.ReadableMap;
6
14
  import com.facebook.react.bridge.ReadableMapKeySetIterator;
7
15
  import com.facebook.react.bridge.ReadableType;
8
16
  import com.facebook.react.bridge.WritableArray;
9
17
  import com.facebook.react.bridge.WritableMap;
18
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
10
19
 
20
+ import java.util.ArrayDeque;
11
21
  import java.util.ArrayList;
22
+ import java.util.Deque;
12
23
  import java.util.HashMap;
13
24
  import java.util.Iterator;
14
25
  import java.util.Map;
26
+ import java.util.concurrent.atomic.AtomicBoolean;
15
27
 
16
28
  import org.json.JSONObject;
17
29
 
18
30
  import semusi.context.ui.appInbox.AppICEInboxMessage;
31
+ import semusi.context.utility.PushClickData;
19
32
  import semusi.model.campaign.Campaign;
20
33
  import semusi.model.user.User;
21
34
 
22
35
 
23
36
  public class AppICEUtils {
24
37
  private static final String TAG = "AppICEUtils";
38
+ static final Deque<Event> EVENT_QUEUE = new ArrayDeque<>();
39
+ static final AtomicBoolean IS_FLUSHING = new AtomicBoolean(false);
40
+
41
+ static class Event {
42
+ final String name;
43
+ final WritableMap params;
44
+
45
+ Event(String name, @Nullable WritableMap params) {
46
+ this.name = name;
47
+ this.params = params;
48
+ }
49
+ }
50
+
51
+ static void sendEventHelper(String eventName, @Nullable WritableMap params, ReactContext context) {
52
+ if (context == null || !context.hasActiveCatalystInstance()) {
53
+ synchronized (EVENT_QUEUE) {
54
+ WritableMap queued = null;
55
+ if (params != null) {
56
+ try {
57
+ queued = cloneReadableMap(params);
58
+ } catch (Exception ex) {
59
+ printLog(TAG, "sendEvent: failed to clone params for queue " + eventName + " - " + ex.getMessage());
60
+ queued = null;
61
+ }
62
+ }
63
+ EVENT_QUEUE.add(new Event(eventName, queued));
64
+ }
65
+ return;
66
+ }
67
+
68
+ WritableMap emitCopy = null;
69
+ if (params != null) {
70
+ try {
71
+ emitCopy = cloneReadableMap(params);
72
+ } catch (Exception ex) {
73
+ emitCopy = null;
74
+ }
75
+ }
76
+
77
+ try {
78
+ context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
79
+ .emit(eventName, emitCopy);
80
+ printLog(TAG, "Successfully emitted event: " + eventName);
81
+ } catch (Exception e) {
82
+ printLog(TAG, "emit failed for " + eventName + " - " + e.getMessage());
83
+ synchronized (EVENT_QUEUE) {
84
+ WritableMap queued = null;
85
+ if (params != null) {
86
+ try {
87
+ queued = cloneReadableMap(params);
88
+ } catch (Exception ex) {
89
+ queued = null;
90
+ }
91
+ }
92
+ EVENT_QUEUE.add(new Event(eventName, queued));
93
+ }
94
+ }
95
+ }
96
+
97
+ static void flushEventQueue(ReactContext reactContext) {
98
+ if (reactContext == null || !reactContext.hasActiveCatalystInstance()) {
99
+ return;
100
+ }
101
+
102
+ if (!IS_FLUSHING.compareAndSet(false, true)) {
103
+ return;
104
+ }
105
+
106
+ try {
107
+ synchronized (EVENT_QUEUE) {
108
+ int initialSize = EVENT_QUEUE.size();
109
+ while (!EVENT_QUEUE.isEmpty()) {
110
+ Event event = EVENT_QUEUE.poll();
111
+ try {
112
+ WritableMap toEmit = null;
113
+ if (event.params != null) {
114
+ try {
115
+ toEmit = cloneReadableMap(event.params);
116
+ } catch (Exception ex) {
117
+ toEmit = event.params;
118
+ }
119
+ }
120
+ reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
121
+ .emit(event.name, toEmit);
122
+ printLog(TAG, "Successfully flushed event: " + event.name + ". Remaining in queue: " + EVENT_QUEUE.size());
123
+ } catch (Exception e) {
124
+ EVENT_QUEUE.addFirst(event);
125
+ break;
126
+ }
127
+ }
128
+ }
129
+ } finally {
130
+ IS_FLUSHING.set(false);
131
+ }
132
+ }
133
+
134
+ public static WritableMap cloneReadableMap(@NonNull ReadableMap source) {
135
+ WritableMap result = Arguments.createMap();
136
+ ReadableMapKeySetIterator iterator = source.keySetIterator();
137
+ while (iterator.hasNextKey()) {
138
+ String key = iterator.nextKey();
139
+ ReadableType type = source.getType(key);
140
+ try {
141
+ switch (type) {
142
+ case String:
143
+ result.putString(key, source.getString(key));
144
+ break;
145
+ case Number:
146
+ result.putDouble(key, source.getDouble(key));
147
+ break;
148
+ case Boolean:
149
+ result.putBoolean(key, source.getBoolean(key));
150
+ break;
151
+ case Map:
152
+ ReadableMap nested = source.getMap(key);
153
+ if (nested != null) result.putMap(key, cloneReadableMap(nested));
154
+ else result.putNull(key);
155
+ break;
156
+ case Array:
157
+ ReadableArray arr = source.getArray(key);
158
+ if (arr != null) result.putArray(key, cloneReadableArray(arr));
159
+ else result.putNull(key);
160
+ break;
161
+ case Null:
162
+ default:
163
+ result.putNull(key);
164
+ break;
165
+ }
166
+ } catch (Exception ex) {
167
+ AppICEUtils.printLog(TAG, "cloneReadableMap: failed to copy key '" + key + "' - " + ex.getMessage());
168
+ }
169
+ }
170
+ return result;
171
+ }
172
+
173
+ public static WritableArray cloneReadableArray(@NonNull ReadableArray source) {
174
+ WritableArray result = Arguments.createArray();
175
+ for (int i = 0; i < source.size(); i++) {
176
+ try {
177
+ ReadableType t = source.getType(i);
178
+ switch (t) {
179
+ case String:
180
+ result.pushString(source.getString(i));
181
+ break;
182
+ case Number:
183
+ result.pushDouble(source.getDouble(i));
184
+ break;
185
+ case Boolean:
186
+ result.pushBoolean(source.getBoolean(i));
187
+ break;
188
+ case Map:
189
+ ReadableMap m = source.getMap(i);
190
+ if (m != null) result.pushMap(cloneReadableMap(m));
191
+ else result.pushNull();
192
+ break;
193
+ case Array:
194
+ ReadableArray a = source.getArray(i);
195
+ if (a != null) result.pushArray(cloneReadableArray(a));
196
+ else result.pushNull();
197
+ break;
198
+ case Null:
199
+ default:
200
+ result.pushNull();
201
+ break;
202
+ }
203
+ } catch (Exception ex) {
204
+ AppICEUtils.printLog(TAG, "cloneReadableArray: failed at index '" + i + "' - " + ex.getMessage());
205
+ result.pushNull();
206
+ }
207
+ }
208
+ return result;
209
+ }
25
210
 
26
211
  public static WritableMap convertClassToWritableMap(AppICEInboxMessage inboxMessage) {
27
212
  WritableMap inboxObject = Arguments.createMap();
@@ -272,4 +457,20 @@ public class AppICEUtils {
272
457
  System.out.println(TAG + ", " + message);
273
458
  }
274
459
 
460
+ public static boolean handleAppICEPayload(@NonNull Intent intent, Context context){
461
+ try {
462
+ if (intent.getExtras() != null){
463
+ Bundle bundle = intent.getExtras();
464
+ boolean isAppICEPush = bundle.getBoolean("ai_push", false);
465
+ if (isAppICEPush) {
466
+ CampaignCampsReceiver campsReceiver = new CampaignCampsReceiver();
467
+ campsReceiver.sendCallback(bundle, context);
468
+ intent.removeExtra("ai_push");
469
+ }
470
+ }
471
+ }catch (Throwable t){
472
+ printLog("PUSH", " exception in click "+t);
473
+ }
474
+ return false;
475
+ }
275
476
  }
@@ -1,5 +1,6 @@
1
1
  package com.appice.react;
2
2
 
3
+ import static com.appice.react.AppICEUtils.*;
3
4
  import static com.appice.react.AppICEUtils.arrayListStringFromReadableArray;
4
5
  import static com.appice.react.AppICEUtils.eventPropsFromReadableMap;
5
6
  import static com.appice.react.StringConstants.MEDIA_DATA;
@@ -37,18 +38,16 @@ import androidx.annotation.NonNull;
37
38
  import androidx.annotation.Nullable;
38
39
 
39
40
  import com.facebook.react.bridge.ReadableArray;
40
- import com.facebook.react.bridge.ReadableMapKeySetIterator;
41
41
  import com.facebook.react.bridge.WritableArray;
42
42
  import com.facebook.react.bridge.WritableMap;
43
- import com.facebook.react.modules.core.DeviceEventManagerModule;
43
+ import com.facebook.react.module.annotations.ReactModule;
44
44
 
45
- import org.json.JSONException;
46
45
  import org.json.JSONObject;
47
46
 
48
-
47
+ @ReactModule(name = AppIceReactPluginModule.NAME)
49
48
  public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
50
49
  private static ReactApplicationContext context = null;
51
- private static final String TAG = "AppIceReactPlugin";
50
+ public static final String NAME = "AppIceReactPlugin";
52
51
 
53
52
  public AppIceReactPluginModule(ReactApplicationContext reactContext) {
54
53
  super(reactContext);
@@ -58,7 +57,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
58
57
  @NonNull
59
58
  @Override
60
59
  public String getName() {
61
- return "AppIceReactPlugin";
60
+ return NAME;
62
61
  }
63
62
 
64
63
 
@@ -80,7 +79,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
80
79
  String region, String baseUrl, ReadableArray certs
81
80
  ) {
82
81
  Context context = getReactApplicationContext();
83
- AppICEUtils.printLog(TAG, "in startContext : appID : " + appID + ", appkey : " + appKey + ", apiKey : " + apiKey);
82
+ printLog(NAME, "in startContext : appID : " + appID + ", appkey : " + appKey + ", apiKey : " + apiKey);
84
83
  try {
85
84
  SdkConfig config = new SdkConfig();
86
85
  config.setAnalyticsTrackingAllowedState(true);
@@ -98,7 +97,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
98
97
  Api.startContext(context, config);
99
98
 
100
99
  } catch (Exception e) {
101
- AppICEUtils.printLog(TAG, "Exception in startContext : " + e);
100
+ printLog(NAME, "Exception in startContext : " + e);
102
101
  }
103
102
  }
104
103
 
@@ -115,29 +114,29 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
115
114
  receiverIntent.setClass(ctx, CampaignCampsReceiver.class);
116
115
  List<ResolveInfo> receivers = pm.queryBroadcastReceivers(receiverIntent, 0);
117
116
  if (receivers == null || receivers.size() <= 0) {
118
- AppICEUtils.printLog(TAG, "Missing Receiver entry in AndroidManifest : CampaignCampsReceiver");
117
+ printLog(NAME, "Missing Receiver entry in AndroidManifest : CampaignCampsReceiver");
119
118
  }
120
119
  Intent serviceIntent = new Intent();
121
120
  serviceIntent.setClass(ctx, NotificationEventService.class);
122
121
  ResolveInfo services = pm.resolveService(serviceIntent, 0);
123
122
  if (services == null) {
124
- AppICEUtils.printLog(TAG, "Missing Service entry in AndroidManifest : NotificationEventService");
123
+ printLog(NAME, "Missing Service entry in AndroidManifest : NotificationEventService");
125
124
  }
126
125
 
127
126
  ContextSdk sdk = new ContextSdk(ctx);
128
127
  if (sdk.getAppId() == null || sdk.getAppId().length() <= 0 || sdk.getAppId().trim().length() <= 0) {
129
- AppICEUtils.printLog(TAG, "Missing Meta-data entry : AppID");
128
+ printLog(NAME, "Missing Meta-data entry : AppID");
130
129
  }
131
130
 
132
131
  if (sdk.getAppKey() == null || sdk.getAppKey().length() <= 0 || sdk.getAppKey().trim().length() <= 0) {
133
- AppICEUtils.printLog(TAG, "Missing Meta-data entry : AppKey");
132
+ printLog(NAME, "Missing Meta-data entry : AppKey");
134
133
  }
135
134
 
136
135
  if (sdk.getApiKey() == null || sdk.getApiKey().length() <= 0 || sdk.getApiKey().trim().length() <= 0) {
137
- AppICEUtils.printLog(TAG, "Missing Meta-data entry : ApiKey");
136
+ printLog(NAME, "Missing Meta-data entry : ApiKey");
138
137
  }
139
138
  } catch (Exception e) {
140
- AppICEUtils.printLog(TAG, "validateIntegration: " + e.getMessage());
139
+ printLog(NAME, "validateIntegration: " + e.getMessage());
141
140
  }
142
141
  }
143
142
 
@@ -171,7 +170,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
171
170
  ContextSdk.tagEventObj(eventName, mapData, context);
172
171
  }
173
172
  } catch (Exception e) {
174
- AppICEUtils.printLog(TAG, "Exception in tagEvent : " + e);
173
+ printLog(NAME, "Exception in tagEvent : " + e);
175
174
  }
176
175
  }
177
176
 
@@ -183,7 +182,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
183
182
  ContextSdk.setCustomVariable(eventName, (String) value, context);
184
183
  }
185
184
  } catch (Exception e) {
186
- AppICEUtils.printLog(TAG, "Exception in customVar : " + e);
185
+ printLog(NAME, "Exception in customVar : " + e);
187
186
  }
188
187
  }
189
188
 
@@ -194,7 +193,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
194
193
  public void setUser(ReadableMap userDetails) {
195
194
  Context context = getReactApplicationContext();
196
195
 
197
- AppICEUtils.printLog(TAG, "setUser: " + userDetails);
196
+ printLog(NAME, "setUser called (userDetails present: " + (userDetails != null) + ")");
198
197
  HashMap<String, Object> map = eventPropsFromReadableMap(userDetails);
199
198
 
200
199
  if (map != null) {
@@ -208,7 +207,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
208
207
  }
209
208
  }
210
209
  } catch (Exception e) {
211
- AppICEUtils.printLog(TAG, "setUser: name issue " + e.getMessage());
210
+ printLog(NAME, "setUser: name issue " + e.getMessage());
212
211
  }
213
212
 
214
213
  try {
@@ -219,7 +218,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
219
218
  }
220
219
  }
221
220
  } catch (Exception e) {
222
- AppICEUtils.printLog(TAG, "setUser: phone issue " + e.getMessage());
221
+ printLog(NAME, "setUser: phone issue " + e.getMessage());
223
222
  }
224
223
 
225
224
  try {
@@ -230,7 +229,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
230
229
  }
231
230
  }
232
231
  } catch (Exception e) {
233
- AppICEUtils.printLog(TAG, "setUser: email issue " + e.getMessage());
232
+ printLog(NAME, "setUser: email issue " + e.getMessage());
234
233
  }
235
234
 
236
235
  try {
@@ -241,7 +240,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
241
240
  }
242
241
  }
243
242
  } catch (Exception e) {
244
- AppICEUtils.printLog(TAG, "setUser: age issue " + e.getMessage());
243
+ printLog(NAME, "setUser: age issue " + e.getMessage());
245
244
  }
246
245
 
247
246
  try {
@@ -252,7 +251,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
252
251
  }
253
252
  }
254
253
  } catch (Exception e) {
255
- AppICEUtils.printLog(TAG, "setUser: dob issue " + e.getMessage());
254
+ printLog(NAME, "setUser: dob issue " + e.getMessage());
256
255
  }
257
256
  try {
258
257
  if (map.containsKey(EnumConstants.APPICE_USER_EDUCATION_TYPE.getValue())) {
@@ -262,7 +261,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
262
261
  }
263
262
  }
264
263
  } catch (Exception e) {
265
- AppICEUtils.printLog(TAG, "setEducationType: edt issue " + e.getMessage());
264
+ printLog(NAME, "setEducationType: edt issue " + e.getMessage());
266
265
  }
267
266
 
268
267
 
@@ -274,7 +273,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
274
273
  }
275
274
  }
276
275
  } catch (Exception e) {
277
- AppICEUtils.printLog(TAG, "setUser: gender issue " + e.getMessage());
276
+ printLog(NAME, "setUser: gender issue " + e.getMessage());
278
277
  }
279
278
 
280
279
 
@@ -286,7 +285,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
286
285
  }
287
286
  }
288
287
  } catch (Exception e) {
289
- AppICEUtils.printLog(TAG, "setUser: setEmployed issue " + e.getMessage());
288
+ printLog(NAME, "setUser: setEmployed issue " + e.getMessage());
290
289
  }
291
290
 
292
291
  try {
@@ -297,7 +296,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
297
296
  }
298
297
  }
299
298
  } catch (Exception e) {
300
- AppICEUtils.printLog(TAG, "setUser: et issue " + e.getMessage());
299
+ printLog(NAME, "setUser: et issue " + e.getMessage());
301
300
  }
302
301
 
303
302
  try {
@@ -308,7 +307,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
308
307
  }
309
308
  }
310
309
  } catch (Exception e) {
311
- AppICEUtils.printLog(TAG, "setUser: married issue " + e.getMessage());
310
+ printLog(NAME, "setUser: married issue " + e.getMessage());
312
311
  }
313
312
  ContextSdk.setUser(user, context);
314
313
  } catch (Exception e) {
@@ -323,7 +322,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
323
322
  try {
324
323
  User user = ContextSdk.getUser(context);
325
324
  if (user != null) {
326
- userObject = AppICEUtils.convertUserClassToWritableMap(user);
325
+ userObject = convertUserClassToWritableMap(user);
327
326
  callback.invoke(userObject);
328
327
  }
329
328
  } catch (Throwable t) {
@@ -376,7 +375,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
376
375
 
377
376
 
378
377
  /**
379
- * To get Media URL from getMediaData
378
+ * To get Media URL from getMediaData
380
379
  * inboxMessage {AppICEInboxMessage as a ReadableMap}
381
380
  * mediaData customData
382
381
  * @callback callback will receive mediaUrl{string}
@@ -462,7 +461,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
462
461
  List<AppICEInboxMessage> appICEInboxMessage = ContextSdk.getInboxMessage(type, usersId, context);
463
462
  for (int i = 0; i < appICEInboxMessage.size(); i++) {
464
463
  AppICEInboxMessage inboxMessage = appICEInboxMessage.get(i);
465
- writableArray.pushMap(AppICEUtils.convertClassToWritableMap(inboxMessage));
464
+ writableArray.pushMap(convertClassToWritableMap(inboxMessage));
466
465
  }
467
466
  }
468
467
  callback.invoke(writableArray);
@@ -472,10 +471,10 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
472
471
  }
473
472
  /**
474
473
  * This method is to get user details from the given user id
475
- * this method takes user id in form of Array and return User class objects and return them
474
+ * this method takes user id in form of Array and return User class objects and return them
476
475
  * from callback
477
476
  * @param userIds An array of user IDs
478
- * @param callback will return instance of User class
477
+ * @param callback will return instance of User class
479
478
  */
480
479
  @ReactMethod
481
480
  public void getUserForIds(ReadableArray userIds, Callback callback) {
@@ -492,7 +491,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
492
491
  for (int i = 0; i < users.size(); i++) {
493
492
  User user = users.get(i);
494
493
  // conver native object to WritableMap
495
- writableArray.pushMap(AppICEUtils.convertUserClassToWritableMap(user));
494
+ writableArray.pushMap(convertUserClassToWritableMap(user));
496
495
  }
497
496
  // return callback
498
497
  callback.invoke(writableArray);
@@ -563,7 +562,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
563
562
  Context context = getReactApplicationContext();
564
563
  try {
565
564
  AppICEInboxMessage inboxMessage = ContextSdk.getInboxMessageForId(messageId, userId, context);
566
- callback.invoke(AppICEUtils.convertClassToWritableMap(inboxMessage));
565
+ callback.invoke(convertClassToWritableMap(inboxMessage));
567
566
  } catch (Throwable e) {
568
567
  callback.invoke(e.getMessage());
569
568
  }
@@ -638,7 +637,10 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
638
637
  }
639
638
  @ReactMethod
640
639
  public void isDeviceReady(Boolean flag){
641
-
640
+ if (flag){
641
+ ReactApplicationContext ctx = getReactApplicationContext();
642
+ flushEventQueue(ctx);
643
+ }
642
644
  }
643
645
 
644
646
  @Nullable
@@ -685,15 +687,12 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
685
687
 
686
688
  //=====================================
687
689
  public static void sendEvent(String eventName, @Nullable WritableMap params) {
688
- try {
689
- context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);
690
- } catch (RuntimeException e) {
691
- AppICEUtils.printLog(TAG, "java.lang.RuntimeException: Trying to invoke JS before CatalystInstance has been set!" + e);
692
- }
690
+ AppICEUtils.sendEventHelper(eventName, params, context);
693
691
  }
692
+
694
693
  private static AppICEInboxMessage getMediaPreProcessing(ReadableMap inboxMessage,Context context) {
695
694
  AppICEInboxMessage appICEInboxMessage = null;
696
- JSONObject inboxJSON = AppICEUtils.toJSONObject(inboxMessage);
695
+ JSONObject inboxJSON = toJSONObject(inboxMessage);
697
696
  if (inboxJSON != null && inboxJSON.length()>0) {
698
697
  appICEInboxMessage = AppICEInboxMessage.getAppICEInboxMessage(inboxJSON.toString(), context);
699
698
  if (appICEInboxMessage != null) {
@@ -710,7 +709,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
710
709
  switch (type) {
711
710
  case "mediaType": {
712
711
  if (mediaData != null){
713
- String mediaType = appICEInboxMessage.getMediaType(AppICEUtils.eventPropsFromReadableMap(mediaData));
712
+ String mediaType = appICEInboxMessage.getMediaType(eventPropsFromReadableMap(mediaData));
714
713
  callback.invoke(mediaType, null);
715
714
  }else
716
715
  callback.invoke(null, StringConstants.FAILED_RETRIVE_MEDIA_DATA);
@@ -719,7 +718,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
719
718
 
720
719
  case "mediaUrl": {
721
720
  if (mediaData != null) {
722
- String mediaUrl = appICEInboxMessage.getMediaUrl(AppICEUtils.eventPropsFromReadableMap(mediaData));
721
+ String mediaUrl = appICEInboxMessage.getMediaUrl(eventPropsFromReadableMap(mediaData));
723
722
  callback.invoke(mediaUrl, null);
724
723
  }else
725
724
  callback.invoke(null, StringConstants.FAILED_RETRIVE_MEDIA_DATA);
@@ -728,7 +727,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
728
727
 
729
728
  case "mediaThumbnail": {
730
729
  if (mediaData != null) {
731
- String mediaThumbnail = appICEInboxMessage.getMediaThumbnail(AppICEUtils.eventPropsFromReadableMap(mediaData));
730
+ String mediaThumbnail = appICEInboxMessage.getMediaThumbnail(eventPropsFromReadableMap(mediaData));
732
731
  callback.invoke(mediaThumbnail, null);
733
732
  }else
734
733
  callback.invoke(null, StringConstants.FAILED_RETRIVE_MEDIA_DATA);
@@ -739,7 +738,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
739
738
  if (mediayKey != null) {
740
739
  Map<String, Object> map = appICEInboxMessage.getMediaData(mediayKey);
741
740
  if (map != null) {
742
- callback.invoke(AppICEUtils.toWritableMap(map), null);
741
+ callback.invoke(toWritableMap(map), null);
743
742
  } else {
744
743
  callback.invoke(null, StringConstants.FAILED_RETRIVE_MEDIA_DATA);
745
744
  }
@@ -761,7 +760,7 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
761
760
  List<Campaign> campaigns = ContextSdk.getCampaigns(type, context);
762
761
  for (int i = 0; i < campaigns.size(); i++) {
763
762
  Campaign campaign = campaigns.get(i);
764
- writableArray.pushMap(AppICEUtils.convertClassToWritableMap(campaign));
763
+ writableArray.pushMap(convertClassToWritableMap(campaign));
765
764
  }
766
765
  callback.invoke(writableArray);
767
766
  }
@@ -774,6 +773,33 @@ public class AppIceReactPluginModule extends ReactContextBaseJavaModule {
774
773
  public void getCampaignById(String cmpId,Callback callback) {
775
774
  Context context = getReactApplicationContext();
776
775
  Campaign campaign = ContextSdk.getCampaignById(cmpId, context);
777
- callback.invoke(AppICEUtils.convertClassToWritableMap(campaign));
776
+ callback.invoke(convertClassToWritableMap(campaign));
777
+ }
778
+
779
+ //==============================
780
+ // LANGUAGE SETTING
781
+ //==============================
782
+ @ReactMethod
783
+ public void setAppLanguage(String language) {
784
+ Context context = getReactApplicationContext();
785
+ ContextSdk.setAppLanguage(language, context);
786
+ }
787
+
788
+ @ReactMethod
789
+ public void subscribeAppLanguage(String language) {
790
+ Context context = getReactApplicationContext();
791
+ ContextSdk.subscribeAppLang(language, context);
792
+ }
793
+
794
+ @ReactMethod
795
+ public void setDeviceLanguage(String language) {
796
+ Context context = getReactApplicationContext();
797
+ ContextSdk.setDeviceLanguage(language, context);
798
+ }
799
+
800
+ @ReactMethod
801
+ public void subscribeDeviceLanguage(String language) {
802
+ Context context = getReactApplicationContext();
803
+ ContextSdk.subscribeDeviceLang(language, context);
778
804
  }
779
805
  }