From 5f488d25f853492fc412b180380020ba4323e11a Mon Sep 17 00:00:00 2001 From: akhiljain1907 Date: Mon, 25 May 2026 16:25:22 +0530 Subject: [PATCH 1/2] added callback in initialize api if it was already called before --- .../marketing/mobile/MobileCoreInitializer.kt | 1 + .../mobile/MobileCoreInitializerTests.kt | 57 +++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/code/core/src/phone/java/com/adobe/marketing/mobile/MobileCoreInitializer.kt b/code/core/src/phone/java/com/adobe/marketing/mobile/MobileCoreInitializer.kt index 0b903ea90..4897789fd 100644 --- a/code/core/src/phone/java/com/adobe/marketing/mobile/MobileCoreInitializer.kt +++ b/code/core/src/phone/java/com/adobe/marketing/mobile/MobileCoreInitializer.kt @@ -91,6 +91,7 @@ internal class MobileCoreInitializer( ) { if (initializeCalled.getAndSet(true)) { Log.debug(CoreConstants.LOG_TAG, LOG_TAG, "initialize failed - ignoring as it was already called.") + completionCallback?.call(null) return } diff --git a/code/core/src/test/java/com/adobe/marketing/mobile/MobileCoreInitializerTests.kt b/code/core/src/test/java/com/adobe/marketing/mobile/MobileCoreInitializerTests.kt index a174b3b02..f82dc4e7f 100644 --- a/code/core/src/test/java/com/adobe/marketing/mobile/MobileCoreInitializerTests.kt +++ b/code/core/src/test/java/com/adobe/marketing/mobile/MobileCoreInitializerTests.kt @@ -161,6 +161,22 @@ class MobileCoreInitializerTests { verify(mockedEventHub, never()).registerExtensions(any(), any()) } + @Test + fun `test registerExtensions invokes callback on success`() { + mobileCoreInitializer.setApplication(application) + + val latch = CountDownLatch(1) + `when`(mockedEventHub.registerExtensions(any(), any())).doAnswer { invocation -> + val callback = invocation.getArgument<(() -> Unit)?>(1) + callback?.invoke() + Unit + } + + mobileCoreInitializer.registerExtensions(listOf(TestExtension1::class.java)) { latch.countDown() } + + assertTrue(latch.await(1000, TimeUnit.MILLISECONDS)) + } + @Test fun `test registerExtensions`() { mobileCoreInitializer.setApplication(application) @@ -326,6 +342,47 @@ class MobileCoreInitializerTests { } } + @Test + fun `test initialize invokes callback when already initialized`() { + val options = InitOptions.configureWithAppID("appID") + mobileCoreInitializer.initialize(application, options, null) + + val latch = CountDownLatch(1) + mobileCoreInitializer.initialize(application, options) { latch.countDown() } + + assertTrue(latch.await(1000, TimeUnit.MILLISECONDS)) + } + + @Test + fun `test initialize null callback does not throw when called again`() { + val options = InitOptions.configureWithAppID("appID") + mobileCoreInitializer.initialize(application, options, null) + + // should not throw NullPointerException + mobileCoreInitializer.initialize(application, options, null) + } + + @Test + fun `test initialize callback invoked exactly once per call when already initialized`() { + val options = InitOptions.configureWithAppID("appID") + mobileCoreInitializer.initialize(application, options, null) + + val callCount = java.util.concurrent.atomic.AtomicInteger(0) + val latch = CountDownLatch(2) + + mobileCoreInitializer.initialize(application, options) { + callCount.incrementAndGet() + latch.countDown() + } + mobileCoreInitializer.initialize(application, options) { + callCount.incrementAndGet() + latch.countDown() + } + + assertTrue(latch.await(1000, TimeUnit.MILLISECONDS)) + assertEquals(2, callCount.get()) + } + @Test fun `test setApplication ignored after initialize`() { val options = InitOptions.configureWithAppID("appID") From 5b0f47f5d4bd2b0ae33c10eefd6a63faef5031b2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 3 Jun 2026 11:08:34 +0000 Subject: [PATCH 2/2] Updating Core version to 3.7.0 --- .../java/com/adobe/marketing/mobile/internal/CoreConstants.kt | 2 +- code/gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/core/src/main/java/com/adobe/marketing/mobile/internal/CoreConstants.kt b/code/core/src/main/java/com/adobe/marketing/mobile/internal/CoreConstants.kt index daadaaa07..e64085728 100644 --- a/code/core/src/main/java/com/adobe/marketing/mobile/internal/CoreConstants.kt +++ b/code/core/src/main/java/com/adobe/marketing/mobile/internal/CoreConstants.kt @@ -13,7 +13,7 @@ package com.adobe.marketing.mobile.internal internal object CoreConstants { const val LOG_TAG = "MobileCore" - const val VERSION = "3.6.0" + const val VERSION = "3.7.0" object EventDataKeys { /** diff --git a/code/gradle.properties b/code/gradle.properties index bde0ddad9..66697bdeb 100644 --- a/code/gradle.properties +++ b/code/gradle.properties @@ -5,7 +5,7 @@ android.useAndroidX=true #Maven artifacts #Core extension -coreExtensionVersion=3.6.0 +coreExtensionVersion=3.7.0 coreExtensionName=core coreMavenRepoName=AdobeMobileCoreSdk coreMavenRepoDescription=Android Core Extension for Adobe Mobile Marketing