Skip to content

Commit da60c85

Browse files
committed
[User Model] Backend Integration
1 parent 7fa1ff4 commit da60c85

File tree

56 files changed

+606
-444
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+606
-444
lines changed

Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,8 @@ private void setupLocationSharedSwitch() {
780780

781781
private void setupPromptLocationButton() {
782782
promptLocationButton.setOnClickListener(v -> {
783-
OneSignal.getLocation().requestPermission(true, Continue.none());
783+
OneSignal.getUser().setLanguage("es");
784+
// OneSignal.getLocation().requestPermission(true, Continue.none());
784785
});
785786
}
786787

@@ -801,7 +802,12 @@ private void setupSubscriptionSwitch() {
801802
// Add a listener to toggle the push notification enablement for the push subscription.
802803
pushSubscriptionEnabledSwitch.setOnClickListener(v -> {
803804
IPushSubscription subscription = OneSignal.getUser().getSubscriptions().getPush();
804-
subscription.setEnabled(pushSubscriptionEnabledSwitch.isChecked());
805+
if(pushSubscriptionEnabledSwitch.isChecked()) {
806+
subscription.optIn();
807+
}
808+
else {
809+
subscription.optOut();
810+
}
805811
});
806812
}
807813

@@ -832,7 +838,7 @@ private void refreshSubscriptionState() {
832838
promptPushBottonLayout.setVisibility(isPermissionEnabled ? View.GONE : View.VISIBLE);
833839
pushSubscriptionEnabledRelativeLayout.setEnabled(isPermissionEnabled);
834840
pushSubscriptionEnabledSwitch.setEnabled(isPermissionEnabled);
835-
pushSubscriptionEnabledSwitch.setChecked(pushSubscription.getEnabled());
841+
pushSubscriptionEnabledSwitch.setChecked(pushSubscription.getOptedIn());
836842
}
837843

838844
private void setupSendNotificationsLayout() {

Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/notification/OneSignalNotificationSender.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public static void sendDeviceNotification(final Notification notification) {
3535
new Thread(() -> {
3636
IPushSubscription subscription = OneSignal.getUser().getSubscriptions().getPush();
3737

38-
if (!subscription.getEnabled())
38+
if (!subscription.getOptedIn())
3939
return;
4040

4141
int pos = notification.getTemplatePos();

OneSignalSDK/onesignal/inAppMessages/src/main/java/com/onesignal/inAppMessages/internal/InAppMessagesManager.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ import com.onesignal.session.internal.session.ISessionService
4242
import com.onesignal.user.IUserManager
4343
import com.onesignal.user.internal.subscriptions.ISubscriptionChangedHandler
4444
import com.onesignal.user.internal.subscriptions.ISubscriptionManager
45+
import com.onesignal.user.internal.subscriptions.SubscriptionModel
46+
import com.onesignal.user.subscriptions.IPushSubscription
47+
import com.onesignal.user.subscriptions.ISubscription
4548
import kotlinx.coroutines.sync.Mutex
4649
import kotlinx.coroutines.sync.withLock
4750

@@ -164,7 +167,13 @@ internal class InAppMessagesManager(
164167
}
165168
}
166169

167-
override fun onSubscriptionsChanged() {
170+
override fun onSubscriptionsAdded(subscription: ISubscription) { }
171+
override fun onSubscriptionRemoved(subscription: ISubscription) { }
172+
override fun onSubscriptionsChanged(subscription: ISubscription, args: ModelChangedArgs) {
173+
if (subscription !is IPushSubscription || args.path != SubscriptionModel::id.name) {
174+
return
175+
}
176+
168177
suspendifyOnThread {
169178
fetchMessages()
170179
}

OneSignalSDK/onesignal/inAppMessages/src/main/java/com/onesignal/inAppMessages/internal/backend/impl/InAppBackendService.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,7 @@ internal class InAppBackendService(
2121

2222
override suspend fun listInAppMessages(appId: String, subscriptionId: String): List<InAppMessage>? {
2323
// Retrieve any in app messages that might exist
24-
val jsonBody = JSONObject()
25-
jsonBody.put("app_id", appId)
26-
27-
// TODO: This will be replaced by dedicated iam endpoint once it's available
28-
var response = _httpClient.post("players/$subscriptionId/on_session", jsonBody)
24+
val response = _httpClient.get("apps/$appId/subscriptions/$subscriptionId/iams")
2925

3026
if (response.isSuccess) {
3127
val jsonResponse = JSONObject(response.payload)

OneSignalSDK/onesignal/inAppMessages/src/main/java/com/onesignal/inAppMessages/internal/triggers/TriggerModel.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ class TriggerModel : Model() {
77
* The key of this trigger
88
*/
99
var key: String
10-
get() = getProperty(::key.name) { "" }
11-
set(value) { setProperty(::key.name, value) }
10+
get() = getStringProperty(::key.name) { "" }
11+
set(value) { setStringProperty(::key.name, value) }
1212

1313
/**
1414
* The value of this trigger
1515
*/
1616
var value: Any
17-
get() = getProperty(::value.name) { "" }
18-
set(value) { setProperty(::value.name, value) }
17+
get() = getAnyProperty(::value.name) { "" }
18+
set(value) { setAnyProperty(::value.name, value) }
1919
}

OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/NotificationsManager.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@ import com.onesignal.common.events.EventProducer
55
import com.onesignal.common.threading.suspendifyOnThread
66
import com.onesignal.core.internal.application.IApplicationLifecycleHandler
77
import com.onesignal.core.internal.application.IApplicationService
8-
import com.onesignal.core.internal.config.ConfigModelStore
98
import com.onesignal.debug.internal.logging.Logging
109
import com.onesignal.notifications.INotificationClickHandler
1110
import com.onesignal.notifications.INotificationWillShowInForegroundHandler
1211
import com.onesignal.notifications.INotificationsManager
1312
import com.onesignal.notifications.IPermissionChangedHandler
14-
import com.onesignal.notifications.internal.backend.INotificationBackendService
1513
import com.onesignal.notifications.internal.common.GenerateNotificationOpenIntentFromPushPayload
1614
import com.onesignal.notifications.internal.common.NotificationHelper
1715
import com.onesignal.notifications.internal.data.INotificationRepository
@@ -33,8 +31,6 @@ interface INotificationActivityOpener {
3331
*/
3432
internal class NotificationsManager(
3533
private val _applicationService: IApplicationService,
36-
private val _configModelStore: ConfigModelStore,
37-
private val _backend: INotificationBackendService,
3834
private val _notificationPermissionController: INotificationPermissionController,
3935
private val _notificationRestoreWorkManager: INotificationRestoreWorkManager,
4036
private val _notificationLifecycleService: INotificationLifecycleService,

OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/listeners/DeviceRegistrationListener.kt

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ import com.onesignal.notifications.INotificationsManager
1111
import com.onesignal.notifications.IPermissionChangedHandler
1212
import com.onesignal.notifications.internal.channels.INotificationChannelManager
1313
import com.onesignal.notifications.internal.pushtoken.IPushTokenManager
14+
import com.onesignal.user.internal.subscriptions.ISubscriptionChangedHandler
1415
import com.onesignal.user.internal.subscriptions.ISubscriptionManager
16+
import com.onesignal.user.internal.subscriptions.SubscriptionModel
1517
import com.onesignal.user.internal.subscriptions.SubscriptionStatus
18+
import com.onesignal.user.subscriptions.ISubscription
1619

1720
/**
1821
* The device registration listener will subscribe to events and at the appropriate time will
@@ -28,11 +31,15 @@ internal class DeviceRegistrationListener(
2831
private val _subscriptionManager: ISubscriptionManager
2932
) : IStartableService,
3033
ISingletonModelStoreChangeHandler<ConfigModel>,
31-
IPermissionChangedHandler {
34+
IPermissionChangedHandler,
35+
ISubscriptionChangedHandler {
3236

3337
override fun start() {
3438
_configModelStore.subscribe(this)
3539
_notificationsManager.addPermissionChangedHandler(this)
40+
_subscriptionManager.subscribe(this)
41+
42+
retrievePushTokenAndUpdateSubscription()
3643
}
3744

3845
override fun onModelReplaced(model: ConfigModel, tag: String) {
@@ -44,29 +51,43 @@ internal class DeviceRegistrationListener(
4451

4552
_channelManager.processChannelList(model.notificationChannels)
4653

47-
retrievePushTokenAndUpdateSubscription(_notificationsManager.permission)
54+
retrievePushTokenAndUpdateSubscription()
4855
}
4956

5057
override fun onModelUpdated(args: ModelChangedArgs, tag: String) {
5158
}
5259

5360
override fun onPermissionChanged(permission: Boolean) {
54-
retrievePushTokenAndUpdateSubscription(permission)
61+
retrievePushTokenAndUpdateSubscription()
5562
}
5663

57-
private fun retrievePushTokenAndUpdateSubscription(permission: Boolean) {
64+
private fun retrievePushTokenAndUpdateSubscription() {
5865
val pushSubscription = _subscriptionManager.subscriptions.push
5966

6067
if (pushSubscription.pushToken.isNotEmpty()) {
68+
val permission = _notificationsManager.permission
6169
_subscriptionManager.addOrUpdatePushSubscription(null, if (permission) SubscriptionStatus.SUBSCRIBED else SubscriptionStatus.NO_PERMISSION)
6270
} else {
6371
suspendifyOnThread {
6472
val pushTokenAndStatus = _pushTokenManager.retrievePushToken()
73+
val permission = _notificationsManager.permission
6574
_subscriptionManager.addOrUpdatePushSubscription(
6675
pushTokenAndStatus.token,
6776
if (permission) pushTokenAndStatus.status else SubscriptionStatus.NO_PERMISSION
6877
)
6978
}
7079
}
7180
}
81+
82+
override fun onSubscriptionRemoved(subscription: ISubscription) { }
83+
override fun onSubscriptionsAdded(subscription: ISubscription) { }
84+
override fun onSubscriptionsChanged(subscription: ISubscription, args: ModelChangedArgs) {
85+
// when going from optedIn=false to optedIn=true and there aren't permissions, automatically drive
86+
// permission request.
87+
if (args.path == SubscriptionModel::optedIn.name && args.oldValue == false && args.newValue == true && !_notificationsManager.permission) {
88+
suspendifyOnThread {
89+
_notificationsManager.requestPermission(true)
90+
}
91+
}
92+
}
7293
}

OneSignalSDK/onesignal/src/main/java/com/onesignal/common/JSONObjectExtensions.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ fun JSONObject.safeJSONObject(name: String): JSONObject? {
9999
fun JSONObject.toMap(): Map<String, Any> {
100100
val map = mutableMapOf<String, Any>()
101101

102-
for(key in this.keys()) {
102+
for (key in this.keys()) {
103103
map[key] = this[key]
104104
}
105105

@@ -119,14 +119,14 @@ fun JSONObject.expandJSONObject(name: String, into: (childObject: JSONObject) ->
119119
}
120120
}
121121

122-
fun <T> JSONObject.expandJSONArray(name: String, into: (childObject: JSONObject) -> T?) : List<T> {
122+
fun <T> JSONObject.expandJSONArray(name: String, into: (childObject: JSONObject) -> T?): List<T> {
123123
val listToRet = mutableListOf<T>()
124-
if(this.has(name)) {
124+
if (this.has(name)) {
125125
val jsonArray = this.getJSONArray(name)
126126
for (index in 0 until jsonArray.length()) {
127127
val itemJSONObject = jsonArray.getJSONObject(index)
128128
val item = into(itemJSONObject)
129-
if(item != null) {
129+
if (item != null) {
130130
listToRet.add(item)
131131
}
132132
}
@@ -142,9 +142,9 @@ fun <T> JSONObject.expandJSONArray(name: String, into: (childObject: JSONObject)
142142
*
143143
* @return The [JSONObject] itself, to allow for chaining.
144144
*/
145-
fun JSONObject.putMap(map: Map<String, Any>) : JSONObject {
145+
fun JSONObject.putMap(map: Map<String, Any?>): JSONObject {
146146
for (identity in map) {
147-
this.put(identity.key, identity.value)
147+
this.put(identity.key, identity.value ?: JSONObject.NULL)
148148
}
149149

150150
return this
@@ -158,8 +158,8 @@ fun JSONObject.putMap(map: Map<String, Any>) : JSONObject {
158158
*
159159
* @return The [JSONObject] itself, to allow for chaining.
160160
*/
161-
fun JSONObject.putMap(name: String, map: Map<String, Any>?) : JSONObject {
162-
if(map != null) {
161+
fun JSONObject.putMap(name: String, map: Map<String, Any?>?): JSONObject {
162+
if (map != null) {
163163
this.putJSONObject(name) {
164164
it.putMap(map)
165165
}
@@ -177,7 +177,7 @@ fun JSONObject.putMap(name: String, map: Map<String, Any>?) : JSONObject {
177177
*
178178
* @return The [JSONObject] itself, to allow for chaining.
179179
*/
180-
fun JSONObject.putJSONObject(name: String, expand: (item: JSONObject) -> Unit ) : JSONObject {
180+
fun JSONObject.putJSONObject(name: String, expand: (item: JSONObject) -> Unit): JSONObject {
181181
val childJSONObject = JSONObject()
182182
expand(childJSONObject)
183183

@@ -195,12 +195,13 @@ fun JSONObject.putJSONObject(name: String, expand: (item: JSONObject) -> Unit )
195195
* @param create: The lambda that will be called for each item in [list], expecting a [JSONObject] to be added to the array.
196196
*/
197197
fun <T> JSONObject.putJSONArray(name: String, list: List<T>?, create: (item: T) -> JSONObject?): JSONObject {
198-
if(list != null) {
198+
if (list != null) {
199199
val jsonArray = JSONArray()
200200
list.forEach {
201201
val item = create(it)
202-
if(item != null)
202+
if (item != null) {
203203
jsonArray.put(item)
204+
}
204205
}
205206
this.put(name, jsonArray)
206207
}
@@ -223,4 +224,4 @@ fun JSONObject.putSafe(name: String, value: Any?): JSONObject {
223224
}
224225

225226
return this
226-
}
227+
}

OneSignalSDK/onesignal/src/main/java/com/onesignal/common/modeling/MapModel.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,28 @@ open class MapModel<V>(
3535
}
3636

3737
override fun get(key: String): V {
38-
return getProperty(key)
38+
return getOptAnyProperty(key) as V
3939
}
4040

4141
override fun clear() {
4242
for (property in data.keys)
43-
setProperty(property, null)
43+
setOptAnyProperty(property, null)
4444
}
4545

4646
override fun put(key: String, value: V): V {
47-
setProperty(key, value)
47+
setOptAnyProperty(key, value)
4848
return value
4949
}
5050

5151
override fun putAll(from: Map<out String, V>) {
5252
for (item in from) {
53-
setProperty(item.key, item.value)
53+
setOptAnyProperty(item.key, item.value)
5454
}
5555
}
5656

5757
override fun remove(key: String): V {
58-
val value = getProperty<V>(key)
59-
setProperty(key, null)
58+
val value = getOptAnyProperty(key) as V
59+
setOptAnyProperty(key, null)
6060
return value
6161
}
6262
}

0 commit comments

Comments
 (0)