Skip to content

Commit 709316c

Browse files
committed
Fix: NPE when setting timezone on app focus
1 parent da3517c commit 709316c

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/UserManager.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,10 @@ internal open class UserManager(
268268

269269
override fun onFocus(firedOnSubscribe: Boolean) {
270270
// Detect any user properties updates that changed
271-
_propertiesModel.timezone = TimeUtils.getTimeZoneId()
271+
// Skip updating timezone when onesignalId is not set in the property model
272+
if (_propertiesModel.hasProperty(PropertiesModel::onesignalId.name)) {
273+
_propertiesModel.timezone = TimeUtils.getTimeZoneId()
274+
}
272275
}
273276

274277
override fun onUnfocused() { }

OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/UserManagerTests.kt

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.onesignal.user.internal
33
import com.onesignal.common.TimeUtils
44
import com.onesignal.core.internal.language.ILanguageContext
55
import com.onesignal.mocks.MockHelper
6+
import com.onesignal.user.internal.properties.PropertiesModel
67
import com.onesignal.user.internal.subscriptions.ISubscriptionManager
78
import com.onesignal.user.internal.subscriptions.SubscriptionList
89
import io.kotest.core.spec.style.FunSpec
@@ -196,7 +197,7 @@ class UserManagerTests : FunSpec({
196197
verify(exactly = 1) { mockSubscriptionManager.removeSmsSubscription("+15558675309") }
197198
}
198199

199-
test("onFocus updates timezone") {
200+
test("onFocus updates timezone when onesignalId exists in property model") {
200201
// Given
201202
val mockTimeZone = "Europe/Foo"
202203
mockkObject(TimeUtils)
@@ -227,4 +228,36 @@ class UserManagerTests : FunSpec({
227228
unmockkObject(TimeUtils)
228229
}
229230
}
231+
232+
test("onFocus does not update timezone when onesignalId is missing in property model") {
233+
// Given
234+
val mockTimeZone = "Europe/Foo"
235+
mockkObject(TimeUtils)
236+
every { TimeUtils.getTimeZoneId() } returns mockTimeZone
237+
238+
val mockPropertiesModelStore = MockHelper.propertiesModelStore()
239+
every { mockPropertiesModelStore.model.hasProperty(PropertiesModel::onesignalId.name) } returns false
240+
241+
val userManager =
242+
UserManager(
243+
mockk<ISubscriptionManager>(),
244+
MockHelper.identityModelStore(),
245+
mockPropertiesModelStore,
246+
MockHelper.languageContext(),
247+
MockHelper.applicationService(),
248+
)
249+
250+
val propertiesModel = mockPropertiesModelStore.model
251+
252+
try {
253+
// When
254+
userManager.onFocus(firedOnSubscribe = false)
255+
256+
// Then
257+
verify(exactly = 0) { propertiesModel.timezone = mockTimeZone }
258+
} finally {
259+
// Clean up the mock
260+
unmockkObject(TimeUtils)
261+
}
262+
}
230263
})

0 commit comments

Comments
 (0)