Skip to content

Commit 93c2426

Browse files
committed
Add tags to IAM
* Add OSInAppMessageTag class * Add send Tags when available * Add remove Tags when available * Add test for new functionality
1 parent 93aeeb1 commit 93c2426

File tree

10 files changed

+258
-50
lines changed

10 files changed

+258
-50
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/OSInAppMessageAction.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ public class OSInAppMessageAction {
2121
private static final String CLICK_URL = "click_url";
2222
private static final String FIRST_CLICK = "first_click";
2323
private static final String CLOSES_MESSAGE = "closes_message";
24+
//TODO when backend is ready check if key match
2425
private static final String OUTCOMES = "outcomes";
26+
//TODO when backend is ready check if key match
27+
private static final String TAGS = "tags";
2528

2629
/**
2730
* UUID assigned by OneSignal for internal use.
@@ -54,6 +57,9 @@ public class OSInAppMessageAction {
5457
@NonNull
5558
public List<OSInAppMessageOutcome> outcomes = new ArrayList<>();
5659

60+
/** Tags for action */
61+
public OSInAppMessageTag tags;
62+
5763
/**
5864
* Determines if this was the first action taken on the in app message
5965
*/
@@ -80,6 +86,9 @@ public class OSInAppMessageAction {
8086
outcomes.add(new OSInAppMessageOutcome((JSONObject) outcomesJsonArray.get(i)));
8187
}
8288
}
89+
90+
if (json.has(TAGS))
91+
tags = new OSInAppMessageTag(json.getJSONObject(TAGS));
8392
}
8493

