Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .github/workflows/instrumented.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:

jobs:
test:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest

strategy:
fail-fast: false
Expand All @@ -18,23 +18,17 @@ jobs:
shard: [ 0, 1, 2, 3 ]

steps:
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- name: checkout
uses: actions/checkout@v4

- name: Gradle cache
uses: gradle/gradle-build-action@v3

- name: Set up JDK 11
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 11
java-version: 17
cache: 'gradle'

- name: AVD cache
Expand All @@ -46,6 +40,12 @@ jobs:
~/.android/adb*
key: avd-${{ matrix.api-level }}

- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- name: create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ gradle.properties
*.iml
.DS_Store
.settings/org.eclipse.buildship.core.prefs
.gradle
.gradle
.vscode/
54 changes: 48 additions & 6 deletions src/androidTest/java/fake/SplitClientStub.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.split.android.client.EvaluationOptions;
import io.split.android.client.SplitClient;
import io.split.android.client.SplitResult;
import io.split.android.client.events.SplitEvent;
Expand All @@ -23,39 +25,79 @@ public String getTreatment(String featureFlagName, Map<String, Object> attribute
return "control";
}

@Override
public String getTreatment(String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return getTreatment(featureFlagName, attributes);
}

@Override
public SplitResult getTreatmentWithConfig(String featureFlagName, Map<String, Object> attributes) {
return getTreatmentWithConfig(featureFlagName, attributes, null);
}

@Override
public SplitResult getTreatmentWithConfig(String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return null;
}

@Override
public Map<String, String> getTreatments(List<String> featureFlagNames, Map<String, Object> attributes) {
return null;
return getTreatments(featureFlagNames, attributes, null);
}

@Override
public Map<String, String> getTreatments(List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfig(List<String> featureFlagNames, Map<String, Object> attributes) {
return null;
return getTreatmentsWithConfig(featureFlagNames, attributes, null);
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfig(List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public Map<String, String> getTreatmentsByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes) {
return null;
return getTreatmentsByFlagSet(flagSet, attributes, null);
}

@Override
public Map<String, String> getTreatmentsByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public Map<String, String> getTreatmentsByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes) {
return null;
return getTreatmentsByFlagSets(flagSets, attributes, null);
}

@Override
public Map<String, String> getTreatmentsByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes) {
return null;
return getTreatmentsWithConfigByFlagSet(flagSet, attributes, null);
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes) {
return null;
return getTreatmentsWithConfigByFlagSets(flagSets, attributes, null);
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ public Map<String, String> getTreatments(List<String> featureFlagNames, Map<Stri
return results;
}

@Override
public Map<String, String> getTreatments(List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfig(List<String> featureFlagNames, Map<String, Object> attributes) {
Map<String, SplitResult> results = new HashMap<>();
Expand All @@ -50,36 +55,71 @@ public Map<String, SplitResult> getTreatmentsWithConfig(List<String> featureFlag
return results;
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfig(List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public String getTreatment(String featureFlagName, Map<String, Object> attributes) {
return Treatments.CONTROL;
}

@Override
public String getTreatment(String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return getTreatment(featureFlagName, attributes);
}

@Override
public SplitResult getTreatmentWithConfig(String featureFlagName, Map<String, Object> attributes) {
return new SplitResult(Treatments.CONTROL);
}

@Override
public SplitResult getTreatmentWithConfig(String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return getTreatmentWithConfig(featureFlagName, attributes);
}

@Override
public Map<String, String> getTreatmentsByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes) {
return Collections.emptyMap();
}

@Override
public Map<String, String> getTreatmentsByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return Collections.emptyMap();
}

@Override
public Map<String, String> getTreatmentsByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes) {
return Collections.emptyMap();
}

@Override
public Map<String, String> getTreatmentsByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return getTreatmentsByFlagSets(flagSets, attributes);
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes) {
return Collections.emptyMap();
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return getTreatmentsWithConfigByFlagSet(flagSet, attributes);
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes) {
return Collections.emptyMap();
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
return getTreatmentsWithConfigByFlagSets(flagSets, attributes);
}

@Override
public boolean setAttribute(String attributeName, Object value) {
return true;
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/io/split/android/client/EvaluationOptions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package io.split.android.client;

import androidx.annotation.Nullable;

import java.util.HashMap;
import java.util.Map;

public class EvaluationOptions {

private final Map<String, Object> mProperties;

public EvaluationOptions(Map<String, Object> properties) {
mProperties = properties != null ? new HashMap<>(properties) : null;
}

public Map<String, Object> getProperties() {
return mProperties != null ? new HashMap<>(mProperties) : null;
}

@Override
public boolean equals(@Nullable Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof EvaluationOptions)) {
return false;
}
EvaluationOptions other = (EvaluationOptions) obj;
if (mProperties == null) {
return other.mProperties == null;
}
return mProperties.equals(other.mProperties);
}

@Override
public int hashCode() {
return mProperties != null ? mProperties.hashCode() : 0;
}
}
14 changes: 14 additions & 0 deletions src/main/java/io/split/android/client/SplitClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public interface SplitClient extends AttributesManager {
*/
String getTreatment(String featureFlagName, Map<String, Object> attributes);

String getTreatment(String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* This method is useful when you want to determine the treatment to show
Expand All @@ -77,6 +78,8 @@ public interface SplitClient extends AttributesManager {
*/
SplitResult getTreatmentWithConfig(String featureFlagName, Map<String, Object> attributes);

SplitResult getTreatmentWithConfig(String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* This method is useful when you want to determine the treatment of several feature flags at
* the same time.
Expand All @@ -90,6 +93,7 @@ public interface SplitClient extends AttributesManager {
*/
Map<String, String> getTreatments(List<String> featureFlagNames, Map<String, Object> attributes);

Map<String, String> getTreatments(List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* This method is useful when you want to determine the treatment of several feature flags at
Expand All @@ -105,6 +109,8 @@ public interface SplitClient extends AttributesManager {
*/
Map<String, SplitResult> getTreatmentsWithConfig(List<String> featureFlagNames, Map<String, Object> attributes);

Map<String, SplitResult> getTreatmentsWithConfig(List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* This method is useful when you want to determine the treatment of several feature flags
* belonging to a specific Flag Set at the same time.
Expand All @@ -115,6 +121,8 @@ public interface SplitClient extends AttributesManager {
*/
Map<String, String> getTreatmentsByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes);

Map<String, String> getTreatmentsByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* This method is useful when you want to determine the treatment of several feature flags
* belonging to a specific list of Flag Sets at the same time.
Expand All @@ -125,6 +133,8 @@ public interface SplitClient extends AttributesManager {
*/
Map<String, String> getTreatmentsByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes);

Map<String, String> getTreatmentsByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* This method is useful when you want to determine the treatment of several feature flags
* belonging to a specific Flag Set
Expand All @@ -135,6 +145,8 @@ public interface SplitClient extends AttributesManager {
*/
Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes);

Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(@NonNull String flagSet, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* This method is useful when you want to determine the treatment of several feature flags
* belonging to a specific list of Flag Sets
Expand All @@ -145,6 +157,8 @@ public interface SplitClient extends AttributesManager {
*/
Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes);

Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(@NonNull List<String> flagSets, @Nullable Map<String, Object> attributes, EvaluationOptions evaluationOptions);

/**
* Destroys the background processes and clears the cache, releasing the resources used by
* any instances of SplitClient or SplitManager generated by the client's parent SplitFactory
Expand Down
Loading
Loading