From 94df4b9fb23f9e608bf8951bca3ddbc422d49ae7 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Thu, 20 Feb 2025 16:58:12 -0500 Subject: [PATCH 1/3] refactor: Split IBootstrapService to a new file and update comments --- .../internal/startup/IBootstrapService.kt | 31 +++++++++++++++++++ .../internal/startup/IStartableService.kt | 13 ++------ 2 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IBootstrapService.kt diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IBootstrapService.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IBootstrapService.kt new file mode 100644 index 000000000..b0b14c670 --- /dev/null +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IBootstrapService.kt @@ -0,0 +1,31 @@ +package com.onesignal.core.internal.startup + +import com.onesignal.OneSignal +import com.onesignal.core.internal.application.IApplicationService +import com.onesignal.core.internal.config.ConfigModel +import com.onesignal.core.internal.config.ConfigModelStore + +/** + * Implement and provide this interface as part of service registration to indicate the service + * wants to be instantiated and its [bootstrap] function called during the initialization process. + * + * When [IBootstrapService.bootstrap] is called, only [OneSignal.setAppId] have been called during + * [OneSignal.initWithContext]. + * + * This means the following is true: + * + * 1) An appContext is available in [IApplicationService.appContext]. + * 2) An appId is available in [ConfigModel.appId] via [ConfigModelStore.get] + * 3) None of the [IStartableService.start] is called + * + * When bootstrap there is no guarantee that any other data is available. Typically a bootstrap service + * must be instantiated immediately and will add their appropriate hooks to then respond to changes + * in the system. + */ +interface IBootstrapService { + /** + * Called when the service is to be bootstrap. The appId and appContext have already been established. + */ + + fun bootstrap() +} diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IStartableService.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IStartableService.kt index e2576f662..ae0e750fe 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IStartableService.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/IStartableService.kt @@ -15,9 +15,8 @@ import com.onesignal.core.internal.config.ConfigModelStore * 1) An appContext is available in [IApplicationService.appContext]. * 2) An appId is available in [ConfigModel.appId] via [ConfigModelStore.get] * - * When started there is no guarantee that any other data is available. Typically a startable service - * must be instantiated immediately and will add their appropriate hooks to then respond to changes - * in the system. + * When started there is no guarantee that any other data is available. Typically a startable service + * can asynchronously start some lengthy process that doesn't require immediate use. */ interface IStartableService { /** @@ -26,11 +25,3 @@ interface IStartableService { */ fun start() } - -internal interface IBootstrapService { - /** - * Called when the service is to be started. The appId and appContext have already been - * established. - */ - fun bootstrap() -} From e2b793b1c4e191d59e631fb5b2f4ca1369a3f312 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Thu, 20 Feb 2025 16:59:11 -0500 Subject: [PATCH 2/3] fix: make InAppMessagePreviewHandler to a Bootstrap service instead of a Startable service --- .../java/com/onesignal/inAppMessages/InAppMessagesModule.kt | 3 ++- .../internal/preview/InAppMessagePreviewHandler.kt | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/InAppMessagesModule.kt b/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/InAppMessagesModule.kt index ef0538a41..3d179df54 100644 --- a/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/InAppMessagesModule.kt +++ b/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/InAppMessagesModule.kt @@ -3,6 +3,7 @@ package com.onesignal.inAppMessages import android.os.Build import com.onesignal.common.modules.IModule import com.onesignal.common.services.ServiceBuilder +import com.onesignal.core.internal.startup.IBootstrapService import com.onesignal.core.internal.startup.IStartableService import com.onesignal.inAppMessages.internal.DummyInAppMessagesManager import com.onesignal.inAppMessages.internal.InAppMessagesManager @@ -50,7 +51,7 @@ internal class InAppMessagesModule : IModule { builder.register().provides() // Previews - builder.register().provides() + builder.register().provides() // Prompts builder.register().provides() diff --git a/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandler.kt b/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandler.kt index 9898581ec..a2ebb00a2 100644 --- a/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandler.kt +++ b/OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/preview/InAppMessagePreviewHandler.kt @@ -2,7 +2,7 @@ package com.onesignal.inAppMessages.internal.preview import android.app.Activity import com.onesignal.core.internal.application.IApplicationService -import com.onesignal.core.internal.startup.IStartableService +import com.onesignal.core.internal.startup.IBootstrapService import com.onesignal.core.internal.time.ITime import com.onesignal.inAppMessages.internal.display.IInAppDisplayer import com.onesignal.inAppMessages.internal.state.InAppStateService @@ -25,8 +25,8 @@ internal class InAppMessagePreviewHandler( private val _notificationLifeCycle: INotificationLifecycleService, private val _state: InAppStateService, private val _time: ITime, -) : IStartableService, INotificationLifecycleCallback { - override fun start() { +) : IBootstrapService, INotificationLifecycleCallback { + override fun bootstrap() { _notificationLifeCycle.setInternalNotificationLifecycleCallback(this) } From f5cde9a8ecec5f93da8d2d79076e535425718184 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 21 Feb 2025 15:03:13 -0500 Subject: [PATCH 3/3] fix default canOpen to true --- .../internal/lifecycle/impl/NotificationLifecycleService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/lifecycle/impl/NotificationLifecycleService.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/lifecycle/impl/NotificationLifecycleService.kt index 271578b52..cd10dd9b9 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/lifecycle/impl/NotificationLifecycleService.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/lifecycle/impl/NotificationLifecycleService.kt @@ -87,7 +87,7 @@ internal class NotificationLifecycleService( activity: Activity, data: JSONObject, ): Boolean { - var canOpen = extOpenedCallback.hasSubscribers + var canOpen = true intLifecycleCallback.suspendingFire { canOpen = it.canOpenNotification(activity, data) } return canOpen }