Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -467,8 +467,10 @@ internal class OneSignalImp : IOneSignal, IServiceProvider {
// to the queue.
val currentPushSubscription = subscriptionModelStore!!.list().firstOrNull { it.id == configModel!!.pushSubscriptionId }
val newPushSubscription = SubscriptionModel()
val localSubscriptionID = IDManager.createLocalId()
val currentSubscriptionID = currentPushSubscription?.id ?: localSubscriptionID

newPushSubscription.id = currentPushSubscription?.id ?: IDManager.createLocalId()
newPushSubscription.id = currentSubscriptionID
newPushSubscription.type = SubscriptionType.PUSH
newPushSubscription.optedIn = currentPushSubscription?.optedIn ?: true
newPushSubscription.address = currentPushSubscription?.address ?: ""
Expand All @@ -478,11 +480,6 @@ internal class OneSignalImp : IOneSignal, IServiceProvider {
newPushSubscription.carrier = DeviceUtils.getCarrierName(services.getService<IApplicationService>().appContext) ?: ""
newPushSubscription.appVersion = AndroidUtils.getAppVersion(services.getService<IApplicationService>().appContext) ?: ""

// ensure we always know this devices push subscription ID
configModel!!.pushSubscriptionId = newPushSubscription.id

subscriptions.add(newPushSubscription)

// The next 4 lines makes this user the effective user locally. We clear the subscriptions
// first as a `NO_PROPOGATE` change because we don't want to drive deleting the cleared subscriptions
// on the backend. Once cleared we can then setup the new identity/properties model, and add
Expand All @@ -491,14 +488,24 @@ internal class OneSignalImp : IOneSignal, IServiceProvider {
identityModelStore!!.replace(identityModel)
propertiesModelStore!!.replace(propertiesModel)

if (suppressBackendOperation) {
subscriptionModelStore!!.replaceAll(subscriptions, ModelChangeTags.NO_PROPOGATE)
} else if (currentPushSubscription != null) {
operationRepo!!.enqueue(TransferSubscriptionOperation(configModel!!.appId, currentPushSubscription.id, sdkId))
subscriptionModelStore!!.replaceAll(subscriptions, ModelChangeTags.NO_PROPOGATE)
} else {
subscriptionModelStore!!.replaceAll(subscriptions)
var changeTag = ModelChangeTags.NO_PROPOGATE

if (!suppressBackendOperation) {
if (currentPushSubscription?.id != null && identityModel.externalId != null) {
// add a transfer-subscription operation when switching user
operationRepo!!.enqueue(TransferSubscriptionOperation(configModel!!.appId, currentPushSubscription.id, sdkId))
} else {
// reset subscription when calling logout or login for the first time
newPushSubscription.id = localSubscriptionID
changeTag = ModelChangeTags.NORMAL
}
}

// ensure we always know this devices push subscription ID
configModel!!.pushSubscriptionId = newPushSubscription.id

subscriptions.add(newPushSubscription)
subscriptionModelStore!!.replaceAll(subscriptions, changeTag)
}

override fun <T> hasService(c: Class<T>): Boolean = services.hasService(c)
Expand Down
Loading