From d0a55c38b5e38dc1f65a6e499c5d8e760a7c46c5 Mon Sep 17 00:00:00 2001 From: sozinov Date: Thu, 28 Aug 2025 14:13:31 +0300 Subject: [PATCH 1/3] WMSDK-522: added public method for initPushServices and initialize listener --- .../mindboxsdk/MindboxSdkLifecycleListener.kt | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt b/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt index 89f2db5..16d206d 100644 --- a/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt +++ b/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt @@ -12,6 +12,7 @@ import com.facebook.react.bridge.ReactContext import java.util.concurrent.atomic.AtomicBoolean import cloud.mindbox.mobile_sdk.Mindbox import cloud.mindbox.mobile_sdk.logger.Level +import cloud.mindbox.mobile_sdk.pushes.MindboxPushService internal class MindboxSdkLifecycleListener private constructor( @@ -20,12 +21,22 @@ internal class MindboxSdkLifecycleListener private constructor( ) : Application.ActivityLifecycleCallbacks { companion object { + @Volatile + private var listener: MindboxSdkLifecycleListener? = null + fun register( application: Application, subscriber: MindboxEventSubscriber = MindboxEventEmitter(application) ) { - val listener = MindboxSdkLifecycleListener(application, subscriber) - application.registerActivityLifecycleCallbacks(listener) + if (listener == null) { + synchronized(this) { + if (listener == null) { + Mindbox.writeLog("[RN] Initialize MindboxSdkLifecycleListener", Level.INFO) + listener = MindboxSdkLifecycleListener(application, subscriber) + application.registerActivityLifecycleCallbacks(listener) + } + } + } } } @@ -168,3 +179,8 @@ internal class MindboxSdkLifecycleListener private constructor( } } } + +public fun Mindbox.initPushes(application: Application, pushServices: List){ + Mindbox.initPushServices(application, pushServices) + MindboxSdkLifecycleListener.register(application) +} From 9adeca080fd36f96a41f86a8ee69c51a21e1aba9 Mon Sep 17 00:00:00 2001 From: sozinov Date: Thu, 28 Aug 2025 17:23:36 +0300 Subject: [PATCH 2/3] WMSDK-522: change method name --- .../main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt b/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt index 16d206d..6ec1d3b 100644 --- a/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt +++ b/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt @@ -4,7 +4,6 @@ import android.app.Activity import android.app.Application import android.content.Intent import android.os.Bundle -import android.util.Log import com.facebook.react.ReactApplication import com.facebook.react.ReactInstanceManager import com.facebook.react.bridge.ActivityEventListener @@ -180,7 +179,7 @@ internal class MindboxSdkLifecycleListener private constructor( } } -public fun Mindbox.initPushes(application: Application, pushServices: List){ +public fun Mindbox.setupPushServices(application: Application, pushServices: List){ Mindbox.initPushServices(application, pushServices) MindboxSdkLifecycleListener.register(application) } From 31040826dd69dd476755dc92627b44b6eb71cd60 Mon Sep 17 00:00:00 2001 From: sozinov Date: Thu, 28 Aug 2025 18:32:05 +0300 Subject: [PATCH 3/3] WMSDK-522: follow review --- .../mindboxsdk/MindboxSdkLifecycleListener.kt | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt b/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt index 6ec1d3b..7390251 100644 --- a/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt +++ b/android/src/main/java/com/mindboxsdk/MindboxSdkLifecycleListener.kt @@ -31,8 +31,9 @@ internal class MindboxSdkLifecycleListener private constructor( synchronized(this) { if (listener == null) { Mindbox.writeLog("[RN] Initialize MindboxSdkLifecycleListener", Level.INFO) - listener = MindboxSdkLifecycleListener(application, subscriber) - application.registerActivityLifecycleCallbacks(listener) + val lifecycleListener = MindboxSdkLifecycleListener(application, subscriber) + application.registerActivityLifecycleCallbacks(lifecycleListener) + listener = lifecycleListener } } } @@ -179,7 +180,30 @@ internal class MindboxSdkLifecycleListener private constructor( } } -public fun Mindbox.setupPushServices(application: Application, pushServices: List){ +/** + * Initializes push notification services for React Native integration. + * + * This method performs two crucial initialization steps: + * 1. Initializes the specified push services (FCM, HMS, RuStore) through Mindbox SDK + * 2. Registers the Mindbox lifecycle listener to handle React Native specific events + * + * @param application The Android Application context used for initialization + * @param pushServices List of push notification services to initialize. Typically includes + * [MindboxFirebase] for Firebase Cloud Messaging and/or + * [MindboxHuawei] for Huawei Cloud Messaging and/or + * [MindboxRuStore] for Huawei Cloud Messaging + * + * @example + * // Typical usage: + * Mindbox.initPushServicesForReactNative( + * application, + * listOf(MindboxFirebase, MindboxHuawei, MindboxRuStore) + * ) + * + * @note This method should be called once during application startup, + * in the Application.onCreate() method. + */ +public fun Mindbox.initPushServicesForReactNative(application: Application, pushServices: List) { Mindbox.initPushServices(application, pushServices) MindboxSdkLifecycleListener.register(application) }