Skip to content

Commit 1d5a835

Browse files
LaunchDarklyReleaseBotember-stevenstanderson-ldld-repository-standards[bot]kparkinson-ld
authored
prepare 5.0.0 release (#225)
## [5.0.0] - 2023-08-03 ### Added: - Added Automatic Mobile Environment Attributes functionality which makes it simpler to target your mobile customers based on application name or version, or on device characteristics including manufacturer, model, operating system, locale, and so on. To learn more, read [Automatic environment attributes](https://docs.launchdarkly.com/sdk/features/environment-attributes). ### Removed - Removed LDUser and related functionality. Use LDContext instead. To learn more, read https://docs.launchdarkly.com/home/contexts. --------- Co-authored-by: Ember Stevens <[email protected]> Co-authored-by: Ember Stevens <[email protected]> Co-authored-by: Todd Anderson <[email protected]> Co-authored-by: tanderson-ld <[email protected]> Co-authored-by: ld-repository-standards[bot] <113625520+ld-repository-standards[bot]@users.noreply.github.com> Co-authored-by: Kane Parkinson <[email protected]> Co-authored-by: LaunchDarklyReleaseBot <[email protected]>
1 parent 1df1abc commit 1d5a835

File tree

57 files changed

+1427
-550
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1427
-550
lines changed

contract-tests/src/main/java/com/launchdarkly/sdktest/Representations.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.google.gson.annotations.SerializedName;
44
import com.launchdarkly.sdk.EvaluationReason;
55
import com.launchdarkly.sdk.LDContext;
6-
import com.launchdarkly.sdk.LDUser;
76
import com.launchdarkly.sdk.LDValue;
87

98
import java.util.Map;
@@ -68,9 +67,9 @@ public static class SdkConfigServiceEndpointParams {
6867

6968
public static class SdkConfigClientSideParams {
7069
LDContext initialContext;
71-
LDUser initialUser;
7270
boolean evaluationReasons;
7371
boolean useReport;
72+
boolean includeEnvironmentAttributes;
7473
}
7574

7675
public static class CommandParams {
@@ -108,7 +107,6 @@ public static class EvaluateAllFlagsResponse {
108107

109108
public static class IdentifyEventParams {
110109
LDContext context;
111-
LDUser user;
112110
}
113111

114112
public static class CustomEventParams {

contract-tests/src/main/java/com/launchdarkly/sdktest/SdkClientEntity.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ public SdkClientEntity(Application application, CreateInstanceParams params, LDL
6262
long startWaitMs = params.configuration.startWaitTimeMs != null ?
6363
params.configuration.startWaitTimeMs.longValue() : 5000;
6464
Representations.SdkConfigClientSideParams clientSideParams = params.configuration.clientSide;
65-
Future<LDClient> initFuture = clientSideParams.initialUser == null ?
66-
LDClient.init(application, config, clientSideParams.initialContext) :
67-
LDClient.init(application, config, clientSideParams.initialUser);
65+
Future<LDClient> initFuture = LDClient.init(application, config, clientSideParams.initialContext);
6866
// Try to initialize client, but if it fails, keep going in case the test harness wants us to
6967
// work with an uninitialized client
7068
try {
@@ -184,11 +182,7 @@ private EvaluateAllFlagsResponse doEvaluateAll(EvaluateAllFlagsParams params) {
184182

185183
private void doIdentifyEvent(IdentifyEventParams params) {
186184
try {
187-
if (params.user == null) {
188-
client.identify(params.context).get();
189-
} else {
190-
client.identify(params.user).get();
191-
}
185+
client.identify(params.context).get();
192186
} catch (ExecutionException | InterruptedException e) {
193187
throw new RuntimeException("Error waiting for identify", e);
194188
}
@@ -254,7 +248,9 @@ private ContextBuildResponse doContextConvert(ContextConvertParams params) {
254248
}
255249

256250
private LDConfig buildSdkConfig(SdkConfigParams params, LDLogAdapter logAdapter, String tag) {
257-
LDConfig.Builder builder = new LDConfig.Builder();
251+
LDConfig.Builder builder = new LDConfig.Builder(params.clientSide.includeEnvironmentAttributes ?
252+
LDConfig.Builder.AutoEnvAttributes.Enabled : LDConfig.Builder.AutoEnvAttributes.Disabled);
253+
258254
builder.mobileKey(params.credential);
259255
builder.logAdapter(logAdapter).loggerName(tag + ".sdk");
260256

contract-tests/src/main/java/com/launchdarkly/sdktest/TestService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ public class TestService extends NanoHTTPD {
3232
"service-endpoints",
3333
"singleton",
3434
"strongly-typed",
35-
"tags"
35+
"tags",
36+
"auto-env-attributes"
3637
};
3738
private static final String MIME_JSON = "application/json";
3839
static final Gson gson = new GsonBuilder()

example/src/main/java/com/launchdarkly/example/MainActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.launchdarkly.sdk.android.LDAllFlagsListener;
2020
import com.launchdarkly.sdk.android.LDClient;
2121
import com.launchdarkly.sdk.android.LDConfig;
22+
import com.launchdarkly.sdk.android.LDConfig.Builder.AutoEnvAttributes;
2223
import com.launchdarkly.sdk.android.LDFailure;
2324
import com.launchdarkly.sdk.android.LDStatusListener;
2425

@@ -68,7 +69,7 @@ public void onCreate(Bundle savedInstanceState) {
6869
setupOfflineSwitch();
6970
setupListeners();
7071

71-
LDConfig ldConfig = new LDConfig.Builder()
72+
LDConfig ldConfig = new LDConfig.Builder(AutoEnvAttributes.Enabled)
7273
.mobileKey("MOBILE_KEY")
7374
.http(
7475
Components.httpConfiguration().useReport(false)

launchdarkly-android-client-sdk/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ task javadoc(type: Javadoc) {
109109
source android.sourceSets.main.java.srcDirs
110110
// Include common library sources
111111
source configurations.commonDoc.collect { zipTree(it) }
112+
source "$buildDir/generated/source"
112113

113114
include("**/*.java")
114115

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import static org.junit.Assert.assertNotEquals;
1010

1111
@RunWith(AndroidJUnit4.class)
12-
public class UserHasherTest {
12+
public class ContextHasherTest {
1313

1414
@Test
15-
public void testUserHasherReturnsUniqueResults(){
15+
public void testContextHasherReturnsUniqueResults(){
1616
ContextHasher contextHasher1 = new ContextHasher();
1717

1818
String input1 = "{'key':'userKey1'}";
@@ -22,7 +22,7 @@ public void testUserHasherReturnsUniqueResults(){
2222
}
2323

2424
@Test
25-
public void testDifferentUserHashersReturnSameResults(){
25+
public void testDifferentContextHashersReturnSameResults(){
2626
ContextHasher contextHasher1 = new ContextHasher();
2727
ContextHasher contextHasher2 = new ContextHasher();
2828
ContextHasher contextHasher3 = new ContextHasher();
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.launchdarkly.sdk.android;
2+
3+
import android.app.Application;
4+
5+
import androidx.test.core.app.ApplicationProvider;
6+
import androidx.test.ext.junit.runners.AndroidJUnit4;
7+
8+
import com.launchdarkly.sdk.android.env.EnvironmentReporterBuilder;
9+
import com.launchdarkly.sdk.android.env.IEnvironmentReporter;
10+
import com.launchdarkly.sdk.android.integrations.ApplicationInfoBuilder;
11+
import com.launchdarkly.sdk.android.subsystems.ApplicationInfo;
12+
13+
import org.junit.Assert;
14+
import org.junit.Test;
15+
import org.junit.runner.RunWith;
16+
17+
@RunWith(AndroidJUnit4.class)
18+
public class EnvironmentReporterBuilderTest {
19+
20+
/**
21+
* Requirement 1.2.5.2 - Prioritized sourcing application info attributes
22+
*/
23+
@Test
24+
public void prioritizesProvidedApplicationInfo() {
25+
26+
Application application = ApplicationProvider.getApplicationContext();
27+
EnvironmentReporterBuilder builder1 = new EnvironmentReporterBuilder();
28+
builder1.enableCollectionFromPlatform(application);
29+
IEnvironmentReporter reporter1 = builder1.build();
30+
ApplicationInfo reporter1Output = reporter1.getApplicationInfo();
31+
32+
EnvironmentReporterBuilder builder2 = new EnvironmentReporterBuilder();
33+
ApplicationInfo manualInfoInput = new ApplicationInfoBuilder().applicationId("manualAppID").createApplicationInfo();
34+
builder2.setApplicationInfo(manualInfoInput);
35+
builder2.enableCollectionFromPlatform(application);
36+
IEnvironmentReporter reporter2 = builder2.build();
37+
ApplicationInfo reporter2Output = reporter2.getApplicationInfo();
38+
39+
Assert.assertNotEquals(reporter1Output.getApplicationId(), reporter2Output.getApplicationId());
40+
Assert.assertEquals(manualInfoInput.getApplicationId(), reporter2Output.getApplicationId());
41+
}
42+
43+
@Test
44+
public void defaultsToSDKValues() {
45+
IEnvironmentReporter reporter = new EnvironmentReporterBuilder().build();
46+
Assert.assertEquals(LDPackageConsts.SDK_NAME, reporter.getApplicationInfo().getApplicationId());
47+
Assert.assertEquals(LDPackageConsts.SDK_NAME, reporter.getApplicationInfo().getApplicationName());
48+
Assert.assertEquals(BuildConfig.VERSION_NAME, reporter.getApplicationInfo().getApplicationVersion());
49+
Assert.assertEquals(BuildConfig.VERSION_NAME, reporter.getApplicationInfo().getApplicationVersionName());
50+
51+
}
52+
}

launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEndToEndTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.launchdarkly.sdk.LDContext;
1515
import com.launchdarkly.sdk.LDValue;
1616
import com.launchdarkly.sdk.android.DataModel.Flag;
17+
import com.launchdarkly.sdk.android.LDConfig.Builder.AutoEnvAttributes;
1718
import com.launchdarkly.sdk.android.subsystems.PersistentDataStore;
1819

1920
import org.junit.After;
@@ -71,7 +72,7 @@ public void after() throws IOException {
7172
}
7273

7374
private LDConfig.Builder baseConfig() {
74-
return new LDConfig.Builder()
75+
return new LDConfig.Builder(AutoEnvAttributes.Disabled)
7576
.mobileKey(MOBILE_KEY)
7677
.persistentDataStore(store)
7778
.diagnosticOptOut(true)

launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientEvaluationTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.launchdarkly.sdk.EvaluationReason;
1414
import com.launchdarkly.sdk.LDContext;
1515
import com.launchdarkly.sdk.LDValue;
16+
import com.launchdarkly.sdk.android.LDConfig.Builder.AutoEnvAttributes;
1617
import com.launchdarkly.sdk.android.subsystems.ComponentConfigurer;
1718
import com.launchdarkly.sdk.android.subsystems.DataSource;
1819

@@ -171,7 +172,7 @@ private LDClient makeClientWithData(EnvironmentData data) {
171172
ComponentConfigurer<DataSource> dataSourceConfig = clientContext ->
172173
MockComponents.successfulDataSource(clientContext, data, ConnectionInformation.ConnectionMode.POLLING,
173174
null, null);
174-
LDConfig config = new LDConfig.Builder()
175+
LDConfig config = new LDConfig.Builder(AutoEnvAttributes.Disabled)
175176
.mobileKey(mobileKey)
176177
.dataSource(dataSourceConfig)
177178
.events(Components.noEvents())

0 commit comments

Comments
 (0)