Skip to content

Commit 4342e08

Browse files
authored
Merge branch 'master' into test-fsc-2
2 parents b23f6b6 + efbda89 commit 4342e08

27 files changed

+1665
-337
lines changed

core-api/src/main/java/com/optimizely/ab/Optimizely.java

Lines changed: 169 additions & 38 deletions
Large diffs are not rendered by default.

core-api/src/main/java/com/optimizely/ab/OptimizelyUserContext.java

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,26 @@
1616
*/
1717
package com.optimizely.ab;
1818

19-
import com.optimizely.ab.config.ProjectConfig;
20-
import com.optimizely.ab.odp.ODPManager;
21-
import com.optimizely.ab.odp.ODPSegmentCallback;
22-
import com.optimizely.ab.odp.ODPSegmentOption;
23-
import com.optimizely.ab.optimizelydecision.*;
24-
import org.slf4j.Logger;
25-
import org.slf4j.LoggerFactory;
19+
import java.util.Collections;
20+
import java.util.HashMap;
21+
import java.util.LinkedList;
22+
import java.util.List;
23+
import java.util.Map;
24+
import java.util.concurrent.ConcurrentHashMap;
2625

2726
import javax.annotation.Nonnull;
2827
import javax.annotation.Nullable;
29-
import java.util.*;
30-
import java.util.concurrent.ConcurrentHashMap;
28+
29+
import com.optimizely.ab.annotations.VisibleForTesting;
30+
import com.optimizely.ab.optimizelydecision.OptimizelyDecisionCallback;
31+
import com.optimizely.ab.optimizelydecision.OptimizelyDecisionsCallback;
32+
import org.slf4j.Logger;
33+
import org.slf4j.LoggerFactory;
34+
35+
import com.optimizely.ab.odp.ODPSegmentCallback;
36+
import com.optimizely.ab.odp.ODPSegmentOption;
37+
import com.optimizely.ab.optimizelydecision.OptimizelyDecideOption;
38+
import com.optimizely.ab.optimizelydecision.OptimizelyDecision;
3139

3240
public class OptimizelyUserContext {
3341
// OptimizelyForcedDecisionsKey mapped to variationKeys
@@ -42,7 +50,7 @@ public class OptimizelyUserContext {
4250
private List<String> qualifiedSegments;
4351

4452
@Nonnull
45-
private final Optimizely optimizely;
53+
final Optimizely optimizely;
4654

4755
private static final Logger logger = LoggerFactory.getLogger(OptimizelyUserContext.class);
4856

@@ -390,4 +398,44 @@ public String toString() {
390398
", attributes='" + attributes + '\'' +
391399
'}';
392400
}
401+
402+
// sync decision support for android-sdk backward compatibility only
403+
404+
@VisibleForTesting // protected, open for testing only
405+
public OptimizelyDecision decideSync(@Nonnull String key,
406+
@Nonnull List<OptimizelyDecideOption> options) {
407+
return optimizely.decideSync(copy(), key, options);
408+
}
409+
410+
@VisibleForTesting // protected, open for testing only
411+
public Map<String, OptimizelyDecision> decideForKeysSync(@Nonnull List<String> keys,
412+
@Nonnull List<OptimizelyDecideOption> options) {
413+
return optimizely.decideForKeysSync(copy(), keys, options);
414+
}
415+
416+
@VisibleForTesting // protected, open for testing only
417+
public Map<String, OptimizelyDecision> decideAllSync(@Nonnull List<OptimizelyDecideOption> options) {
418+
return optimizely.decideAllSync(copy(), options);
419+
}
420+
421+
@VisibleForTesting // protected, open for testing only
422+
public void decideAsync(@Nonnull String key,
423+
@Nonnull List<OptimizelyDecideOption> options,
424+
@Nonnull OptimizelyDecisionCallback callback) {
425+
optimizely.decideAsync(copy(), key, options, callback);
426+
}
427+
428+
@VisibleForTesting // protected, open for testing only
429+
public void decideForKeysAsync(@Nonnull List<String> keys,
430+
@Nonnull List<OptimizelyDecideOption> options,
431+
@Nonnull OptimizelyDecisionsCallback callback) {
432+
optimizely.decideForKeysAsync(copy(), keys, options, callback);
433+
}
434+
435+
@VisibleForTesting // protected, open for testing only
436+
public void decideAllAsync(@Nonnull List<OptimizelyDecideOption> options,
437+
@Nonnull OptimizelyDecisionsCallback callback) {
438+
optimizely.decideAllAsync(copy(), options, callback);
439+
}
440+
393441
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/****************************************************************************
2+
* Copyright 2025 Optimizely, Inc. and contributors *
3+
* *
4+
* Licensed under the Apache License, Version 2.0 (the "License"); *
5+
* you may not use this file except in compliance with the License. *
6+
* You may obtain a copy of the License at *
7+
* *
8+
* http://www.apache.org/licenses/LICENSE-2.0 *
9+
* *
10+
* Unless required by applicable law or agreed to in writing, software *
11+
* distributed under the License is distributed on an "AS IS" BASIS, *
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13+
* See the License for the specific language governing permissions and *
14+
* limitations under the License. *
15+
***************************************************************************/
16+
package com.optimizely.ab.bucketing;
17+
18+
public enum DecisionPath {
19+
WITH_CMAB, // Use CMAB logic
20+
WITHOUT_CMAB // Skip CMAB logic (traditional A/B testing)
21+
}

0 commit comments

Comments
 (0)