From 185dffa2b741d8ab2776c7815a6bd8cd6c36cffc Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Thu, 14 Feb 2019 12:21:43 +0800 Subject: [PATCH 1/9] rename package name --- android/build.gradle | 4 ++-- .../{reactlibrary => launchdarkly}/RNLaunchDarklyModule.java | 2 +- .../{reactlibrary => launchdarkly}/RNLaunchDarklyPackage.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename android/src/main/java/com/{reactlibrary => launchdarkly}/RNLaunchDarklyModule.java (99%) rename android/src/main/java/com/{reactlibrary => launchdarkly}/RNLaunchDarklyPackage.java (96%) diff --git a/android/build.gradle b/android/build.gradle index 537df8d..1bf257c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -34,8 +34,8 @@ repositories { } dependencies { - compile "com.facebook.react:react-native:${safeExtGet('reactNative', '+')}" - compile('com.launchdarkly:launchdarkly-android-client:2.5.1') { + implementation "com.facebook.react:react-native:${safeExtGet('reactNative', '+')}" + implementation('com.launchdarkly:launchdarkly-android-client:2.5.1') { exclude group: 'com.squareup.okhttp', module: 'okhttp' } diff --git a/android/src/main/java/com/reactlibrary/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java similarity index 99% rename from android/src/main/java/com/reactlibrary/RNLaunchDarklyModule.java rename to android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index 0ec679a..14cba45 100644 --- a/android/src/main/java/com/reactlibrary/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -1,5 +1,5 @@ -package com.reactlibrary; +package com.launchdarkly; import android.app.Application; import android.util.Log; diff --git a/android/src/main/java/com/reactlibrary/RNLaunchDarklyPackage.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyPackage.java similarity index 96% rename from android/src/main/java/com/reactlibrary/RNLaunchDarklyPackage.java rename to android/src/main/java/com/launchdarkly/RNLaunchDarklyPackage.java index ae017cf..aed9fc7 100644 --- a/android/src/main/java/com/reactlibrary/RNLaunchDarklyPackage.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyPackage.java @@ -1,5 +1,5 @@ -package com.reactlibrary; +package com.launchdarkly; import java.util.Arrays; import java.util.Collections; From 9c814a25dfc9738cabc13ec81dea24ae645dd751 Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Thu, 14 Feb 2019 12:25:28 +0800 Subject: [PATCH 2/9] manifest package name --- android/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 41a92ab..33098b8 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.launchdarkly"> \ No newline at end of file From eee257947c0e442894ac6c2e0d68a7a6339e932e Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Thu, 7 Mar 2019 15:23:47 +0800 Subject: [PATCH 3/9] check for null react activity on configure --- .../src/main/java/com/launchdarkly/RNLaunchDarklyModule.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index 14cba45..ad385a5 100644 --- a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -82,9 +82,9 @@ public void configure(String apiKey, ReadableMap options) { user = userBuilder.build(); - Application application = reactContext.getCurrentActivity().getApplication(); + Activity reactActivity = reactContext.getCurrentActivity(); - if (application != null) { + if (reactActivity && reactActivity.getApplication() != null) { ldClient = LDClient.init(application, ldConfig, user, 0); } else { Log.d("RNLaunchDarklyModule", "Couldn't init RNLaunchDarklyModule cause application was null"); From 5ec10725b383374828e5c00e61efdc7877b8abcb Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Thu, 7 Mar 2019 17:37:38 +0800 Subject: [PATCH 4/9] fix import and subsequent activity reference --- .../src/main/java/com/launchdarkly/RNLaunchDarklyModule.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index ad385a5..36d5769 100644 --- a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -1,6 +1,7 @@ package com.launchdarkly; +import android.app.Activity; import android.app.Application; import android.util.Log; @@ -84,8 +85,8 @@ public void configure(String apiKey, ReadableMap options) { Activity reactActivity = reactContext.getCurrentActivity(); - if (reactActivity && reactActivity.getApplication() != null) { - ldClient = LDClient.init(application, ldConfig, user, 0); + if (reactActivity != null && reactActivity.getApplication() != null) { + ldClient = LDClient.init(reactActivity.getApplication(), ldConfig, user, 0); } else { Log.d("RNLaunchDarklyModule", "Couldn't init RNLaunchDarklyModule cause application was null"); } From 2b3cb76b8c2e989f0ae040c28a955aeb7649fbca Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Thu, 14 Mar 2019 16:35:13 +0800 Subject: [PATCH 5/9] make LD configure a promise (Android) --- .../java/com/launchdarkly/RNLaunchDarklyModule.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index 36d5769..a425987 100644 --- a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -40,7 +40,7 @@ public String getName() { } @ReactMethod - public void configure(String apiKey, ReadableMap options) { + public void configure(String apiKey, ReadableMap options, Promise promise) { LDConfig ldConfig = new LDConfig.Builder() .setMobileKey(apiKey) .build(); @@ -77,7 +77,9 @@ public void configure(String apiKey, ReadableMap options) { if (user != null && ldClient != null) { user = userBuilder.build(); ldClient.identify(user); - + WritableMap map = Arguments.createMap(); + map.putString("email", options.getString("email")); + promise.resolve(map); return; } @@ -87,8 +89,12 @@ public void configure(String apiKey, ReadableMap options) { if (reactActivity != null && reactActivity.getApplication() != null) { ldClient = LDClient.init(reactActivity.getApplication(), ldConfig, user, 0); + WritableMap map = Arguments.createMap(); + map.putString("email", options.getString("email")); + promise.resolve(map); } else { Log.d("RNLaunchDarklyModule", "Couldn't init RNLaunchDarklyModule cause application was null"); + promise.reject(new Throwable("Couldn't init RNLaunchDarklyModule cause application was null")); } } From e739bdb6d4cb0532918eb7573b9ee363eec77820 Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Thu, 14 Mar 2019 16:57:58 +0800 Subject: [PATCH 6/9] import react Promise package --- android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index a425987..086272c 100644 --- a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -6,6 +6,7 @@ import android.util.Log; import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; From e73bfc574b2087e14b5018c87d76f27afb892bd4 Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Thu, 14 Mar 2019 20:36:45 +0800 Subject: [PATCH 7/9] turn iOS RCT method to promise --- index.js | 2 +- ios/RNLaunchDarkly.m | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index ab4f0f3..57587b7 100644 --- a/index.js +++ b/index.js @@ -13,7 +13,7 @@ class LaunchDarkly { } configure (apiKey, options) { - RNLaunchDarkly.configure(apiKey, options); + return RNLaunchDarkly.configure(apiKey, options); } boolVariation (featureName, callback) { diff --git a/ios/RNLaunchDarkly.m b/ios/RNLaunchDarkly.m index 31a53ba..f661cee 100644 --- a/ios/RNLaunchDarkly.m +++ b/ios/RNLaunchDarkly.m @@ -9,7 +9,7 @@ @implementation RNLaunchDarkly return @[@"FeatureFlagChanged"]; } -RCT_EXPORT_METHOD(configure:(NSString*)apiKey options:(NSDictionary*)options) { +RCT_EXPORT_METHOD(configure:(NSString*)apiKey options:(NSDictionary*)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSLog(@"configure with %@", options); NSString* key = options[@"key"]; @@ -53,6 +53,7 @@ @implementation RNLaunchDarkly if ( self.user ) { bool updatedSuccesfully = [[LDClient sharedInstance] updateUser:user]; NSLog(@"LaunchDarkly User was updated. Key=%@ IsSuccess=%@", key, updatedSuccesfully ? @"YES" : @"NO"); + resolve(@{ @"email": email}); return; } @@ -65,6 +66,7 @@ @implementation RNLaunchDarkly object:nil]; [[LDClient sharedInstance] start:config userBuilder:user]; + resolve(@{ @"email": email}); } RCT_EXPORT_METHOD(boolVariation:(NSString*)flagName callback:(RCTResponseSenderBlock)callback) { From b8ee2aa03bf77cdb1d676de16b189f93ccb9a938 Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Mon, 18 Mar 2019 18:10:28 +0800 Subject: [PATCH 8/9] support custom attribute of type number on Android --- .../main/java/com/launchdarkly/RNLaunchDarklyModule.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index 086272c..05b0463 100644 --- a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -70,7 +70,11 @@ public void configure(String apiKey, ReadableMap options, Promise promise) { while (iterator.hasNextKey()) { String key = iterator.nextKey(); if (!nonCustomFields.contains(key)) { - userBuilder = userBuilder.custom(key, options.getString(key)); + if (options.getType(key) == ReadableType.Number) { + userBuilder = userBuilder.custom(key, options.getDouble(key)); + } else if (options.getType(key) == ReadableType.String) { + userBuilder = userBuilder.custom(key, options.getString(key)); + } Log.d("RNLaunchDarklyModule", "Launch Darkly custom field: " + key); } } From f4ea54bbf654caab98807bb3c1c7ec5bca3db096 Mon Sep 17 00:00:00 2001 From: Sarah Thian Date: Mon, 18 Mar 2019 22:22:04 +0800 Subject: [PATCH 9/9] import ReadableType --- android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java index 05b0463..8044b0b 100644 --- a/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java +++ b/android/src/main/java/com/launchdarkly/RNLaunchDarklyModule.java @@ -14,6 +14,7 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.bridge.WritableMap; +import com.facebook.react.bridge.ReadableType; import com.facebook.react.modules.core.DeviceEventManagerModule; import com.google.common.collect.Sets; import com.launchdarkly.android.FeatureFlagChangeListener;