8594
public JSONObject toJSONObject() {
@@ -95,6 +104,9 @@ public JSONObject toJSONObject() {
95104
outcomesJson.put(outcome.toJSONObject());
96105

97106
mainObj.put(OUTCOMES, outcomesJson);
107+
108+
if (tags != null)
109+
mainObj.put(TAGS, tags.toJSONObject());
98110
// Omitted for now until necessary
99111
// if (urlTarget != null)
100112
// mainObj.put("url_target", urlTarget.toJSONObject());

OneSignalSDK/onesignal/src/main/java/com/onesignal/OSInAppMessageController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ void onMessageActionOccurredOnMessage(@NonNull final OSInAppMessage message, @No
274274
firePublicClickHandler(action);
275275
fireClickAction(action);
276276
fireRESTCallForClick(message, action);
277+
fireTagCallForClick(action);
277278
fireOutcomesForClick(action.outcomes);
278279
}
279280

@@ -301,6 +302,17 @@ private void fireOutcomesForClick(@NonNull final List<OSInAppMessageOutcome> out
301302
}
302303
}
303304

305+
private void fireTagCallForClick(@NonNull final OSInAppMessageAction action) {
306+
if (action.tags != null) {
307+
OSInAppMessageTag tags = action.tags;
308+
309+
if (tags.getTagsToAdd() != null)
310+
OneSignal.sendTags(tags.getTagsToAdd());
311+
if (tags.getTagsToRemove() != null)
312+
OneSignal.deleteTags(tags.getTagsToRemove(), null);
313+
}
314+
}
315+
304316
private void firePublicClickHandler(@NonNull final OSInAppMessageAction action) {
305317
if (OneSignal.mInitBuilder.mInAppMessageClickHandler == null)
306318
return;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.onesignal;
2+
3+
import android.support.annotation.NonNull;
4+
5+
import org.json.JSONArray;
6+
import org.json.JSONException;
7+
import org.json.JSONObject;
8+
9+
public class OSInAppMessageTag {
10+
11+
//TODO when backend is ready check if key match
12+
private static final String ADD_TAGS = "adds";
13+
//TODO when backend is ready check if key match
14+
private static final String REMOVE_TAGS = "removes";
15+
16+
private JSONObject tagsToAdd;
17+
private JSONArray tagsToRemove;
18+
19+
OSInAppMessageTag(@NonNull JSONObject json) throws JSONException {
20+
tagsToAdd = json.has(ADD_TAGS) ? json.getJSONObject(ADD_TAGS) : null;
21+
tagsToRemove = json.has(REMOVE_TAGS) ? json.getJSONArray(REMOVE_TAGS) : null;
22+
}
23+
24+
public JSONObject toJSONObject() {
25+
JSONObject mainObj = new JSONObject();
26+
try {
27+
if (tagsToAdd != null)
28+
mainObj.put(ADD_TAGS, tagsToAdd);
29+
if (tagsToRemove != null)
30+
mainObj.put(REMOVE_TAGS, tagsToRemove);
31+
} catch (JSONException e) {
32+
e.printStackTrace();
33+
}
34+
35+
return mainObj;
36+
}
37+
38+
public JSONObject getTagsToAdd() {
39+
return tagsToAdd;
40+
}
41+
42+
public void setTagsToAdd(JSONObject tagsToAdd) {
43+
this.tagsToAdd = tagsToAdd;
44+
}
45+
46+
public JSONArray getTagsToRemove() {
47+
return tagsToRemove;
48+
}
49+
50+
public void setTagsToRemove(JSONArray tagsToRemove) {
51+
this.tagsToRemove = tagsToRemove;
52+
}
53+
}

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1858,13 +1858,20 @@ public static void deleteTags(String jsonArrayString) {
18581858
}
18591859

18601860
public static void deleteTags(String jsonArrayString, ChangeTagsUpdateHandler handler) {
1861+
try {
1862+
deleteTags(new JSONArray(jsonArrayString), handler);
1863+
} catch (Throwable t) {
1864+
Log(LOG_LEVEL.ERROR, "Failed to generate JSON for deleteTags.", t);
1865+
}
1866+
}
1867+
1868+
public static void deleteTags(JSONArray jsonArray, ChangeTagsUpdateHandler handler) {
18611869
//if applicable, check if the user provided privacy consent
18621870
if (shouldLogUserPrivacyConsentErrorMessageForMethodName("deleteTags()"))
18631871
return;
18641872

18651873
try {
18661874
JSONObject jsonTags = new JSONObject();
1867-
JSONArray jsonArray = new JSONArray(jsonArrayString);
18681875

18691876
for (int i = 0; i < jsonArray.length(); i++)
18701877
jsonTags.put(jsonArray.getString(i), "");

OneSignalSDK/onesignal/src/main/java/com/onesignal/UserStateSynchronizer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,6 @@ boolean getSyncAsNewSession() {
458458
return getUserStateForModification().dependValues.optBoolean("session" );
459459
}
460460

461-
462461
void sendTags(JSONObject tags, @Nullable ChangeTagsUpdateHandler handler) {
463462
if (handler != null)
464463
this.sendTagsHandlers.add(handler);

OneSignalSDK/unittest/src/test/java/com/onesignal/OneSignalPackagePrivateHelper.java

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import static org.robolectric.Shadows.shadowOf;
2525

2626
public class OneSignalPackagePrivateHelper {
27+
public static final String IN_APP_MESSAGES_JSON_KEY = com.onesignal.OSInAppMessageController.IN_APP_MESSAGES_JSON_KEY;
2728

2829
private static abstract class RunnableArg<T> {
2930
abstract void run(T object) throws Exception;
@@ -461,6 +462,14 @@ public static ArrayList<com.onesignal.OSInAppMessage> getInAppMessageDisplayQueu
461462
return com.onesignal.OSInAppMessageController.getController().getInAppMessageDisplayQueue();
462463
}
463464

465+
public static void onMessageActionOccurredOnMessage(@NonNull final com.onesignal.OSInAppMessage message, @NonNull final JSONObject actionJson) throws JSONException {
466+
com.onesignal.OSInAppMessageController.getController().onMessageActionOccurredOnMessage(message, actionJson);
467+
}
468+
469+
public static void onMessageWasShown(@NonNull com.onesignal.OSInAppMessage message) {
470+
com.onesignal.OSInAppMessageController.getController().onMessageWasShown(message);
471+
}
472+
464473
public static List<OSTestInAppMessage> getRedisplayInAppMessages() {
465474
List<OSInAppMessage> messages = com.onesignal.OSInAppMessageController.getController().getRedisplayedInAppMessages();
466475
List<OSTestInAppMessage> testMessages = new ArrayList<>();
@@ -478,29 +487,6 @@ public static List<OSTestInAppMessage> getRedisplayInAppMessages() {
478487
return testMessages;
479488
}
480489

481-
public static class OSInAppMessageController {
482-
public static final String IN_APP_MESSAGES_JSON_KEY = com.onesignal.OSInAppMessageController.IN_APP_MESSAGES_JSON_KEY;
483-
private static OSInAppMessageController sharedInstance;
484-
485-
OSInAppMessageController() {
486-
}
487-
488-
public static OSInAppMessageController getController() {
489-
if (sharedInstance == null)
490-
sharedInstance = new OSInAppMessageController();
491-
492-
return sharedInstance;
493-
}
494-
495-
public void onMessageActionOccurredOnMessage(@NonNull final com.onesignal.OSInAppMessage message, @NonNull final JSONObject actionJson) throws JSONException {
496-
com.onesignal.OSInAppMessageController.getController().onMessageActionOccurredOnMessage(message, actionJson);
497-
}
498-
499-
public void onMessageWasShown(@NonNull com.onesignal.OSInAppMessage message) {
500-
com.onesignal.OSInAppMessageController.getController().onMessageWasShown(message);
501-
}
502-
}
503-
504490
public static boolean hasConfigChangeFlag(Activity activity, int configChangeFlag) {
505491
return OSUtils.hasConfigChangeFlag(activity, configChangeFlag);
506492
}
@@ -527,5 +513,8 @@ protected WebViewManager(@NonNull com.onesignal.OSInAppMessage message, @NonNull
527513
}
528514

529515

530-
public static class JSONUtils extends com.onesignal.JSONUtils {}
516+
public static class JSONUtils extends com.onesignal.JSONUtils {
517+
518+
519+
}
531520
}

OneSignalSDK/unittest/src/test/java/com/onesignal/StaticResetHelper.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ public boolean onOtherField(Field field) throws Exception {
5454
return false;
5555
}
5656
}));
57-
classes.add(new ClassState(OneSignalPackagePrivateHelper.OSInAppMessageController.class, null));
5857
classes.add(new ClassState(FocusTimeController.class, null));
5958
classes.add(new ClassState(OSSessionManager.class, null));
6059
classes.add(new ClassState(MockSessionManager.class, null));

0 commit comments

Comments
 (0)