Skip to content

Commit 4c32a65

Browse files
committed
on_session call logic changed to 30 sec out of app time.
1 parent 1285c11 commit 4c32a65

File tree

9 files changed

+216
-86
lines changed

9 files changed

+216
-86
lines changed

OneSignalSDK/app/src/main/java/com/onesignal/example/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ protected void onCreate(Bundle savedInstanceState) {
7373
// .setNotificationOpenedHandler(new ExampleNotificationOpenedHandler())
7474
// .init();
7575

76-
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplay.InAppAlert);
76+
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplayOption.InAppAlert);
7777
OneSignal.sendTag("test3", "test7");
7878
//OneSignal.setSubscription(false);
7979

OneSignalSDK/app/src/test/java/com/onesignal/ShadowOSUtils.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@
55
@Implements(OSUtils.class)
66
public class ShadowOSUtils {
77
public static int deviceType = 1;
8+
public static String carrierName = "test1";
89

910
public int getDeviceType() {
1011
return deviceType;
1112
}
13+
14+
public String getCarrierName() {
15+
return carrierName;
16+
}
1217
}

OneSignalSDK/app/src/test/java/com/onesignal/ShadowOneSignalRestClient.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ static void putSync(String url, JSONObject jsonBody, OneSignalRestClient.Respons
113113
networkCallCount++;
114114
lastPost = jsonBody;
115115

116-
System.out.println("lastPost:jsonBody: " + lastPost.toString());
116+
System.out.println("putSync:lastPost:jsonBody: " + lastPost.toString());
117117

118118
doInterruptibleDelay();
119119
if (doFail(responseHandler)) return;
@@ -131,14 +131,16 @@ static void put(String url, JSONObject jsonBody, OneSignalRestClient.ResponseHan
131131
doInterruptibleDelay();
132132
if (doFail(responseHandler)) return;
133133

134-
System.out.println("lastPost:jsonBody: " + lastPost.toString());
134+
System.out.println("put:lastPost:jsonBody: " + lastPost.toString());
135135

136136
responseHandler.onSuccess("{}");
137137

138138
safeInterrupt();
139139
}
140140

141141
static void getSync(final String url, final OneSignalRestClient.ResponseHandler responseHandler) {
142+
System.out.println("getSync: " + url);
143+
142144
lastUrl = url;
143145
networkCallCount++;
144146
doInterruptibleDelay();

OneSignalSDK/app/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java

Lines changed: 105 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public void testInitFromApplicationContext() throws Exception {
183183
Assert.assertNotNull(ShadowOneSignalRestClient.lastPost);
184184

185185
ShadowOneSignalRestClient.lastPost = null;
186-
StaticResetHelper.restSetStaticFields();
186+
restartAppAndElapseTimeToNextSession();
187187

188188
// Restart app, should not send onSession automatically
189189
OneSignal.init(RuntimeEnvironment.application, "123456789", ONESIGNAL_APP_ID);
@@ -196,6 +196,87 @@ public void testInitFromApplicationContext() throws Exception {
196196
Assert.assertNotNull(ShadowOneSignalRestClient.lastPost);
197197
}
198198

199+
@Test
200+
public void testOnSessionCalledOnlyOncePer30Sec() throws Exception {
201+
// Will call create
202+
ShadowSystemClock.setCurrentTimeMillis(60 * 60 * 1000);
203+
OneSignalInit();
204+
threadAndTaskWait();
205+
blankActivityController.resume();
206+
Assert.assertEquals("players", ShadowOneSignalRestClient.lastUrl);
207+
208+
// Shouldn't call on_session if just resuming app with a short delay
209+
blankActivityController.pause();
210+
threadAndTaskWait();
211+
ShadowOneSignalRestClient.lastUrl = null;
212+
blankActivityController.resume();
213+
threadAndTaskWait();
214+
Assert.assertNull(ShadowOneSignalRestClient.lastUrl);
215+
216+
// Or when restarting the app quickly.
217+
ShadowOneSignalRestClient.lastPost = null;
218+
StaticResetHelper.restSetStaticFields();
219+
OneSignalInit();
220+
threadAndTaskWait();
221+
blankActivityController.resume();
222+
threadAndTaskWait();
223+
Assert.assertNull(ShadowOneSignalRestClient.lastUrl);
224+
225+
blankActivityController.pause();
226+
threadAndTaskWait();
227+
ShadowSystemClock.setCurrentTimeMillis(121 * 60 * 1000);
228+
ShadowOneSignalRestClient.lastUrl = null;
229+
blankActivityController.resume();
230+
threadAndTaskWait();
231+
Assert.assertTrue(ShadowOneSignalRestClient.lastUrl.matches("players/.*/on_session"));
232+
Assert.assertEquals("{\"app_id\":\"b2f7f966-d8cc-11e4-bed1-df8f05be55ba\"}", ShadowOneSignalRestClient.lastPost.toString());
233+
}
234+
235+
@Test
236+
public void testPutStillCalledOnChanges() throws Exception {
237+
// Will call create
238+
ShadowSystemClock.setCurrentTimeMillis(60 * 60 * 1000);
239+
OneSignalInit();
240+
threadAndTaskWait();
241+
blankActivityController.resume();
242+
Assert.assertEquals("players", ShadowOneSignalRestClient.lastUrl);
243+
244+
// Shouldn't call on_session if just resuming app with a short delay
245+
blankActivityController.pause();
246+
threadAndTaskWait();
247+
ShadowOneSignalRestClient.lastUrl = null;
248+
blankActivityController.resume();
249+
threadAndTaskWait();
250+
Assert.assertNull(ShadowOneSignalRestClient.lastUrl);
251+
Assert.assertEquals(1, ShadowOneSignalRestClient.networkCallCount);
252+
253+
ShadowOSUtils.carrierName = "test2";
254+
255+
// Should make PUT call with changes on app restart
256+
ShadowOneSignalRestClient.lastPost = null;
257+
StaticResetHelper.restSetStaticFields();
258+
OneSignalInit();
259+
threadAndTaskWait();
260+
blankActivityController.resume();
261+
threadAndTaskWait();
262+
263+
Assert.assertEquals(2, ShadowOneSignalRestClient.networkCallCount);
264+
GetIdsAvailable();
265+
Assert.assertEquals("players/" + callBackUseId, ShadowOneSignalRestClient.lastUrl);
266+
Assert.assertEquals("{\"carrier\":\"test2\",\"app_id\":\"b2f7f966-d8cc-11e4-bed1-df8f05be55ba\"}", ShadowOneSignalRestClient.lastPost.toString());
267+
}
268+
269+
270+
@Test
271+
public void testPutCallsMadeWhenUserStateChangesOnAppResume() throws Exception {
272+
// Will call create
273+
ShadowSystemClock.setCurrentTimeMillis(60 * 60 * 1000);
274+
OneSignalInit();
275+
threadAndTaskWait();
276+
blankActivityController.resume();
277+
Assert.assertEquals("players", ShadowOneSignalRestClient.lastUrl);
278+
}
279+
199280
@Test
200281
public void testOpenFromNotificationWhenAppIsDead() throws Exception {
201282
OneSignal.handleNotificationOpen(blankActivity, new JSONArray("[{ \"alert\": \"Robo test message\", \"custom\": { \"i\": \"UUID\" } }]"), false);
@@ -325,7 +406,7 @@ public void notificationReceived(OSNotification notification) {
325406
});
326407
threadAndTaskWait();
327408

328-
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplay.Notification);
409+
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification);
329410

330411
Bundle bundle = getBaseNotifBundle();
331412
boolean processResult = GcmBroadcastReceiver_processBundle(blankActivity, bundle);
@@ -340,7 +421,7 @@ public void notificationReceived(OSNotification notification) {
340421
// Don't fire for duplicates
341422
notificationOpenedMessage = null;
342423
notificationReceivedBody = null;
343-
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplay.None);
424+
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplayOption.None);
344425
Assert.assertNull(notificationOpenedMessage);
345426

