Skip to content

Commit 8d6f602

Browse files
committed
support multiple callbacks
We support multiple callbacks for location so adding this to notifications to match. This is to ensure events are not missed for any reason.
1 parent c88f87e commit 8d6f602

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationPermissionController.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ object NotificationPermissionController : PermissionsActivity.PermissionCallback
3434
private const val PERMISSION_TYPE = "NOTIFICATION"
3535
private const val ANDROID_PERMISSION_STRING = "android.permission.POST_NOTIFICATIONS"
3636

37-
private var callback: OneSignal.PromptForPushNotificationPermissionResponseHandler? = null
37+
private val callbacks:
38+
MutableSet<OneSignal.PromptForPushNotificationPermissionResponseHandler> = HashSet()
3839

3940
init {
4041
PermissionsActivity.registerAsCallback(PERMISSION_TYPE, this)
@@ -49,18 +50,18 @@ object NotificationPermissionController : PermissionsActivity.PermissionCallback
4950
fallbackToSettings: Boolean,
5051
callback: OneSignal.PromptForPushNotificationPermissionResponseHandler?,
5152
) {
52-
if (callback != null) this.callback = callback
53+
if (callback != null) callbacks.add(callback)
5354

5455
if (notificationsEnabled()) {
55-
fireCallBack(true)
56+
fireCallBacks(true)
5657
return
5758
}
5859

5960
if (!supportsNativePrompt) {
6061
if (fallbackToSettings)
6162
showFallbackAlertDialog()
6263
else
63-
fireCallBack(false)
64+
fireCallBacks(false)
6465
return
6566
}
6667

@@ -74,7 +75,7 @@ object NotificationPermissionController : PermissionsActivity.PermissionCallback
7475

7576
override fun onAccept() {
7677
OneSignal.refreshNotificationPermissionState()
77-
fireCallBack(true)
78+
fireCallBacks(true)
7879
}
7980

8081
override fun onReject(fallbackToSettings: Boolean) {
@@ -83,7 +84,7 @@ object NotificationPermissionController : PermissionsActivity.PermissionCallback
8384
showFallbackAlertDialog()
8485
else
8586
false
86-
if (!fallbackShown) fireCallBack(false)
87+
if (!fallbackShown) fireCallBacks(false)
8788
}
8889

8990
// Returns true if dialog was shown
@@ -98,21 +99,21 @@ object NotificationPermissionController : PermissionsActivity.PermissionCallback
9899
NavigateToAndroidSettingsForNotifications.show(activity)
99100
}
100101
override fun onDecline() {
101-
fireCallBack(false)
102+
fireCallBacks(false)
102103
}
103104
}
104105
)
105106
return true
106107
}
107108

108-
// Fires callback and clears it to ensure it is only called once.
109-
private fun fireCallBack(accepted: Boolean) {
110-
callback?.response(accepted)
111-
callback = null
109+
// Fires callbacks and clears them to ensure each is only called once.
110+
private fun fireCallBacks(accepted: Boolean) {
111+
callbacks.forEach { it.response(accepted) }
112+
callbacks.clear()
112113
}
113114

114115
fun onAppForegrounded() {
115-
fireCallBack(notificationsEnabled())
116+
fireCallBacks(notificationsEnabled())
116117
}
117118

118119
private fun notificationsEnabled() = OSUtils.areNotificationsEnabled(OneSignal.appContext)

0 commit comments

Comments
 (0)