From 657079e14a0974901385bbd7b59f36b937639ef8 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Fri, 16 Jun 2023 12:34:09 -0700 Subject: [PATCH 1/3] support configurable sdk name and version --- .../sdk/OptimizelyClientEngineTest.java | 8 +-- .../OptimizelyManagerEventHandlerTest.java | 21 ++++++ .../android/sdk/OptimizelyClientEngine.java | 18 ++++++ .../ab/android/sdk/OptimizelyManager.java | 64 +++++++++++++++---- .../sdk/OptimizelyManagerBuilderTest.java | 17 ++--- 5 files changed, 102 insertions(+), 26 deletions(-) diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientEngineTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientEngineTest.java index 8dc58f94c..b539fe7aa 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientEngineTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientEngineTest.java @@ -35,20 +35,20 @@ @RunWith(AndroidJUnit4.class) public class OptimizelyClientEngineTest { @Test - public void testGetClientEngineFromContextAndroidTV() { + public void testGetClientEngineNameFromContextAndroidTV() { Context context = mock(Context.class); UiModeManager uiModeManager = mock(UiModeManager.class); when(context.getSystemService(Context.UI_MODE_SERVICE)).thenReturn(uiModeManager); when(uiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_TELEVISION); - assertEquals(EventBatch.ClientEngine.ANDROID_TV_SDK, OptimizelyClientEngine.getClientEngineFromContext(context)); + assertEquals("android-tv-sdk", OptimizelyClientEngine.getClientEngineNameFromContext(context)); } @Test - public void testGetClientEngineFromContextAndroid() { + public void testGetClientEngineNameFromContextAndroid() { Context context = mock(Context.class); UiModeManager uiModeManager = mock(UiModeManager.class); when(context.getSystemService(Context.UI_MODE_SERVICE)).thenReturn(uiModeManager); when(uiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_NORMAL); - assertEquals(EventBatch.ClientEngine.ANDROID_SDK, OptimizelyClientEngine.getClientEngineFromContext(context)); + assertEquals("android-sdk", OptimizelyClientEngine.getClientEngineNameFromContext(context)); } } diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java index 9bfae9c9d..2b4984fd9 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java @@ -65,4 +65,25 @@ public void eventClientNameAndVersion() throws Exception { assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.CLIENT_VERSION); } + @Test + public void eventClientWithCustomNameAndVersion() throws Exception { + EventHandler mockEventHandler = mock(EventHandler.class); + + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); + OptimizelyManager optimizelyManager = OptimizelyManager.builder() + .withSDKKey("any-sdk-key") + .withEventDispatchInterval(0, TimeUnit.SECONDS) + .withEventHandler(mockEventHandler) + .withClientInfo("test-sdk", "test-version") + .build(context); + + OptimizelyClient optimizelyClient = optimizelyManager.initialize(context, minDatafileWithEvent); + optimizelyClient.track("test_event", "tester"); + + ArgumentCaptor argument = ArgumentCaptor.forClass(LogEvent.class); + verify(mockEventHandler, timeout(5000)).dispatchEvent(argument.capture()); + assertEquals(argument.getValue().getEventBatch().getClientName(), "android-sdk"); + assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.CLIENT_VERSION); + } + } diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyClientEngine.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyClientEngine.java index 485917ae0..04be4cf62 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyClientEngine.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyClientEngine.java @@ -28,12 +28,30 @@ */ public class OptimizelyClientEngine { + /** + * Get client engine name for current UI mode type + * + * @param context any valid Android {@link Context} + * @return client engine name ("android-sdk" or "android-tv-sdk") + */ + public static String getClientEngineNameFromContext(@NonNull Context context) { + UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE); + + if (uiModeManager != null && uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { + return "android-tv-sdk"; + } + + return "android-sdk"; + } + /** * Get client engine value for current UI mode type * * @param context any valid Android {@link Context} * @return String value of client engine + * @deprecated Consider using {@link #getClientEngineNameFromContext(Context, Integer, OptimizelyStartListener)} */ + @Deprecated public static EventBatch.ClientEngine getClientEngineFromContext(@NonNull Context context) { UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE); diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index 6ca775489..6f40015a3 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -99,7 +99,8 @@ public class OptimizelyManager { @Nullable private OptimizelyStartListener optimizelyStartListener; @Nullable private final List defaultDecideOptions; - private String sdkVersion = null; + private String customSdkName = null; + private String customSdkVersion = null; OptimizelyManager(@Nullable String projectId, @Nullable String sdkKey, @@ -115,7 +116,9 @@ public class OptimizelyManager { @NonNull NotificationCenter notificationCenter, @Nullable List defaultDecideOptions, @Nullable ODPManager odpManager, - @Nullable String vuid) { + @Nullable String vuid, + @Nullable String clientEngineName, + @Nullable String clientVersion) { if (projectId == null && sdkKey == null) { logger.error("projectId and sdkKey are both null!"); @@ -141,12 +144,8 @@ public class OptimizelyManager { this.notificationCenter = notificationCenter; this.defaultDecideOptions = defaultDecideOptions; - try { - sdkVersion = BuildConfig.CLIENT_VERSION; - logger.info("SDK Version: {}", sdkVersion); - } catch (Exception e) { - logger.warn("Error getting BuildConfig version"); - } + this.customSdkName = clientEngineName; + this.customSdkVersion = clientVersion; } @VisibleForTesting @@ -514,6 +513,29 @@ public DatafileHandler getDatafileHandler() { return datafileHandler; } + @NonNull + public String getSdkName(Context context) { + String sdkName = customSdkName; + if (sdkName == null) { + sdkName = OptimizelyClientEngine.getClientEngineNameFromContext(context); + } + return sdkName + } + + @NonNull + public String getSdkVersion() { + String sdkVersion = customSdkVersion; + if (sdkVersion == null) { + try { + sdkVersion = BuildConfig.CLIENT_VERSION; + } catch (Exception e) { + logger.warn("Error getting BuildConfig version"); + sdkVersion = "UNKNOWN"; + } + } + return sdkVersion + } + private boolean datafileDownloadEnabled() { return datafileDownloadInterval > 0; } @@ -577,7 +599,8 @@ public void onStartComplete(UserProfileService userProfileService) { private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull String datafile) throws ConfigParseException { EventHandler eventHandler = getEventHandler(context); - EventBatch.ClientEngine clientEngine = OptimizelyClientEngine.getClientEngineFromContext(context); + String sdkName = getSdkName(); + String sdkVersion = getSdkVersion(); Optimizely.Builder builder = Optimizely.builder(); @@ -594,7 +617,8 @@ private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull Stri } // override client sdk name/version to be included in events - builder.withClientInfo(clientEngine, sdkVersion); + builder.withClientInfo(sdkName, sdkVersion); + logger.info("SDK name: {} and version: {}", sdkName, sdkVersion); if (errorHandler != null) { builder.withErrorHandler(errorHandler); @@ -747,6 +771,9 @@ public static class Builder { private boolean odpEnabled = true; private String vuid = null; + private String customSdkName = null; + private String customSdkVersion = null; + @Deprecated /** * @deprecated use {@link #Builder()} instead and pass in an SDK Key with {@link #withSDKKey(String)} @@ -991,6 +1018,18 @@ public Builder withVuid(String vuid) { return this; } + /** + * Override the SDK name and version (for client SDKs like flutter-sdk wrapping the core android-sdk) to be included in events. + * + * @param clientEngineName the client engine name ("flutter/android-sdk", etc.). + * @param clientVersion the client SDK version. + * @return this {@link Builder} instance + */ + public Builder withClientInfo(@Nullable String clientEngineName, @Nullable String clientVersion) { + this.customSdkName = clientEngineName; + this.customSdkVersion = clientVersion; + return this; + } /** * Get a new {@link Builder} instance to create {@link OptimizelyManager} with. * @param context the application context used to create default service if not provided. @@ -1103,7 +1142,10 @@ public OptimizelyManager build(Context context) { notificationCenter, defaultDecideOptions, odpManager, - vuid); + vuid, + customSdkName, + customSdkVersion + ); } } } diff --git a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java index 63eaf9c0f..2962c9eb1 100644 --- a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java +++ b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java @@ -216,18 +216,13 @@ public void testBuildWithDatafileDownloadInterval_workerCancelledWhenIntervalIsN } @Test - public void testBuildWithDatafileDownloadInterval_workerCancelledWhenNoIntervalProvided() throws Exception { + public void testBuildWithCustomSdkNameAndVersion() throws Exception { OptimizelyManager manager = OptimizelyManager.builder() - .withSDKKey(testSdkKey) - .withDatafileHandler(mockDatafileHandler) - .withVuid("any-to-avoid-generate") - .build(mockContext); - OptimizelyManager spyManager = spy(manager); - when(spyManager.isAndroidVersionSupported()).thenReturn(true); - spyManager.initialize(mockContext, ""); - - verify(mockDatafileHandler).stopBackgroundUpdates(any(), any()); - verify(mockDatafileHandler, never()).startBackgroundUpdates(any(), any(), any(), any()); + .withSDKKey(testSdkKey) + .withClientInfo("test-sdk", "test-version") + .build(mockContext); + assertEquals(manager.getSdkName(mockContext), "test-sdk"); + assertEquals(manager.getSdkVersion(), "test-version"); } @Test From ac73d9a1f38fe5eea671cad3ce24034f4a5477be Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Fri, 16 Jun 2023 15:45:57 -0700 Subject: [PATCH 2/3] support configurable sdk name and version --- .../sdk/ODPIntegrationUpdateConfigTest.java | 4 +++- .../OptimizelyManagerEventHandlerTest.java | 4 ++-- .../ab/android/sdk/OptimizelyManagerTest.java | 22 +++++++++---------- .../ab/android/sdk/OptimizelyManager.java | 6 ++--- .../sdk/OptimizelyManagerBuilderTest.java | 9 ++++++-- .../sdk/OptimizelyManagerIntervalTest.java | 20 ++++++++++++----- build.gradle | 1 + shared/build.gradle | 1 + 8 files changed, 43 insertions(+), 24 deletions(-) diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java index 4685b5aaa..04cd52363 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationUpdateConfigTest.java @@ -117,7 +117,9 @@ public void setup() throws Exception { notificationCenter, null, odpManager, - "test-vuid"); + "test-vuid", + null, + null); } @Test diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java index 2b4984fd9..a6a4f3725 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerEventHandlerTest.java @@ -82,8 +82,8 @@ public void eventClientWithCustomNameAndVersion() throws Exception { ArgumentCaptor argument = ArgumentCaptor.forClass(LogEvent.class); verify(mockEventHandler, timeout(5000)).dispatchEvent(argument.capture()); - assertEquals(argument.getValue().getEventBatch().getClientName(), "android-sdk"); - assertEquals(argument.getValue().getEventBatch().getClientVersion(), BuildConfig.CLIENT_VERSION); + assertEquals(argument.getValue().getEventBatch().getClientName(), "test-sdk"); + assertEquals(argument.getValue().getEventBatch().getClientVersion(), "test-version"); } } diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java index 3052612ec..11359ee81 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java @@ -163,7 +163,7 @@ public void initializeSyncWithEnvironment() { EventHandler eventHandler = mock(DefaultEventHandler.class); EventProcessor eventProcessor = mock(EventProcessor.class); OptimizelyManager optimizelyManager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, 3600L, datafileHandler, null, 3600L, - eventHandler, eventProcessor, null, null, null, null, null); + eventHandler, eventProcessor, null, null, null, null, null, null, null); /* * Scenario#1: when datafile is not Empty * Scenario#2: when datafile is Empty @@ -222,7 +222,7 @@ public void initializeAsyncWithEnvironment() { EventHandler eventHandler = mock(DefaultEventHandler.class); EventProcessor eventProcessor = mock(EventProcessor.class); final OptimizelyManager optimizelyManager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, 3600L, datafileHandler, null, 3600L, - eventHandler, eventProcessor, null, null, null, null, null); + eventHandler, eventProcessor, null, null, null, null, null, null, null); /* * Scenario#1: when datafile is not Empty @@ -494,7 +494,7 @@ public void initializeSyncWithUpdateOnNewDatafileDisabled() { Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null, null); doAnswer( new Answer() { @@ -527,7 +527,7 @@ public void initializeSyncWithUpdateOnNewDatafileEnabled() { Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null, null); doAnswer( new Answer() { @@ -560,7 +560,7 @@ public void initializeSyncWithDownloadToCacheDisabled() { Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null, null); doAnswer( new Answer() { @@ -593,7 +593,7 @@ public void initializeSyncWithUpdateOnNewDatafileDisabledWithPeriodicPollingEnab Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null, null); doAnswer( (Answer) invocation -> { @@ -625,7 +625,7 @@ public void initializeSyncWithUpdateOnNewDatafileEnabledWithPeriodicPollingEnabl Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null, null); doAnswer( new Answer() { @@ -658,7 +658,7 @@ public void initializeSyncWithUpdateOnNewDatafileDisabledWithPeriodicPollingDisa Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null, null); doAnswer( new Answer() { @@ -692,7 +692,7 @@ public void initializeSyncWithUpdateOnNewDatafileEnabledWithPeriodicPollingDisab Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null, null); doAnswer( new Answer() { @@ -725,7 +725,7 @@ public void initializeSyncWithResourceDatafileNoCache() { Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = spy(new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null)); + null, null, null, null, null, null, null, null, null)); datafileHandler.removeSavedDatafile(context, manager.getDatafileConfig()); OptimizelyClient client = manager.initialize(context, R.raw.datafile, downloadToCache, updateConfigOnNewDatafile); @@ -742,7 +742,7 @@ public void initializeSyncWithResourceDatafileNoCacheWithDefaultParams() { Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); OptimizelyManager manager = spy(new OptimizelyManager(testProjectId, testSdkKey, null, logger, pollingInterval, datafileHandler, null, 0, - null, null, null, null, null, null, null)); + null, null, null, null, null, null, null, null, null)); datafileHandler.removeSavedDatafile(context, manager.getDatafileConfig()); OptimizelyClient client = manager.initialize(context, R.raw.datafile); diff --git a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java index 6f40015a3..757e45627 100644 --- a/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java +++ b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java @@ -519,7 +519,7 @@ public String getSdkName(Context context) { if (sdkName == null) { sdkName = OptimizelyClientEngine.getClientEngineNameFromContext(context); } - return sdkName + return sdkName; } @NonNull @@ -533,7 +533,7 @@ public String getSdkVersion() { sdkVersion = "UNKNOWN"; } } - return sdkVersion + return sdkVersion; } private boolean datafileDownloadEnabled() { @@ -599,7 +599,7 @@ public void onStartComplete(UserProfileService userProfileService) { private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull String datafile) throws ConfigParseException { EventHandler eventHandler = getEventHandler(context); - String sdkName = getSdkName(); + String sdkName = getSdkName(context); String sdkVersion = getSdkVersion(); Optimizely.Builder builder = Optimizely.builder(); diff --git a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java index 2962c9eb1..b9f5f2769 100644 --- a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java +++ b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerBuilderTest.java @@ -220,6 +220,7 @@ public void testBuildWithCustomSdkNameAndVersion() throws Exception { OptimizelyManager manager = OptimizelyManager.builder() .withSDKKey(testSdkKey) .withClientInfo("test-sdk", "test-version") + .withVuid("any-to-avoid-generate") .build(mockContext); assertEquals(manager.getSdkName(mockContext), "test-sdk"); assertEquals(manager.getSdkVersion(), "test-version"); @@ -249,7 +250,9 @@ public void testBuildWithDefaultODP_defaultEnabled() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - eq("test-vuid")); + eq("test-vuid"), + any(), + any()); } @Test @@ -277,7 +280,9 @@ public void testBuildWithDefaultODP_disabled() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) isNull(), - eq("test-vuid")); + eq("test-vuid"), + any(), + any()); } @Test diff --git a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java index b82f98573..45fceb290 100644 --- a/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java +++ b/android-sdk/src/test/java/com/optimizely/ab/android/sdk/OptimizelyManagerIntervalTest.java @@ -104,7 +104,9 @@ public void testBuildWithDatafileDownloadInterval() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString()); + anyString(), + any(), + any()); } @Test @@ -131,7 +133,9 @@ public void testBuildWithDatafileDownloadIntervalDeprecated() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString()); + anyString(), + any(), + any()); } @Test @@ -170,7 +174,9 @@ public void testBuildWithEventDispatchInterval() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString()); + anyString(), + any(), + any()); } @Test @@ -212,7 +218,9 @@ public void testBuildWithEventDispatchRetryInterval() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString()); + anyString(), + any(), + any()); } @Test @@ -250,7 +258,9 @@ public void testBuildWithEventDispatchIntervalDeprecated() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString()); + anyString(), + any(), + any()); } } diff --git a/build.gradle b/build.gradle index 96e4aa629..ce591bad1 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,7 @@ allprojects { mavenCentral() // SNAPSHOT support maven {url "https://oss.sonatype.org/content/repositories/snapshots/" } + maven { url "https://jitpack.io" } } configurations.all { diff --git a/shared/build.gradle b/shared/build.gradle index 06203d4e4..45f1b30d9 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -51,6 +51,7 @@ dependencies { api ("com.optimizely.ab:core-api:$java_core_ver") { exclude group: 'com.google.code.findbugs' } + implementation "androidx.annotation:annotation:$annotations_ver" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "androidx.work:work-runtime:$work_runtime" From bd87ef2c96d0b00cf4af2001bdc1a0c53b49852e Mon Sep 17 00:00:00 2001 From: Muzahidul Islam Date: Thu, 7 Sep 2023 18:55:58 +0600 Subject: [PATCH 3/3] Update java core version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ce591bad1..e0479c6ef 100644 --- a/build.gradle +++ b/build.gradle @@ -71,7 +71,7 @@ ext { build_tools_version = "30.0.3" min_sdk_version = 21 target_sdk_version = 33 - java_core_ver = "4.0.0-beta" + java_core_ver = "4.0.0-beta2" android_logger_ver = "1.3.6" jacksonversion= "2.11.2" annotations_ver = "1.2.0"