Skip to content

Commit

Permalink
prepare 5.0.0 release (#225)
Browse files Browse the repository at this point in the history
## [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]>
  • Loading branch information
8 people authored Aug 3, 2023
1 parent 1df1abc commit 1d5a835
Show file tree
Hide file tree
Showing 57 changed files with 1,427 additions and 550 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.google.gson.annotations.SerializedName;
import com.launchdarkly.sdk.EvaluationReason;
import com.launchdarkly.sdk.LDContext;
import com.launchdarkly.sdk.LDUser;
import com.launchdarkly.sdk.LDValue;

import java.util.Map;
Expand Down Expand Up @@ -68,9 +67,9 @@ public static class SdkConfigServiceEndpointParams {

public static class SdkConfigClientSideParams {
LDContext initialContext;
LDUser initialUser;
boolean evaluationReasons;
boolean useReport;
boolean includeEnvironmentAttributes;
}

public static class CommandParams {
Expand Down Expand Up @@ -108,7 +107,6 @@ public static class EvaluateAllFlagsResponse {

public static class IdentifyEventParams {
LDContext context;
LDUser user;
}

public static class CustomEventParams {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,7 @@ public SdkClientEntity(Application application, CreateInstanceParams params, LDL
long startWaitMs = params.configuration.startWaitTimeMs != null ?
params.configuration.startWaitTimeMs.longValue() : 5000;
Representations.SdkConfigClientSideParams clientSideParams = params.configuration.clientSide;
Future<LDClient> initFuture = clientSideParams.initialUser == null ?
LDClient.init(application, config, clientSideParams.initialContext) :
LDClient.init(application, config, clientSideParams.initialUser);
Future<LDClient> initFuture = LDClient.init(application, config, clientSideParams.initialContext);
// Try to initialize client, but if it fails, keep going in case the test harness wants us to
// work with an uninitialized client
try {
Expand Down Expand Up @@ -184,11 +182,7 @@ private EvaluateAllFlagsResponse doEvaluateAll(EvaluateAllFlagsParams params) {

private void doIdentifyEvent(IdentifyEventParams params) {
try {
if (params.user == null) {
client.identify(params.context).get();
} else {
client.identify(params.user).get();
}
client.identify(params.context).get();
} catch (ExecutionException | InterruptedException e) {
throw new RuntimeException("Error waiting for identify", e);
}
Expand Down Expand Up @@ -254,7 +248,9 @@ private ContextBuildResponse doContextConvert(ContextConvertParams params) {
}

private LDConfig buildSdkConfig(SdkConfigParams params, LDLogAdapter logAdapter, String tag) {
LDConfig.Builder builder = new LDConfig.Builder();
LDConfig.Builder builder = new LDConfig.Builder(params.clientSide.includeEnvironmentAttributes ?
LDConfig.Builder.AutoEnvAttributes.Enabled : LDConfig.Builder.AutoEnvAttributes.Disabled);

builder.mobileKey(params.credential);
builder.logAdapter(logAdapter).loggerName(tag + ".sdk");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ public class TestService extends NanoHTTPD {
"service-endpoints",
"singleton",
"strongly-typed",
"tags"
"tags",
"auto-env-attributes"
};
private static final String MIME_JSON = "application/json";
static final Gson gson = new GsonBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.launchdarkly.sdk.android.LDAllFlagsListener;
import com.launchdarkly.sdk.android.LDClient;
import com.launchdarkly.sdk.android.LDConfig;
import com.launchdarkly.sdk.android.LDConfig.Builder.AutoEnvAttributes;
import com.launchdarkly.sdk.android.LDFailure;
import com.launchdarkly.sdk.android.LDStatusListener;

Expand Down Expand Up @@ -68,7 +69,7 @@ public void onCreate(Bundle savedInstanceState) {
setupOfflineSwitch();
setupListeners();

LDConfig ldConfig = new LDConfig.Builder()
LDConfig ldConfig = new LDConfig.Builder(AutoEnvAttributes.Enabled)
.mobileKey("MOBILE_KEY")
.http(
Components.httpConfiguration().useReport(false)
Expand Down
1 change: 1 addition & 0 deletions launchdarkly-android-client-sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ task javadoc(type: Javadoc) {
source android.sourceSets.main.java.srcDirs
// Include common library sources
source configurations.commonDoc.collect { zipTree(it) }
source "$buildDir/generated/source"

include("**/*.java")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import static org.junit.Assert.assertNotEquals;

@RunWith(AndroidJUnit4.class)
public class UserHasherTest {
public class ContextHasherTest {

@Test
public void testUserHasherReturnsUniqueResults(){
public void testContextHasherReturnsUniqueResults(){
ContextHasher contextHasher1 = new ContextHasher();

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

@Test
public void testDifferentUserHashersReturnSameResults(){
public void testDifferentContextHashersReturnSameResults(){
ContextHasher contextHasher1 = new ContextHasher();
ContextHasher contextHasher2 = new ContextHasher();
ContextHasher contextHasher3 = new ContextHasher();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.launchdarkly.sdk.android;

import android.app.Application;

import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.launchdarkly.sdk.android.env.EnvironmentReporterBuilder;
import com.launchdarkly.sdk.android.env.IEnvironmentReporter;
import com.launchdarkly.sdk.android.integrations.ApplicationInfoBuilder;
import com.launchdarkly.sdk.android.subsystems.ApplicationInfo;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class EnvironmentReporterBuilderTest {

/**
* Requirement 1.2.5.2 - Prioritized sourcing application info attributes
*/
@Test
public void prioritizesProvidedApplicationInfo() {

Application application = ApplicationProvider.getApplicationContext();
EnvironmentReporterBuilder builder1 = new EnvironmentReporterBuilder();
builder1.enableCollectionFromPlatform(application);
IEnvironmentReporter reporter1 = builder1.build();
ApplicationInfo reporter1Output = reporter1.getApplicationInfo();

EnvironmentReporterBuilder builder2 = new EnvironmentReporterBuilder();
ApplicationInfo manualInfoInput = new ApplicationInfoBuilder().applicationId("manualAppID").createApplicationInfo();
builder2.setApplicationInfo(manualInfoInput);
builder2.enableCollectionFromPlatform(application);
IEnvironmentReporter reporter2 = builder2.build();
ApplicationInfo reporter2Output = reporter2.getApplicationInfo();

Assert.assertNotEquals(reporter1Output.getApplicationId(), reporter2Output.getApplicationId());
Assert.assertEquals(manualInfoInput.getApplicationId(), reporter2Output.getApplicationId());
}

@Test
public void defaultsToSDKValues() {
IEnvironmentReporter reporter = new EnvironmentReporterBuilder().build();
Assert.assertEquals(LDPackageConsts.SDK_NAME, reporter.getApplicationInfo().getApplicationId());
Assert.assertEquals(LDPackageConsts.SDK_NAME, reporter.getApplicationInfo().getApplicationName());
Assert.assertEquals(BuildConfig.VERSION_NAME, reporter.getApplicationInfo().getApplicationVersion());
Assert.assertEquals(BuildConfig.VERSION_NAME, reporter.getApplicationInfo().getApplicationVersionName());

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.launchdarkly.sdk.LDContext;
import com.launchdarkly.sdk.LDValue;
import com.launchdarkly.sdk.android.DataModel.Flag;
import com.launchdarkly.sdk.android.LDConfig.Builder.AutoEnvAttributes;
import com.launchdarkly.sdk.android.subsystems.PersistentDataStore;

import org.junit.After;
Expand Down Expand Up @@ -71,7 +72,7 @@ public void after() throws IOException {
}

private LDConfig.Builder baseConfig() {
return new LDConfig.Builder()
return new LDConfig.Builder(AutoEnvAttributes.Disabled)
.mobileKey(MOBILE_KEY)
.persistentDataStore(store)
.diagnosticOptOut(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.launchdarkly.sdk.EvaluationReason;
import com.launchdarkly.sdk.LDContext;
import com.launchdarkly.sdk.LDValue;
import com.launchdarkly.sdk.android.LDConfig.Builder.AutoEnvAttributes;
import com.launchdarkly.sdk.android.subsystems.ComponentConfigurer;
import com.launchdarkly.sdk.android.subsystems.DataSource;

Expand Down Expand Up @@ -171,7 +172,7 @@ private LDClient makeClientWithData(EnvironmentData data) {
ComponentConfigurer<DataSource> dataSourceConfig = clientContext ->
MockComponents.successfulDataSource(clientContext, data, ConnectionInformation.ConnectionMode.POLLING,
null, null);
LDConfig config = new LDConfig.Builder()
LDConfig config = new LDConfig.Builder(AutoEnvAttributes.Disabled)
.mobileKey(mobileKey)
.dataSource(dataSourceConfig)
.events(Components.noEvents())
Expand Down
Loading

0 comments on commit 1d5a835

Please sign in to comment.