Skip to content

Commit efca831

Browse files
committed
Added getPermissionSubscriptionState and observer removers
1 parent e6b6028 commit efca831

File tree

6 files changed

+119
-20
lines changed

6 files changed

+119
-20
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ void addObserverStrong(ObserverType observer){
5151
observers.add(observer);
5252
}
5353

54+
void removeObserver(ObserverType observer) {
55+
for(int i = 0; i < observers.size(); i++) {
56+
Object anObserver = ((WeakReference)observers.get(i)).get();
57+
if (anObserver.equals(observer)) {
58+
observers.remove(i);
59+
break;
60+
}
61+
}
62+
}
63+
5464
boolean notifyChange(final StateType state) {
5565
boolean notified = false;
5666

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,13 @@
2828
package com.onesignal;
2929

3030
public class OSPermissionStateChanges {
31-
public OSPermissionState to, from;
31+
OSPermissionState to, from;
32+
33+
public OSPermissionState getTo() {
34+
return to;
35+
}
36+
37+
public OSPermissionState getFrom() {
38+
return from;
39+
}
3240
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.onesignal;
2+
3+
public class OSPermissionSubscriptionState {
4+
OSSubscriptionState subscriptionStatus;
5+
OSPermissionState permissionStatus;
6+
7+
public OSPermissionState getPermissionStatus() {
8+
return permissionStatus;
9+
}
10+
11+
public OSSubscriptionState getSubscriptionStatus() {
12+
return subscriptionStatus;
13+
}
14+
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,13 @@
2828
package com.onesignal;
2929

3030
public class OSSubscriptionStateChanges {
31-
public OSSubscriptionState to, from;
31+
OSSubscriptionState to, from;
32+
33+
public OSSubscriptionState getTo() {
34+
return to;
35+
}
36+
37+
public OSSubscriptionState getFrom() {
38+
return from;
39+
}
3240
}

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,6 +1498,15 @@ public static void addPermissionObserver(OSPermissionObserver observer) {
14981498
OSPermissionChangedInternalObserver.fireChangesToPublicObserver(getCurrentPermissionState(appContext));
14991499
}
15001500

1501+
public static void removePermissionObserver(OSPermissionObserver observer) {
1502+
if (appContext == null) {
1503+
Log(LOG_LEVEL.ERROR, "OneSignal.init has not been called. Could not modify permission observer");
1504+
return;
1505+
}
1506+
1507+
getPermissionStateChangesObserver().removeObserver(observer);
1508+
}
1509+
15011510
public static void addSubscriptionObserver(OSSubscriptionObserver observer) {
15021511
if (appContext == null) {
15031512
Log(LOG_LEVEL.ERROR, "OneSignal.init has not been called. Could not add subscription observer");
@@ -1509,6 +1518,28 @@ public static void addSubscriptionObserver(OSSubscriptionObserver observer) {
15091518
if (getCurrentSubscriptionState(appContext).compare(getLastSubscriptionState(appContext)))
15101519
OSSubscriptionChangedInternalObserver.fireChangesToPublicObserver(getCurrentSubscriptionState(appContext));
15111520
}
1521+
1522+
public static void removeSubscriptionObserver(OSSubscriptionObserver observer) {
1523+
if (appContext == null) {
1524+
Log(LOG_LEVEL.ERROR, "OneSignal.init has not been called. Could not modify subscription observer");
1525+
return;
1526+
}
1527+
1528+
getSubscriptionStateChangesObserver().removeObserver(observer);
1529+
}
1530+
1531+
public static OSPermissionSubscriptionState getPermissionSubscriptionState() {
1532+
if (appContext == null) {
1533+
Log(LOG_LEVEL.ERROR, "OneSignal.init has not been called. Could not get OSPermissionSubscriptionState");
1534+
return null;
1535+
}
1536+
1537+
OSPermissionSubscriptionState status = new OSPermissionSubscriptionState();
1538+
status.subscriptionStatus = getCurrentSubscriptionState(appContext);
1539+
status.permissionStatus = getCurrentPermissionState(appContext);
1540+
1541+
return status;
1542+
}
15121543

15131544
static long GetUnsentActiveTime() {
15141545
if (unSentActiveTime == -1 && appContext != null) {

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

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.onesignal.OSNotificationPayload;
4949
import com.onesignal.OSPermissionObserver;
5050
import com.onesignal.OSPermissionStateChanges;
51+
import com.onesignal.OSPermissionSubscriptionState;
5152
import com.onesignal.OSSubscriptionObserver;
5253
import com.onesignal.OSSubscriptionStateChanges;
5354
import com.onesignal.OneSignal;
@@ -1620,13 +1621,13 @@ public void shouldFirePermissionObserverOnFirstAdd() throws Exception {
16201621
@Override
16211622
public void onOSPermissionChanged(OSPermissionStateChanges stateChanges) {
16221623
lastPermissionStateChanges = stateChanges;
1623-
currentPermission = stateChanges.to.getEnabled();
1624+
currentPermission = stateChanges.getTo().getEnabled();
16241625
}
16251626
};
16261627
OneSignal.addPermissionObserver(permissionObserver);
16271628

1628-
Assert.assertFalse(lastPermissionStateChanges.from.getEnabled());
1629-
Assert.assertTrue(lastPermissionStateChanges.to.getEnabled());
1629+
Assert.assertFalse(lastPermissionStateChanges.getFrom().getEnabled());
1630+
Assert.assertTrue(lastPermissionStateChanges.getTo().getEnabled());
16301631
// Test to make sure object was correct at the time of firing.
16311632
Assert.assertTrue(currentPermission);
16321633
}
@@ -1640,7 +1641,7 @@ public void shouldFirePermissionObserverWhenUserDisablesNotifications() throws E
16401641
@Override
16411642
public void onOSPermissionChanged(OSPermissionStateChanges stateChanges) {
16421643
lastPermissionStateChanges = stateChanges;
1643-
currentPermission = stateChanges.to.getEnabled();
1644+
currentPermission = stateChanges.getTo().getEnabled();
16441645
}
16451646
};
16461647
OneSignal.addPermissionObserver(permissionObserver);
@@ -1654,8 +1655,8 @@ public void onOSPermissionChanged(OSPermissionStateChanges stateChanges) {
16541655
blankActivityController.resume();
16551656
threadAndTaskWait();
16561657

1657-
Assert.assertTrue(lastPermissionStateChanges.from.getEnabled());
1658-
Assert.assertFalse(lastPermissionStateChanges.to.getEnabled());
1658+
Assert.assertTrue(lastPermissionStateChanges.getFrom().getEnabled());
1659+
Assert.assertFalse(lastPermissionStateChanges.getTo().getEnabled());
16591660
// Test to make sure object was correct at the time of firing.
16601661
Assert.assertFalse(currentPermission);
16611662
// unsubscribeWhenNotificationsAreDisabled is not set so don't send notification_types.
@@ -1707,13 +1708,13 @@ public void shouldFireSubscriptionObserverOnFirstAdd() throws Exception {
17071708
@Override
17081709
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
17091710
lastSubscriptionStateChanges = stateChanges;
1710-
currentSubscription = stateChanges.to.getSubscribed();
1711+
currentSubscription = stateChanges.getTo().getSubscribed();
17111712
}
17121713
};
17131714
OneSignal.addSubscriptionObserver(permissionObserver);
17141715

1715-
Assert.assertFalse(lastSubscriptionStateChanges.from.getSubscribed());
1716-
Assert.assertTrue(lastSubscriptionStateChanges.to.getSubscribed());
1716+
Assert.assertFalse(lastSubscriptionStateChanges.getFrom().getSubscribed());
1717+
Assert.assertTrue(lastSubscriptionStateChanges.getTo().getSubscribed());
17171718
// Test to make sure object was correct at the time of firing.
17181719
Assert.assertTrue(currentSubscription);
17191720
}
@@ -1727,7 +1728,7 @@ public void shouldFireSubscriptionObserverWhenUserDisablesNotifications() throws
17271728
@Override
17281729
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
17291730
lastSubscriptionStateChanges = stateChanges;
1730-
currentSubscription = stateChanges.to.getSubscribed();
1731+
currentSubscription = stateChanges.getTo().getSubscribed();
17311732
}
17321733
};
17331734
OneSignal.addSubscriptionObserver(subscriptionObserver);
@@ -1741,8 +1742,8 @@ public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
17411742
blankActivityController.resume();
17421743
threadAndTaskWait();
17431744

1744-
Assert.assertTrue(lastSubscriptionStateChanges.from.getSubscribed());
1745-
Assert.assertFalse(lastSubscriptionStateChanges.to.getSubscribed());
1745+
Assert.assertTrue(lastSubscriptionStateChanges.getFrom().getSubscribed());
1746+
Assert.assertFalse(lastSubscriptionStateChanges.getTo().getSubscribed());
17461747
// Test to make sure object was correct at the time of firing.
17471748
Assert.assertFalse(currentSubscription);
17481749
// unsubscribeWhenNotificationsAreDisabled is not set so don't send notification_types.
@@ -1756,21 +1757,48 @@ public void shouldFireSubscriptionObserverWhenChangesHappen() throws Exception {
17561757
@Override
17571758
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
17581759
lastSubscriptionStateChanges = stateChanges;
1759-
currentSubscription = stateChanges.to.getSubscribed();
1760+
currentSubscription = stateChanges.getTo().getSubscribed();
17601761
}
17611762
};
17621763
OneSignal.addSubscriptionObserver(permissionObserver);
17631764
threadAndTaskWait();
17641765

1765-
Assert.assertFalse(lastSubscriptionStateChanges.from.getSubscribed());
1766-
Assert.assertTrue(lastSubscriptionStateChanges.to.getSubscribed());
1766+
Assert.assertFalse(lastSubscriptionStateChanges.getFrom().getSubscribed());
1767+
Assert.assertTrue(lastSubscriptionStateChanges.getTo().getSubscribed());
17671768
// Test to make sure object was correct at the time of firing.
17681769
Assert.assertTrue(currentSubscription);
1769-
Assert.assertTrue(lastSubscriptionStateChanges.to.getUserSubscriptionSetting());
1770-
Assert.assertEquals(ShadowPushRegistratorGPS.regId, lastSubscriptionStateChanges.to.getPushToken());
1771-
Assert.assertEquals(ShadowOneSignalRestClient.testUserId, lastSubscriptionStateChanges.to.getUserId());
1770+
Assert.assertTrue(lastSubscriptionStateChanges.getTo().getUserSubscriptionSetting());
1771+
Assert.assertEquals(ShadowPushRegistratorGPS.regId, lastSubscriptionStateChanges.getTo().getPushToken());
1772+
Assert.assertEquals(ShadowOneSignalRestClient.testUserId, lastSubscriptionStateChanges.getTo().getUserId());
17721773
}
17731774

