Skip to content

Commit b724e40

Browse files
authored
Feat: custom odpEventManager and odpSegmentManager (#447)
1 parent 585f099 commit b724e40

File tree

4 files changed

+59
-4
lines changed

4 files changed

+59
-4
lines changed

android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@
5454
import com.optimizely.ab.notification.NotificationCenter;
5555
import com.optimizely.ab.notification.UpdateConfigNotification;
5656
import com.optimizely.ab.odp.ODPApiManager;
57+
import com.optimizely.ab.odp.ODPEventManager;
5758
import com.optimizely.ab.odp.ODPManager;
59+
import com.optimizely.ab.odp.ODPSegmentManager;
5860
import com.optimizely.ab.optimizelydecision.OptimizelyDecideOption;
5961

6062
import org.slf4j.Logger;
@@ -740,6 +742,8 @@ public static class Builder {
740742
@Nullable private String sdkKey = null;
741743
@Nullable private DatafileConfig datafileConfig = null;
742744
@Nullable private List<OptimizelyDecideOption> defaultDecideOptions = null;
745+
@Nullable private ODPEventManager odpEventManager;
746+
@Nullable private ODPSegmentManager odpSegmentManager;
743747

744748
private int odpSegmentCacheSize = 100;
745749
private int odpSegmentCacheTimeoutInSecs = 600;
@@ -947,6 +951,32 @@ public Builder withTimeoutForODPEventDispatch(int interval) {
947951
return this;
948952
}
949953

954+
/**
955+
* Provide an optional custom {@link ODPEventManager} instance.
956+
*
957+
* A Default {@link ODPEventManager} implementation is automatically used if none provided.
958+
*
959+
* @param odpEventManager The implementation of {@link ODPEventManager}
960+
* @return ODPManager builder
961+
*/
962+
public Builder withODPEventManager(ODPEventManager odpEventManager) {
963+
this.odpEventManager = odpEventManager;
964+
return this;
965+
}
966+
967+
/**
968+
* Provide an optional custom {@link ODPSegmentManager} instance.
969+
*
970+
* A Default {@link ODPSegmentManager} implementation is automatically used if none provided.
971+
*
972+
* @param odpSegmentManager The implementation of {@link ODPSegmentManager}
973+
* @return this {@link Builder} instance
974+
*/
975+
public Builder withODPSegmentManager(ODPSegmentManager odpSegmentManager) {
976+
this.odpSegmentManager = odpSegmentManager;
977+
return this;
978+
}
979+
950980
/**
951981
* Disable ODP integration.
952982
* @return this {@link Builder} instance
@@ -1059,6 +1089,8 @@ public OptimizelyManager build(Context context) {
10591089
.withSegmentCacheSize(odpSegmentCacheSize)
10601090
.withSegmentCacheTimeout(odpSegmentCacheTimeoutInSecs)
10611091
.withUserCommonData(commonData)
1092+
.withSegmentManager(odpSegmentManager)
1093+
.withEventManager(odpEventManager)
10621094
.withUserCommonIdentifiers(commonIdentifiers)
10631095
.build();
10641096
}

datafile-handler/src/main/java/com/optimizely/ab/android/datafile_handler/DefaultDatafileHandler.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,4 +308,17 @@ public void setDatafile(String datafile) {
308308
public ProjectConfig getConfig() {
309309
return currentProjectConfig;
310310
}
311+
312+
@Override
313+
public ProjectConfig getCachedConfig() {
314+
return currentProjectConfig;
315+
}
316+
317+
@Override
318+
public String getSDKKey() {
319+
if (currentProjectConfig != null) {
320+
return currentProjectConfig.getSdkKey();
321+
}
322+
return null;
323+
}
311324
}

odp/src/main/java/com/optimizely/ab/android/odp/DefaultODPApiManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class DefaultODPApiManager(private val context: Context, timeoutForSegmentFetch:
4343
userKey: String,
4444
userValue: String,
4545
segmentsToCheck: Set<String>,
46-
): String? {
46+
): List<String>? {
4747
return segmentClient.fetchQualifiedSegments(
4848
apiKey,
4949
apiEndpoint,

odp/src/main/java/com/optimizely/ab/android/odp/ODPSegmentClient.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ package com.optimizely.ab.android.odp
1616

1717
import androidx.annotation.VisibleForTesting
1818
import com.optimizely.ab.android.shared.Client
19+
import com.optimizely.ab.odp.parser.ResponseJsonParser
20+
import com.optimizely.ab.odp.parser.ResponseJsonParserFactory
1921
import org.slf4j.Logger
22+
import java.io.IOException
2023
import java.net.HttpURLConnection
2124
import java.net.URL
2225

@@ -28,7 +31,7 @@ open class ODPSegmentClient(private val client: Client, private val logger: Logg
2831
apiKey: String,
2932
apiEndpoint: String,
3033
payload: String
31-
): String? {
34+
): List<String>? {
3235

3336
val request: Client.Request<String> = Client.Request {
3437
var urlConnection: HttpURLConnection? = null
@@ -74,8 +77,15 @@ open class ODPSegmentClient(private val client: Client, private val logger: Logg
7477
}
7578
}
7679
}
77-
78-
return client.execute(request, REQUEST_BACKOFF_TIMEOUT, REQUEST_RETRIES_POWER)
80+
val response = client.execute(request, REQUEST_BACKOFF_TIMEOUT, REQUEST_RETRIES_POWER)
81+
val parser: ResponseJsonParser = ResponseJsonParserFactory.getParser()
82+
try {
83+
return parser.parseQualifiedSegments(response)
84+
} catch (e: java.lang.Exception) {
85+
logger.error("Audience segments fetch failed (Error Parsing Response)")
86+
logger.debug(e.message)
87+
}
88+
return null
7989
}
8090

8191
companion object {

0 commit comments

Comments
 (0)