2828import com .launchdarkly .sdk .LDValue ;
2929import com .launchdarkly .sdk .ObjectBuilder ;
3030import com .launchdarkly .sdk .UserAttribute ;
31+ import com .launchdarkly .sdk .android .Components ;
3132import com .launchdarkly .sdk .android .ConnectionInformation ;
3233import com .launchdarkly .sdk .android .FeatureFlagChangeListener ;
3334import com .launchdarkly .sdk .android .LDAllFlagsListener ;
3637import com .launchdarkly .sdk .android .LDFailure ;
3738import com .launchdarkly .sdk .android .LDStatusListener ;
3839import com .launchdarkly .sdk .android .LaunchDarklyException ;
40+ import com .launchdarkly .sdk .android .integrations .ApplicationInfoBuilder ;
3941
4042import org .jetbrains .annotations .NotNull ;
4143
5153import timber .log .Timber ;
5254
5355public class LaunchdarklyReactNativeClientModule extends ReactContextBaseJavaModule {
54-
5556 private static final Gson gson = new Gson ();
5657 private static final String ERROR_INIT = "E_INITIALIZE" ;
5758 private static final String ERROR_IDENTIFY = "E_IDENTIFY" ;
@@ -64,6 +65,7 @@ public class LaunchdarklyReactNativeClientModule extends ReactContextBaseJavaMod
6465 private final Map <String , FeatureFlagChangeListener > listeners = new HashMap <>();
6566 private final Map <String , LDStatusListener > connectionModeListeners = new HashMap <>();
6667 private final Map <String , LDAllFlagsListener > allFlagsListeners = new HashMap <>();
68+
6769 public LaunchdarklyReactNativeClientModule (ReactApplicationContext reactContext ) {
6870 super (reactContext );
6971 }
@@ -252,13 +254,6 @@ private void internalConfigure(ReadableMap config, ReadableMap user, final Integ
252254
253255 final LDConfig .Builder ldConfigBuilder = configBuild (config );
254256 final LDUser ldUser = userBuild (user ).build ();
255-
256- if (config .hasKey ("allUserAttributesPrivate" )
257- && config .getType ("allUserAttributesPrivate" ).equals (ConfigEntryType .Boolean .getReadableType ())
258- && config .getBoolean ("allUserAttributesPrivate" )) {
259- ldConfigBuilder .allAttributesPrivate ();
260- }
261-
262257 final Application application = (Application ) getReactApplicationContext ().getApplicationContext ();
263258
264259 if (application != null ) {
@@ -285,14 +280,37 @@ public void run() {
285280 }
286281 }
287282
288- private LDConfig .Builder configBuild (ReadableMap options ) {
289- LDConfig .Builder builder = new LDConfig .Builder ();
283+ private LDConfig .Builder configBuild (ReadableMap config ) {
284+ LDConfig .Builder ldConfigBuilder = new LDConfig .Builder ();
290285
286+ // build trivial config options
291287 for (ConfigMapping entry : ConfigMapping .values ()) {
292- entry .loadFromMap (options , builder );
288+ entry .loadFromMap (config , ldConfigBuilder );
289+ }
290+
291+ // build application tags
292+ if (config .hasKey ("application" ) && config .getType ("application" ) == ReadableType .Map ) {
293+ ReadableMap application = config .getMap ("application" );
294+ ApplicationInfoBuilder applicationInfoBuilder = Components .applicationInfo ();
295+
296+ if (application .hasKey ("id" ) && application .getType ("id" ) == ReadableType .String ) {
297+ applicationInfoBuilder .applicationId (application .getString ("id" ));
298+ }
299+ if (application .hasKey ("version" ) && application .getType ("version" ) == ReadableType .String ) {
300+ applicationInfoBuilder .applicationVersion (application .getString ("version" ));
301+ }
302+
303+ ldConfigBuilder .applicationInfo (applicationInfoBuilder );
304+ }
305+
306+ // build private user attributes
307+ if (config .hasKey ("allUserAttributesPrivate" )
308+ && config .getType ("allUserAttributesPrivate" ).equals (ConfigEntryType .Boolean .getReadableType ())
309+ && config .getBoolean ("allUserAttributesPrivate" )) {
310+ ldConfigBuilder .allAttributesPrivate ();
293311 }
294312
295- return builder ;
313+ return ldConfigBuilder ;
296314 }
297315
298316 private LDUser .Builder userBuild (ReadableMap options ) {
0 commit comments