6464import com .optimizely .ab .optimizelyconfig .OptimizelyConfig ;
6565import com .optimizely .ab .optimizelyconfig .OptimizelyConfigManager ;
6666import com .optimizely .ab .optimizelyconfig .OptimizelyConfigService ;
67- import com .optimizely .ab .optimizelydecision .DecisionMessage ;
68- import com .optimizely .ab .optimizelydecision .DecisionReasons ;
69- import com .optimizely .ab .optimizelydecision .DecisionResponse ;
70- import com .optimizely .ab .optimizelydecision .DefaultDecisionReasons ;
71- import com .optimizely .ab .optimizelydecision .OptimizelyDecideOption ;
72- import com .optimizely .ab .optimizelydecision .OptimizelyDecision ;
67+ import com .optimizely .ab .optimizelydecision .*;
7368import com .optimizely .ab .optimizelyjson .OptimizelyJSON ;
7469
7570import org .slf4j .Logger ;
@@ -1525,8 +1520,8 @@ Map<String, OptimizelyDecision> decideAll(@Nonnull OptimizelyUserContext user,
15251520 * @return A decision result using traditional A/B testing logic only.
15261521 */
15271522 OptimizelyDecision decideSync (@ Nonnull OptimizelyUserContext user ,
1528- @ Nonnull String key ,
1529- @ Nonnull List <OptimizelyDecideOption > options ) {
1523+ @ Nonnull String key ,
1524+ @ Nonnull List <OptimizelyDecideOption > options ) {
15301525 ProjectConfig projectConfig = getProjectConfig ();
15311526 if (projectConfig == null ) {
15321527 return OptimizelyDecision .newErrorDecision (key , user , DecisionMessage .SDK_NOT_READY .reason ());
@@ -1541,28 +1536,28 @@ OptimizelyDecision decideSync(@Nonnull OptimizelyUserContext user,
15411536 /**
15421537 * Returns decision results for multiple flag keys, skipping CMAB logic and using only traditional A/B testing.
15431538 * This will be called by mobile apps which will make synchronous decisions only (for backward compatibility with android-sdk)
1544- *
1539+ *
15451540 * @param user An OptimizelyUserContext associated with this OptimizelyClient.
15461541 * @param keys A list of flag keys for which decisions will be made.
15471542 * @param options A list of options for decision-making.
15481543 * @return All decision results mapped by flag keys, using traditional A/B testing logic only.
15491544 */
15501545 Map <String , OptimizelyDecision > decideForKeysSync (@ Nonnull OptimizelyUserContext user ,
1551- @ Nonnull List <String > keys ,
1552- @ Nonnull List <OptimizelyDecideOption > options ) {
1546+ @ Nonnull List <String > keys ,
1547+ @ Nonnull List <OptimizelyDecideOption > options ) {
15531548 return decideForKeysSync (user , keys , options , false );
15541549 }
15551550
15561551 /**
15571552 * Returns decision results for all active flag keys, skipping CMAB logic and using only traditional A/B testing.
15581553 * This will be called by mobile apps which will make synchronous decisions only (for backward compatibility with android-sdk)
1559- *
1554+ *
15601555 * @param user An OptimizelyUserContext associated with this OptimizelyClient.
15611556 * @param options A list of options for decision-making.
15621557 * @return All decision results mapped by flag keys, using traditional A/B testing logic only.
15631558 */
15641559 Map <String , OptimizelyDecision > decideAllSync (@ Nonnull OptimizelyUserContext user ,
1565- @ Nonnull List <OptimizelyDecideOption > options ) {
1560+ @ Nonnull List <OptimizelyDecideOption > options ) {
15661561 Map <String , OptimizelyDecision > decisionMap = new HashMap <>();
15671562
15681563 ProjectConfig projectConfig = getProjectConfig ();
@@ -1579,12 +1574,59 @@ Map<String, OptimizelyDecision> decideAllSync(@Nonnull OptimizelyUserContext use
15791574 }
15801575
15811576 private Map <String , OptimizelyDecision > decideForKeysSync (@ Nonnull OptimizelyUserContext user ,
1582- @ Nonnull List <String > keys ,
1583- @ Nonnull List <OptimizelyDecideOption > options ,
1584- boolean ignoreDefaultOptions ) {
1577+ @ Nonnull List <String > keys ,
1578+ @ Nonnull List <OptimizelyDecideOption > options ,
1579+ boolean ignoreDefaultOptions ) {
15851580 return decideForKeys (user , keys , options , ignoreDefaultOptions , DecisionPath .WITHOUT_CMAB );
15861581 }
15871582
1583+ //============ decide async ============//
1584+
1585+ /**
1586+ * Returns a decision result asynchronously for a given flag key and a user context.
1587+ *
1588+ * @param userContext The user context to make decisions for
1589+ * @param key A flag key for which a decision will be made
1590+ * @param callback A callback to invoke when the decision is available
1591+ * @param options A list of options for decision-making
1592+ */
1593+ public void decideAsync (@ Nonnull OptimizelyUserContext userContext ,
1594+ @ Nonnull String key ,
1595+ @ Nonnull OptimizelyDecisionCallback callback ,
1596+ @ Nonnull List <OptimizelyDecideOption > options ) {
1597+ AsyncDecisionFetcher fetcher = new AsyncDecisionFetcher (userContext , key , options , callback );
1598+ fetcher .start ();
1599+ }
1600+
1601+ /**
1602+ * Returns decision results asynchronously for multiple flag keys.
1603+ *
1604+ * @param userContext The user context to make decisions for
1605+ * @param keys A list of flag keys for which decisions will be made
1606+ * @param callback A callback to invoke when decisions are available
1607+ * @param options A list of options for decision-making
1608+ */
1609+ public void decideForKeysAsync (@ Nonnull OptimizelyUserContext userContext ,
1610+ @ Nonnull List <String > keys ,
1611+ @ Nonnull OptimizelyDecisionsCallback callback ,
1612+ @ Nonnull List <OptimizelyDecideOption > options ) {
1613+ AsyncDecisionFetcher fetcher = new AsyncDecisionFetcher (userContext , keys , options , callback );
1614+ fetcher .start ();
1615+ }
1616+
1617+ /**
1618+ * Returns decision results asynchronously for all active flag keys.
1619+ *
1620+ * @param userContext The user context to make decisions for
1621+ * @param callback A callback to invoke when decisions are available
1622+ * @param options A list of options for decision-making
1623+ */
1624+ public void decideAllAsync (@ Nonnull OptimizelyUserContext userContext ,
1625+ @ Nonnull OptimizelyDecisionsCallback callback ,
1626+ @ Nonnull List <OptimizelyDecideOption > options ) {
1627+ AsyncDecisionFetcher fetcher = new AsyncDecisionFetcher (userContext , options , callback );
1628+ fetcher .start ();
1629+ }
15881630
15891631 private List <OptimizelyDecideOption > getAllOptions (List <OptimizelyDecideOption > options ) {
15901632 List <OptimizelyDecideOption > copiedOptions = new ArrayList (defaultDecideOptions );
0 commit comments