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 04cd5236..4685b5aa 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,9 +117,7 @@ public void setup() throws Exception { notificationCenter, null, odpManager, - "test-vuid", - null, - null); + "test-vuid"); } @Test 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 b539fe7a..8dc58f94 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 testGetClientEngineNameFromContextAndroidTV() { + public void testGetClientEngineFromContextAndroidTV() { 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("android-tv-sdk", OptimizelyClientEngine.getClientEngineNameFromContext(context)); + assertEquals(EventBatch.ClientEngine.ANDROID_TV_SDK, OptimizelyClientEngine.getClientEngineFromContext(context)); } @Test - public void testGetClientEngineNameFromContextAndroid() { + public void testGetClientEngineFromContextAndroid() { 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("android-sdk", OptimizelyClientEngine.getClientEngineNameFromContext(context)); + assertEquals(EventBatch.ClientEngine.ANDROID_SDK, OptimizelyClientEngine.getClientEngineFromContext(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 a6a4f372..9bfae9c9 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,25 +65,4 @@ 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(), "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 11359ee8..3052612e 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, null, null); + eventHandler, eventProcessor, 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, null, null); + eventHandler, eventProcessor, 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/OptimizelyClientEngine.java b/android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyClientEngine.java index 04be4cf6..485917ae 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,30 +28,12 @@ */ 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 2cbb12b8..5776cbf6 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,8 +99,7 @@ public class OptimizelyManager { @Nullable private OptimizelyStartListener optimizelyStartListener; @Nullable private final List defaultDecideOptions; - private String customSdkName = null; - private String customSdkVersion = null; + private String sdkVersion = null; OptimizelyManager(@Nullable String projectId, @Nullable String sdkKey, @@ -116,9 +115,7 @@ public class OptimizelyManager { @NonNull NotificationCenter notificationCenter, @Nullable List defaultDecideOptions, @Nullable ODPManager odpManager, - @Nullable String vuid, - @Nullable String clientEngineName, - @Nullable String clientVersion) { + @Nullable String vuid) { if (projectId == null && sdkKey == null) { logger.error("projectId and sdkKey are both null!"); @@ -144,8 +141,12 @@ public class OptimizelyManager { this.notificationCenter = notificationCenter; this.defaultDecideOptions = defaultDecideOptions; - this.customSdkName = clientEngineName; - this.customSdkVersion = clientVersion; + try { + sdkVersion = BuildConfig.CLIENT_VERSION; + logger.info("SDK Version: {}", sdkVersion); + } catch (Exception e) { + logger.warn("Error getting BuildConfig version"); + } } @VisibleForTesting @@ -513,29 +514,6 @@ 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; } @@ -599,8 +577,7 @@ public void onStartComplete(UserProfileService userProfileService) { private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull String datafile) throws ConfigParseException { EventHandler eventHandler = getEventHandler(context); - String sdkName = getSdkName(context); - String sdkVersion = getSdkVersion(); + EventBatch.ClientEngine clientEngine = OptimizelyClientEngine.getClientEngineFromContext(context); Optimizely.Builder builder = Optimizely.builder(); @@ -617,8 +594,7 @@ private OptimizelyClient buildOptimizely(@NonNull Context context, @NonNull Stri } // override client sdk name/version to be included in events - builder.withClientInfo(sdkName, sdkVersion); - logger.info("SDK name: {} and version: {}", sdkName, sdkVersion); + builder.withClientInfo(clientEngine, sdkVersion); if (errorHandler != null) { builder.withErrorHandler(errorHandler); @@ -771,9 +747,6 @@ 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)} @@ -1018,18 +991,6 @@ 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. @@ -1142,10 +1103,7 @@ public OptimizelyManager build(Context context) { notificationCenter, defaultDecideOptions, odpManager, - vuid, - customSdkName, - customSdkVersion - ); + vuid); } } } 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 b9f5f276..63eaf9c0 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,14 +216,18 @@ public void testBuildWithDatafileDownloadInterval_workerCancelledWhenIntervalIsN } @Test - public void testBuildWithCustomSdkNameAndVersion() throws Exception { + public void testBuildWithDatafileDownloadInterval_workerCancelledWhenNoIntervalProvided() 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"); + .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()); } @Test @@ -250,9 +254,7 @@ public void testBuildWithDefaultODP_defaultEnabled() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - eq("test-vuid"), - any(), - any()); + eq("test-vuid")); } @Test @@ -280,9 +282,7 @@ public void testBuildWithDefaultODP_disabled() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) isNull(), - eq("test-vuid"), - any(), - any()); + eq("test-vuid")); } @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 45fceb29..b82f9857 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,9 +104,7 @@ public void testBuildWithDatafileDownloadInterval() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString(), - any(), - any()); + anyString()); } @Test @@ -133,9 +131,7 @@ public void testBuildWithDatafileDownloadIntervalDeprecated() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString(), - any(), - any()); + anyString()); } @Test @@ -174,9 +170,7 @@ public void testBuildWithEventDispatchInterval() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString(), - any(), - any()); + anyString()); } @Test @@ -218,9 +212,7 @@ public void testBuildWithEventDispatchRetryInterval() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString(), - any(), - any()); + anyString()); } @Test @@ -258,9 +250,7 @@ public void testBuildWithEventDispatchIntervalDeprecated() throws Exception { any(NotificationCenter.class), any(), // nullable (DefaultDecideOptions) any(ODPManager.class), - anyString(), - any(), - any()); + anyString()); } } diff --git a/build.gradle b/build.gradle index ce591bad..96e4aa62 100644 --- a/build.gradle +++ b/build.gradle @@ -57,7 +57,6 @@ 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 45f1b30d..06203d4e 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -51,7 +51,6 @@ 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"