Skip to content

Commit cbfaeb9

Browse files
authored
Merge pull request #1845 from OneSignal/fix/crash_on_login_from_user_sub
Fix crash from missing operationExecutor in OperationModelStore create
2 parents 9f7f9a0 + b65c008 commit cbfaeb9

File tree

4 files changed

+12
-6
lines changed

4 files changed

+12
-6
lines changed

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/IModelStore.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ interface IModelStore<TModel> :
1616
*
1717
* @param jsonObject The optional [JSONObject] to initialize the new model with.
1818
*/
19-
fun create(jsonObject: JSONObject? = null): TModel
19+
fun create(jsonObject: JSONObject? = null): TModel?
2020

2121
/**
2222
* List the models that are owned by this model store.

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/ModelStore.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ abstract class ModelStore<TModel>(
126126
val str = _prefs.getString(PreferenceStores.ONESIGNAL, PreferenceOneSignalKeys.MODEL_STORE_PREFIX + name, "[]")
127127
val jsonArray = JSONArray(str)
128128
for (index in 0 until jsonArray.length()) {
129-
val newModel = create(jsonArray.getJSONObject(index))
129+
val newModel = create(jsonArray.getJSONObject(index)) ?: continue
130130
_models.add(newModel)
131131
// listen for changes to this model
132132
newModel.subscribe(this)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/SingletonModelStore.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ open class SingletonModelStore<TModel>(
2424
return model
2525
}
2626

27-
val createdModel = store.create()
27+
val createdModel = store.create() ?: throw Exception("Unable to initialize model from store $store")
2828
createdModel.id = _singletonId
2929
store.add(createdModel)
3030
return createdModel

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/operations/impl/OperationModelStore.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package com.onesignal.core.internal.operations.impl
33
import com.onesignal.common.modeling.ModelStore
44
import com.onesignal.core.internal.operations.Operation
55
import com.onesignal.core.internal.preferences.IPreferencesService
6+
import com.onesignal.debug.internal.logging.Logging
67
import com.onesignal.user.internal.operations.CreateSubscriptionOperation
78
import com.onesignal.user.internal.operations.DeleteAliasOperation
89
import com.onesignal.user.internal.operations.DeleteSubscriptionOperation
910
import com.onesignal.user.internal.operations.DeleteTagOperation
1011
import com.onesignal.user.internal.operations.LoginUserOperation
12+
import com.onesignal.user.internal.operations.LoginUserFromSubscriptionOperation
1113
import com.onesignal.user.internal.operations.RefreshUserOperation
1214
import com.onesignal.user.internal.operations.SetAliasOperation
1315
import com.onesignal.user.internal.operations.SetPropertyOperation
@@ -18,6 +20,7 @@ import com.onesignal.user.internal.operations.TrackSessionStartOperation
1820
import com.onesignal.user.internal.operations.TransferSubscriptionOperation
1921
import com.onesignal.user.internal.operations.UpdateSubscriptionOperation
2022
import com.onesignal.user.internal.operations.impl.executors.IdentityOperationExecutor
23+
import com.onesignal.user.internal.operations.impl.executors.LoginUserFromSubscriptionOperationExecutor
2124
import com.onesignal.user.internal.operations.impl.executors.LoginUserOperationExecutor
2225
import com.onesignal.user.internal.operations.impl.executors.RefreshUserOperationExecutor
2326
import com.onesignal.user.internal.operations.impl.executors.SubscriptionOperationExecutor
@@ -30,13 +33,15 @@ internal class OperationModelStore(prefs: IPreferencesService) : ModelStore<Oper
3033
load()
3134
}
3235

33-
override fun create(jsonObject: JSONObject?): Operation {
36+
override fun create(jsonObject: JSONObject?): Operation? {
3437
if (jsonObject == null) {
35-
throw NullPointerException("jsonObject")
38+
Logging.error("null jsonObject sent to OperationModelStore.create")
39+
return null
3640
}
3741

3842
if (!jsonObject.has(Operation::name.name)) {
39-
throw IllegalArgumentException("jsonObject must have '${Operation::name.name}' attribute")
43+
Logging.error("jsonObject must have '${Operation::name.name}' attribute")
44+
return null
4045
}
4146

4247
// Determine the type of operation based on the name property in the json
@@ -48,6 +53,7 @@ internal class OperationModelStore(prefs: IPreferencesService) : ModelStore<Oper
4853
SubscriptionOperationExecutor.DELETE_SUBSCRIPTION -> DeleteSubscriptionOperation()
4954
SubscriptionOperationExecutor.TRANSFER_SUBSCRIPTION -> TransferSubscriptionOperation()
5055
LoginUserOperationExecutor.LOGIN_USER -> LoginUserOperation()
56+
LoginUserFromSubscriptionOperationExecutor.LOGIN_USER_FROM_SUBSCRIPTION_USER -> LoginUserFromSubscriptionOperation()
5157
RefreshUserOperationExecutor.REFRESH_USER -> RefreshUserOperation()
5258
UpdateUserOperationExecutor.SET_TAG -> SetTagOperation()
5359
UpdateUserOperationExecutor.DELETE_TAG -> DeleteTagOperation()

0 commit comments

Comments
 (0)