Skip to content

Commit 6fcd7ff

Browse files
committed
[SDK-1956] Remove redundant setActiveMode call from startUp
Move resolveMode() into updateDataSource so it covers both startup and state-change paths, eliminating the duplicate call in startUp that was always overwritten. Made-with: Cursor
1 parent 42784d2 commit 6fcd7ff

1 file changed

Lines changed: 23 additions & 24 deletions

File tree

launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/ConnectivityManager.java

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -193,28 +193,32 @@ private synchronized boolean updateDataSource(
193193
DataSource existingDataSource = currentDataSource.get();
194194
boolean isFDv2ModeSwitch = false;
195195

196-
// FDv2 path: resolve mode and determine if a teardown/rebuild is needed.
197-
if (useFDv2ModeResolution && !mustReinitializeDataSource) {
196+
// FDv2 path: resolve mode for both startup (mustReinitializeDataSource=true) and
197+
// state-change (mustReinitializeDataSource=false) cases.
198+
if (useFDv2ModeResolution) {
198199
ConnectionMode newMode = resolveMode();
199-
if (newMode == currentFDv2Mode) {
200-
onCompletion.onSuccess(null);
201-
return false;
202-
}
203-
// CSFDV2 5.3.8: retain active data source if old and new modes have equivalent config.
204-
// ModeDefinition currently relies on Object.equals (reference equality) because
205-
// makeDefaultModeTable() reuses the same instance for modes that share identical
206-
// configuration.
207-
FDv2DataSourceBuilder fdv2Builder = (FDv2DataSourceBuilder) dataSourceFactory;
208-
ModeDefinition oldDef = fdv2Builder.getModeDefinition(currentFDv2Mode);
209-
ModeDefinition newDef = fdv2Builder.getModeDefinition(newMode);
210-
if (oldDef != null && oldDef.equals(newDef)) {
211-
currentFDv2Mode = newMode;
212-
onCompletion.onSuccess(null);
213-
return false;
200+
if (!mustReinitializeDataSource) {
201+
// State-change path: check for no-op or equivalent config before rebuilding.
202+
if (newMode == currentFDv2Mode) {
203+
onCompletion.onSuccess(null);
204+
return false;
205+
}
206+
// CSFDV2 5.3.8: retain active data source if old and new modes have equivalent config.
207+
// ModeDefinition currently relies on Object.equals (reference equality) because
208+
// makeDefaultModeTable() reuses the same instance for modes that share identical
209+
// configuration.
210+
FDv2DataSourceBuilder fdv2Builder = (FDv2DataSourceBuilder) dataSourceFactory;
211+
ModeDefinition oldDef = fdv2Builder.getModeDefinition(currentFDv2Mode);
212+
ModeDefinition newDef = fdv2Builder.getModeDefinition(newMode);
213+
if (oldDef != null && oldDef.equals(newDef)) {
214+
currentFDv2Mode = newMode;
215+
onCompletion.onSuccess(null);
216+
return false;
217+
}
218+
isFDv2ModeSwitch = true;
219+
mustReinitializeDataSource = true;
214220
}
215221
currentFDv2Mode = newMode;
216-
isFDv2ModeSwitch = true;
217-
mustReinitializeDataSource = true;
218222
}
219223

220224
// Check whether the existing data source needs a rebuild (e.g. evaluation context changed).
@@ -444,11 +448,6 @@ synchronized boolean startUp(@NonNull Callback<Void> onCompletion) {
444448
}
445449
initialized = false;
446450

447-
if (useFDv2ModeResolution) {
448-
currentFDv2Mode = resolveMode();
449-
((FDv2DataSourceBuilder) dataSourceFactory).setActiveMode(currentFDv2Mode, true);
450-
}
451-
452451
updateEventProcessor(forcedOffline.get(), platformState.isNetworkAvailable(), platformState.isForeground());
453452
return updateDataSource(true, onCompletion);
454453
}

0 commit comments

Comments
 (0)