diff --git a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientHooksTest.java b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientHooksTest.java index 36b24bae..485765ea 100644 --- a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientHooksTest.java +++ b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientHooksTest.java @@ -61,11 +61,12 @@ public void executesHooksRegisteredDuringConfiguration() throws Exception { IdentifySeriesContext identifySeriesContext = new IdentifySeriesContext(newContext, null); IdentifySeriesResult identifySeriesResult = new IdentifySeriesResult(IdentifySeriesResult.IdentifySeriesStatus.COMPLETED); - assertEquals(1, testHook.beforeIdentifyCalls.size()); - assertEquals(identifySeriesContext, testHook.beforeIdentifyCalls.get(0).get("seriesContext")); - assertEquals(1, testHook.afterIdentifyCalls.size()); - assertEquals(identifySeriesContext, testHook.afterIdentifyCalls.get(0).get("seriesContext")); - assertEquals(identifySeriesResult, testHook.afterIdentifyCalls.get(0).get("result")); + // index 0 is the implicit identify from init; index 1 is the explicit identify call + assertEquals(2, testHook.beforeIdentifyCalls.size()); + assertEquals(identifySeriesContext, testHook.beforeIdentifyCalls.get(1).get("seriesContext")); + assertEquals(2, testHook.afterIdentifyCalls.size()); + assertEquals(identifySeriesContext, testHook.afterIdentifyCalls.get(1).get("seriesContext")); + assertEquals(identifySeriesResult, testHook.afterIdentifyCalls.get(1).get("result")); ldClient.trackMetric("test-event", LDValue.buildObject().put("data", "test").build(), 123.45); @@ -149,11 +150,12 @@ public void executesBothInitialHooksAndHooksAddedWithAddHooks() throws Exception IdentifySeriesContext identifySeriesContext = new IdentifySeriesContext(newContext, null); IdentifySeriesResult identifySeriesResult = new IdentifySeriesResult(IdentifySeriesResult.IdentifySeriesStatus.COMPLETED); - assertEquals(1, testHook.beforeIdentifyCalls.size()); - assertEquals(identifySeriesContext, testHook.beforeIdentifyCalls.get(0).get("seriesContext")); - assertEquals(1, testHook.afterIdentifyCalls.size()); - assertEquals(identifySeriesContext, testHook.afterIdentifyCalls.get(0).get("seriesContext")); - assertEquals(identifySeriesResult, testHook.afterIdentifyCalls.get(0).get("result")); + // index 0 is the implicit identify from init; index 1 is the explicit identify call + assertEquals(2, testHook.beforeIdentifyCalls.size()); + assertEquals(identifySeriesContext, testHook.beforeIdentifyCalls.get(1).get("seriesContext")); + assertEquals(2, testHook.afterIdentifyCalls.size()); + assertEquals(identifySeriesContext, testHook.afterIdentifyCalls.get(1).get("seriesContext")); + assertEquals(identifySeriesResult, testHook.afterIdentifyCalls.get(1).get("result")); assertEquals(1, addedHook.beforeIdentifyCalls.size()); assertEquals(identifySeriesContext, addedHook.beforeIdentifyCalls.get(0).get("seriesContext")); diff --git a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientPluginsTest.java b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientPluginsTest.java index 8f08239b..ffb06d38 100644 --- a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientPluginsTest.java +++ b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientPluginsTest.java @@ -51,6 +51,9 @@ public void registerIsCalledForPlugins() throws Exception { MockPlugin testPlugin = new MockPlugin(Collections.singletonList(testHook)); try (LDClient ldClient = LDClient.init(application, makeOfflineConfig(List.of(testPlugin)), ldContext, 1)) { + // This should get called because of an implicit identity. + assertEquals(1, testHook.beforeIdentifyCalls.size()); + ldClient.boolVariation("test-flag", false); assertEquals(1, testPlugin.getHooksCalls.size()); assertEquals(1, testPlugin.registerCalls.size()); diff --git a/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java b/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java index d081870e..7e7af17b 100644 --- a/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java +++ b/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java @@ -249,9 +249,16 @@ public static Future init(@NonNull Application application, } final AtomicInteger initCounter = new AtomicInteger(config.getMobileKeys().size()); - Callback completeWhenCounterZero = new Callback() { + class CompleteWhenCounterZero implements Callback { + final private HookRunner.AfterIdentifyMethod afterIdentify; + + CompleteWhenCounterZero(HookRunner.AfterIdentifyMethod afterIdentify) { + this.afterIdentify = afterIdentify; + } + @Override public void onSuccess(Void result) { + afterIdentify.invoke(new IdentifySeriesResult(IdentifySeriesResult.IdentifySeriesStatus.COMPLETED)); if (initCounter.decrementAndGet() == 0) { resultFuture.set(primaryClient); } @@ -259,13 +266,15 @@ public void onSuccess(Void result) { @Override public void onError(Throwable e) { + afterIdentify.invoke(new IdentifySeriesResult(IdentifySeriesResult.IdentifySeriesStatus.ERROR)); resultFuture.setException(e); } }; // Start up all instances for (final LDClient instance : instances.values()) { - if (instance.connectivityManager.startUp(completeWhenCounterZero)) { + HookRunner.AfterIdentifyMethod afterIdentify = instance.hookRunner.identify(modifiedContext, null); + if (instance.connectivityManager.startUp(new CompleteWhenCounterZero(afterIdentify))) { instance.eventProcessor.recordIdentifyEvent(modifiedContext); } }