1775+
@Test
1776+
public void shouldNotFireSubscriptionObserverWhenChangesHappenIfRemoved() throws Exception {
1777+
OneSignalInit();
1778+
OSSubscriptionObserver permissionObserver = new OSSubscriptionObserver() {
1779+
@Override
1780+
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
1781+
lastSubscriptionStateChanges = stateChanges;
1782+
currentSubscription = stateChanges.getTo().getSubscribed();
1783+
}
1784+
};
1785+
OneSignal.addSubscriptionObserver(permissionObserver);
1786+
lastSubscriptionStateChanges = null;
1787+
OneSignal.removeSubscriptionObserver(permissionObserver);
1788+
threadAndTaskWait();
1789+
1790+
Assert.assertFalse(currentSubscription);
1791+
Assert.assertNull(lastSubscriptionStateChanges);
1792+
}
1793+
1794+
@Test
1795+
public void shouldReturnCorrectGetPermissionSubscriptionState() throws Exception {
1796+
OneSignalInit();
1797+
threadAndTaskWait();
1798+
OSPermissionSubscriptionState permissionSubscriptionState = OneSignal.getPermissionSubscriptionState();
1799+
Assert.assertTrue(permissionSubscriptionState.getPermissionStatus().getEnabled());
1800+
Assert.assertTrue(permissionSubscriptionState.getSubscriptionStatus().getSubscribed());
1801+
}
17741802

17751803
// ####### Unit test helper methods ########
17761804

0 commit comments

Comments
 (0)