|
62 | 62 | import java.util.List; |
63 | 63 | import java.util.Map; |
64 | 64 | import java.util.Set; |
| 65 | +import java.util.concurrent.CountDownLatch; |
65 | 66 | import java.util.concurrent.TimeUnit; |
66 | 67 |
|
67 | 68 | public class APISamplesInJava { |
68 | 69 |
|
69 | 70 | static public void samplesAll(Context context) { |
| 71 | + samplesForCmab__local_datafile(context); |
| 72 | + samplesForCmab__cdn_datafile(context); |
| 73 | + |
70 | 74 | samplesForDecide(context); |
71 | 75 | samplesForInitialization(context); |
72 | 76 | samplesForOptimizelyConfig(context); |
@@ -94,6 +98,130 @@ static public void samplesAll(Context context) { |
94 | 98 | samplesForDoc_ODP_sync(context); |
95 | 99 | } |
96 | 100 |
|
| 101 | + |
| 102 | + static public void samplesForCmab__local_datafile(Context context) { |
| 103 | + List<OptimizelyDecideOption> defaultDecideOptions = Arrays.asList( |
| 104 | + OptimizelyDecideOption.INCLUDE_REASONS, |
| 105 | + OptimizelyDecideOption.IGNORE_USER_PROFILE_SERVICE |
| 106 | + ); |
| 107 | + |
| 108 | + OptimizelyManager optimizelyManager = OptimizelyManager.builder() |
| 109 | + .withSDKKey("invalid-sdk-key-for-cmab-testing") |
| 110 | + .withDefaultDecideOptions(defaultDecideOptions) |
| 111 | + .build(context); |
| 112 | + // we use raw datafile for this testing |
| 113 | + OptimizelyClient optimizelyClient = optimizelyManager.initialize(context, R.raw.datafile_full); |
| 114 | + |
| 115 | + String userId = "user_123"; |
| 116 | + Map<String, Object> attributes = new HashMap<>(); |
| 117 | + attributes.put("is_logged_in", false); |
| 118 | + attributes.put("app_version", "1.3.2"); |
| 119 | + OptimizelyUserContext user = optimizelyClient.createUserContext(userId, attributes); |
| 120 | + |
| 121 | + // decide (decideSync) |
| 122 | + |
| 123 | + String flagKey = "cmab-1"; |
| 124 | + |
| 125 | + List<OptimizelyDecideOption> options = Arrays.asList(OptimizelyDecideOption.INCLUDE_REASONS); |
| 126 | + Log.d("Samples","================================================================="); |
| 127 | + Log.d("Samples","[CMAB Local Datafile] calling sync decision for cmab..."); |
| 128 | + Log.d("Samples","================================================================="); |
| 129 | + OptimizelyDecision decision = user.decide(flagKey, options); |
| 130 | + |
| 131 | + Log.d("Samples","================================================================="); |
| 132 | + Log.d("Samples","[CMAB Local Datafile] sync decision for cmab: " + decision.toString()); |
| 133 | + if (decision.getEnabled()) { |
| 134 | + Log.e("Samples","[ERROR] " + flagKey + " is expected to be NOT enabled for this user!"); |
| 135 | + } |
| 136 | + Log.d("Samples","================================================================="); |
| 137 | + |
| 138 | + // decideAsync |
| 139 | + |
| 140 | + Log.d("Samples","================================================================="); |
| 141 | + Log.d("Samples","[CMAB Local Datafile] calling async decision for cmab..."); |
| 142 | + Log.d("Samples","================================================================="); |
| 143 | + final CountDownLatch latch = new CountDownLatch(1); |
| 144 | + user.decideAsync(flagKey, options, (OptimizelyDecision optDecision) -> { |
| 145 | + Log.d("Samples","================================================================="); |
| 146 | + Log.d("Samples","[CMAB Local Datafile] async decision for cmab: " + optDecision.toString()); |
| 147 | + if (!optDecision.getEnabled()) { |
| 148 | + Log.e("Samples","[ERROR] " + flagKey + " is expected to be enabled for this user!"); |
| 149 | + } |
| 150 | + Log.d("Samples","================================================================="); |
| 151 | + latch.countDown(); |
| 152 | + }); |
| 153 | + |
| 154 | + try { |
| 155 | + latch.await(5, TimeUnit.SECONDS); |
| 156 | + Log.d("Samples", "[CMAB Local Datafile] Latch released. Async operation completed."); |
| 157 | + } catch (InterruptedException e) { |
| 158 | + e.printStackTrace(); |
| 159 | + Thread.currentThread().interrupt(); |
| 160 | + } |
| 161 | + } |
| 162 | + |
| 163 | + |
| 164 | + static public void samplesForCmab__cdn_datafile(Context context) { |
| 165 | + List<OptimizelyDecideOption> defaultDecideOptions = Arrays.asList( |
| 166 | + OptimizelyDecideOption.INCLUDE_REASONS, |
| 167 | + OptimizelyDecideOption.IGNORE_USER_PROFILE_SERVICE |
| 168 | + ); |
| 169 | + |
| 170 | + // we use project=4552646833471488 for CMAB testing |
| 171 | + OptimizelyManager optimizelyManager = OptimizelyManager.builder() |
| 172 | + .withSDKKey("4ft9p1vSXYM5hLATwWdRc") |
| 173 | + .withDefaultDecideOptions(defaultDecideOptions) |
| 174 | + .build(context); |
| 175 | + // we use raw datafile for this testing |
| 176 | + OptimizelyClient optimizelyClient = optimizelyManager.initialize(context, R.raw.datafile_full); |
| 177 | + |
| 178 | + String userId = "user_20"; |
| 179 | + Map<String, Object> attributes = new HashMap<>(); |
| 180 | + attributes.put("country", "us"); |
| 181 | + OptimizelyUserContext user = optimizelyClient.createUserContext(userId, attributes); |
| 182 | + |
| 183 | + // decide (decideSync) |
| 184 | + |
| 185 | + String flagKey = "cmab-flag"; |
| 186 | + |
| 187 | + List<OptimizelyDecideOption> options = Arrays.asList(OptimizelyDecideOption.INCLUDE_REASONS); |
| 188 | + Log.d("Samples","================================================================="); |
| 189 | + Log.d("Samples","[CMAB CDN Datafile] calling sync decision for cmab..."); |
| 190 | + Log.d("Samples","================================================================="); |
| 191 | + OptimizelyDecision decision = user.decide(flagKey, options); |
| 192 | + |
| 193 | + Log.d("Samples","================================================================="); |
| 194 | + Log.d("Samples","[CMAB CDN Datafile] sync decision for cmab: " + decision.toString()); |
| 195 | + if (decision.getEnabled()) { |
| 196 | + Log.e("Samples","[ERROR] " + flagKey + " is expected to be NOT enabled for this user!"); |
| 197 | + } |
| 198 | + Log.d("Samples","================================================================="); |
| 199 | + |
| 200 | + // decideAsync |
| 201 | + |
| 202 | + Log.d("Samples","================================================================="); |
| 203 | + Log.d("Samples","[CMAB CDN Datafile] calling async decision for cmab..."); |
| 204 | + Log.d("Samples","================================================================="); |
| 205 | + final CountDownLatch latch = new CountDownLatch(1); |
| 206 | + user.decideAsync(flagKey, options, (OptimizelyDecision optDecision) -> { |
| 207 | + Log.d("Samples","================================================================="); |
| 208 | + Log.d("Samples","[CMAB CDN Datafile] async decision for cmab: " + optDecision.toString()); |
| 209 | + if (!optDecision.getEnabled()) { |
| 210 | + Log.e("Samples","[ERROR] " + flagKey + " is expected to be enabled for this user!"); |
| 211 | + } |
| 212 | + Log.d("Samples","================================================================="); |
| 213 | + latch.countDown(); |
| 214 | + }); |
| 215 | + |
| 216 | + try { |
| 217 | + latch.await(5, TimeUnit.SECONDS); |
| 218 | + Log.d("Samples", "[CMAB CDN Datafile] Latch released. Async operation completed."); |
| 219 | + } catch (InterruptedException e) { |
| 220 | + e.printStackTrace(); |
| 221 | + Thread.currentThread().interrupt(); |
| 222 | + } |
| 223 | + } |
| 224 | + |
97 | 225 | static public void samplesForDecide(Context context) { |
98 | 226 | // this default-options will be applied to all following decide calls. |
99 | 227 | List<OptimizelyDecideOption> defaultDecideOptions = Arrays.asList(OptimizelyDecideOption.DISABLE_DECISION_EVENT); |
|
0 commit comments