346427
GcmBroadcastReceiver_processBundle(blankActivity, bundle);
@@ -349,7 +430,7 @@ public void notificationReceived(OSNotification notification) {
349430
Assert.assertEquals(null, notificationReceivedBody);
350431

351432
// Test that only NotificationReceivedHandler fires
352-
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplay.None);
433+
OneSignal.setInFocusDisplaying(OneSignal.OSInFocusDisplayOption.None);
353434
bundle = getBaseNotifBundle("UUID2");
354435
notificationOpenedMessage = null;
355436
notificationReceivedBody = null;
@@ -424,7 +505,7 @@ public void testSetSubscriptionShouldNotOverrideSubscribeError() throws Exceptio
424505
Assert.assertNull(ShadowOneSignalRestClient.lastPost);
425506

426507
// Restart app - Should omit notification_types
427-
StaticResetHelper.restSetStaticFields();
508+
restartAppAndElapseTimeToNextSession();
428509
OneSignalInitWithBadProjectNum();
429510
threadAndTaskWait();
430511
Assert.assertFalse(ShadowOneSignalRestClient.lastPost.has("notification_types"));
@@ -437,7 +518,7 @@ public void shouldNotResetSubscriptionOnSession() throws Exception {
437518
threadAndTaskWait();
438519
Assert.assertEquals(-2, ShadowOneSignalRestClient.lastPost.getInt("notification_types"));
439520

440-
StaticResetHelper.restSetStaticFields();
521+
restartAppAndElapseTimeToNextSession();
441522

442523
OneSignalInit();
443524
threadAndTaskWait();
@@ -455,13 +536,13 @@ public void shouldSetSubscriptionCorrectlyEvenAfterFirstOneSignalRestInitFail()
455536

456537

457538
// Restart app - Should send unsubscribe with create player call.
458-
StaticResetHelper.restSetStaticFields();
539+
restartAppAndElapseTimeToNextSession();
459540
OneSignalInit();
460541
threadAndTaskWait();
461542
Assert.assertEquals(-2, ShadowOneSignalRestClient.lastPost.getInt("notification_types"));
462543

463544
// Restart app again - Value synced last time so don't send again.
464-
StaticResetHelper.restSetStaticFields();
545+
restartAppAndElapseTimeToNextSession();
465546
OneSignalInit();
466547
threadAndTaskWait();
467548
Assert.assertFalse(ShadowOneSignalRestClient.lastPost.has("notification_types"));
@@ -544,7 +625,7 @@ public void testGCMTimeOutThenSuccessesLater() throws Exception {
544625

545626
// Cold restart app, should not send the same identifier again.
546627
ShadowOneSignalRestClient.lastPost = null;
547-
StaticResetHelper.restSetStaticFields();
628+
restartAppAndElapseTimeToNextSession();
548629
OneSignalInit();
549630
threadAndTaskWait();
550631
Assert.assertFalse(ShadowOneSignalRestClient.lastPost.has("identifier"));
@@ -573,7 +654,7 @@ public void testUserDeletedFromServer() throws Exception {
573654
ShadowOneSignalRestClient.lastPost = null;
574655

575656
// Developer deletes user, cold boots apps should resend all fields
576-
StaticResetHelper.restSetStaticFields();
657+
restartAppAndElapseTimeToNextSession();
577658
ShadowOneSignalRestClient.failNext = true;
578659
ShadowOneSignalRestClient.failResponse = "{\"errors\":[\"Device type is not a valid device_type. Valid options are: 0 = iOS, 1 = Android, 2 = Amazon, 3 = WindowsPhone(MPNS), 4 = ChromeApp, 5 = ChromeWebsite, 6 = WindowsPhone(WNS), 7 = Safari(APNS), 8 = Firefox\"]}";
579660
OneSignalInit();
@@ -1044,22 +1125,27 @@ public void testAppl() throws Exception {
10441125
Assert.assertFalse(toSyncValues.has(baseKey + "_a"));
10451126
Assert.assertEquals(1, toSyncValues.getJSONArray(baseKey).length());
10461127

1047-
StaticResetHelper.restSetStaticFields();
1128+
restartAppAndElapseTimeToNextSession();
1129+
ShadowOneSignalRestClient.lastPost = null;
10481130
RuntimeEnvironment.getRobolectricPackageManager().addPackage("org.test.app2");
10491131
OneSignalInit();
10501132
threadAndTaskWait();
10511133
Assert.assertEquals(1, ShadowOneSignalRestClient.lastPost.getJSONArray(baseKey + "_a").length());
10521134

1053-
StaticResetHelper.restSetStaticFields();
1135+
restartAppAndElapseTimeToNextSession();
1136+
ShadowOneSignalRestClient.lastPost = null;
10541137
RuntimeEnvironment.getRobolectricPackageManager().removePackage("org.test.app2");
10551138
OneSignalInit();
10561139
threadAndTaskWait();
10571140
Assert.assertEquals(1, ShadowOneSignalRestClient.lastPost.getJSONArray(baseKey + "_d").length());
10581141

1059-
StaticResetHelper.restSetStaticFields();
1142+
restartAppAndElapseTimeToNextSession();
1143+
ShadowOneSignalRestClient.lastPost = null;
10601144
OneSignalInit();
10611145
threadAndTaskWait();
10621146

1147+
System.out.println("ShadowOneSignalRestClient.lastPost: " + ShadowOneSignalRestClient.lastPost);
1148+
10631149
Assert.assertFalse(ShadowOneSignalRestClient.lastPost.has(baseKey + "_d"));
10641150
Assert.assertFalse(ShadowOneSignalRestClient.lastPost.has(baseKey + "_a"));
10651151
}
@@ -1174,4 +1260,10 @@ private static void AddLauncherIntentFilter() {
11741260

11751261
RuntimeEnvironment.getRobolectricPackageManager().addResolveInfoForIntent(launchIntent, resolveInfo);
11761262
}
1263+
1264+
private static int sessionCountOffset = 1;
1265+
private static void restartAppAndElapseTimeToNextSession() {
1266+
StaticResetHelper.restSetStaticFields();
1267+
ShadowSystemClock.setCurrentTimeMillis(System.currentTimeMillis() + 1000 * 31 * sessionCountOffset++);
1268+
}
11771269
}

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@
3030
import java.util.List;
3131

3232
public class OSNotification {
33+
34+
public enum DisplayType {
35+
// Notification shown in the notification shade.
36+
Notification,
37+
38+
// Notification shown as an in app alert.
39+
InAppAlert,
40+
41+
// Notification was silent and not displayed.
42+
None
43+
}
44+
3345
// Is app Active.
3446
public boolean active;
3547

@@ -39,9 +51,11 @@ public class OSNotification {
3951
// Android notification id. Can later be used to dismiss the notification programmatically.
4052
public int androidNotificationId;
4153

42-
// Notification paylaod received from OneSignal
54+
// Notification payload received from OneSignal
4355
public OSNotificationPayload payload;
4456

57+
public DisplayType displayType;
58+
4559
// Will be set if a summary notification is opened.
4660
// The payload will be the most recent notification received.
4761
public List<OSNotificationPayload> groupedNotifications;

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

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,11 @@
2929

3030
public class OSNotificationAction {
3131
public enum ActionType {
32-
// Notification from the notification shade was tapped on.
33-
NotificationTapped,
32+
// Notification was tapped on.
33+
Opened,
3434

35-
// User tapped on an action from the notification shade.
36-
NotificationActionTapped,
37-
38-
// User tapped on an action from the in-app alert.
39-
InAppAlertActionTapped,
40-
41-
// User closed the in-app alert notification.
42-
InAppAlertClosed
35+
// User tapped on an action from the notification.
36+
ActionTaken,
4337
}
4438

4539
// The type of the notification action

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public class OSNotificationPayload {
4949
public List<ActionButton> actionButtons;
5050
public String fromProjectNumber;
5151
public BackgroundImageLayout backgroundImageLayout;
52+
53+
// TODO: Set this.
5254
public String rawPayload;
5355

5456
public static class ActionButton {

0 commit comments

Comments
 (0)