From 8f5a38f974199ed45638281fef9ec8aab39895f7 Mon Sep 17 00:00:00 2001 From: AR Abdul Azeez Date: Thu, 22 Oct 2026 14:57:35 -0500 Subject: [PATCH] fix: catch Throwable around the startup timeline log A Kotlin log listener can throw a checked exception, which internalInit's catch (Exception) would turn into FAILED after a successful init. Co-authored-by: Cursor --- .../core/src/main/java/com/onesignal/internal/OneSignalImp.kt | 2 +- .../com/onesignal/common/threading/StartupTimelineTests.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt index 5f98be681..f0f59fea1 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt @@ -589,7 +589,7 @@ internal class OneSignalImp : IOneSignal, private fun reportStartupTimeline() { try { if (StartupTimeline.claimReport()) Logging.info("OneSignal: ${StartupTimeline.summary()}") - } catch (_: RuntimeException) { + } catch (_: Throwable) { } } diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/threading/StartupTimelineTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/threading/StartupTimelineTests.kt index 58e0f760a..3db9eea05 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/threading/StartupTimelineTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/threading/StartupTimelineTests.kt @@ -15,6 +15,7 @@ import io.kotest.matchers.string.shouldEndWith import io.kotest.matchers.string.shouldNotContain import kotlinx.coroutines.CompletableDeferred import org.robolectric.shadows.ShadowSystemClock +import java.io.IOException import java.time.Duration import java.util.concurrent.CopyOnWriteArrayList import kotlin.concurrent.thread @@ -161,7 +162,7 @@ class StartupTimelineTests : FunSpec({ val os = OneSignalImp() os.setField("initState", InitState.IN_PROGRESS) os.setField("suspendCompletion", CompletableDeferred()) - val listener = ILogListener { if (it.entry.contains("startup_timeline")) throw IllegalStateException("customer") } + val listener = ILogListener { if (it.entry.contains("startup_timeline")) throw IOException("customer") } Logging.addListener(listener) try { os.method("completeInit", InitState::class.java).invoke(os, InitState.SUCCESS)