Skip to content

Commit acd80f4

Browse files
author
Sayaan Saha
authored
Merge branch 'develop' into feat/1355
2 parents 96d5d99 + 057ec34 commit acd80f4

File tree

9 files changed

+415
-10
lines changed

9 files changed

+415
-10
lines changed

AndroidSDKCore/src/main/java/com/leanplum/Leanplum.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,15 @@ public static void trackAllAppScreens() {
250250
LeanplumInternal.enableAutomaticScreenTracking();
251251
}
252252

253+
/**
254+
* Set this to true if you want details about the variable assignments
255+
* on the server.
256+
* Default is NO.
257+
*/
258+
public static void setVariantDebugInfoEnabled(boolean variantDebugInfoEnabled) {
259+
LeanplumInternal.setIsVariantDebugInfoEnabled(variantDebugInfoEnabled);
260+
}
261+
253262
/**
254263
* Whether screen tracking is enabled or not.
255264
*
@@ -499,7 +508,8 @@ static synchronized void start(final Context context, final String userId,
499508
VarCache.getUpdateRuleDiffs(),
500509
VarCache.getEventRuleDiffs(),
501510
new HashMap<String, Object>(),
502-
new ArrayList<Map<String, Object>>());
511+
new ArrayList<Map<String, Object>>(),
512+
new HashMap<String, Object>());
503513
LeanplumInbox.getInstance().update(new HashMap<String, LeanplumInboxMessage>(), 0, false);
504514
return;
505515
}
@@ -664,6 +674,8 @@ private static void startHelper(
664674
// Get the current inbox messages on the device.
665675
params.put(Constants.Params.INBOX_MESSAGES, LeanplumInbox.getInstance().messagesIds());
666676

677+
params.put(Constants.Params.INCLUDE_VARIANT_DEBUG_INFO, LeanplumInternal.getIsVariantDebugInfoEnabled());
678+
667679
Util.initializePreLeanplumInstall(params);
668680

669681
// Issue start API call.
@@ -800,6 +812,8 @@ protected Void doInBackground(Void... params) {
800812
Constants.loggingEnabled = true;
801813
}
802814

815+
parseVariantDebugInfo(response);
816+
803817
// Allow bidirectional realtime variable updates.
804818
if (Constants.isDevelopmentModeEnabled) {
805819

@@ -921,6 +935,8 @@ private static void applyContentInResponse(JSONObject response, boolean alwaysAp
921935
response.optJSONObject(Constants.Keys.REGIONS));
922936
List<Map<String, Object>> variants = JsonConverter.listFromJsonOrDefault(
923937
response.optJSONArray(Constants.Keys.VARIANTS));
938+
Map<String, Object> variantDebugInfo = JsonConverter.mapFromJsonOrDefault(
939+
response.optJSONObject(Constants.Keys.VARIANT_DEBUG_INFO));
924940

925941
if (alwaysApply
926942
|| !values.equals(VarCache.getDiffs())
@@ -929,7 +945,7 @@ private static void applyContentInResponse(JSONObject response, boolean alwaysAp
929945
|| !eventRules.equals(VarCache.getEventRuleDiffs())
930946
|| !regions.equals(VarCache.regions())) {
931947
VarCache.applyVariableDiffs(values, messages, updateRules,
932-
eventRules, regions, variants);
948+
eventRules, regions, variants, variantDebugInfo);
933949
}
934950
}
935951

@@ -1924,6 +1940,8 @@ public static void forceContentUpdate(final VariablesChangedCallback callback) {
19241940
Map<String, Object> params = new HashMap<>();
19251941
params.put(Constants.Params.INCLUDE_DEFAULTS, Boolean.toString(false));
19261942
params.put(Constants.Params.INBOX_MESSAGES, LeanplumInbox.getInstance().messagesIds());
1943+
params.put(Constants.Params.INCLUDE_VARIANT_DEBUG_INFO, LeanplumInternal.getIsVariantDebugInfoEnabled());
1944+
19271945
Request req = Request.post(Constants.Methods.GET_VARS, params);
19281946
req.onResponse(new Request.ResponseCallback() {
19291947
@Override
@@ -1941,6 +1959,8 @@ public void response(JSONObject response) {
19411959
if (response.optBoolean(Constants.Keys.LOGGING_ENABLED, false)) {
19421960
Constants.loggingEnabled = true;
19431961
}
1962+
1963+
parseVariantDebugInfo(response);
19441964
}
19451965
if (callback != null) {
19461966
OsHandler.getInstance().post(callback);
@@ -2043,6 +2063,13 @@ public static Map<String, Object> messageMetadata() {
20432063
return messages;
20442064
}
20452065

2066+
/**
2067+
* Details about the variable assignments on the server.
2068+
*/
2069+
public static Map<String, Object> getVariantDebugInfo() {
2070+
return VarCache.getVariantDebugInfo();
2071+
}
2072+
20462073
/**
20472074
* Set location manually. Calls setDeviceLocation with cell type. Best if used in after calling
20482075
* disableLocationCollection.
@@ -2092,4 +2119,12 @@ public static void disableLocationCollection() {
20922119
public static boolean isLocationCollectionEnabled() {
20932120
return locationCollectionEnabled;
20942121
}
2122+
2123+
private static void parseVariantDebugInfo(JSONObject response) {
2124+
Map<String, Object> variantDebugInfo = JsonConverter.mapFromJsonOrDefault(
2125+
response.optJSONObject(Constants.Keys.VARIANT_DEBUG_INFO));
2126+
if (variantDebugInfo.size() > 0) {
2127+
VarCache.setVariantDebugInfo(variantDebugInfo);
2128+
}
2129+
}
20952130
}

AndroidSDKCore/src/main/java/com/leanplum/internal/Constants.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class Constants {
3636
public static int SOCKET_PORT = 80;
3737
public static int NETWORK_TIMEOUT_SECONDS = 10;
3838
public static int NETWORK_TIMEOUT_SECONDS_FOR_DOWNLOADS = 10;
39-
public static String LEANPLUM_VERSION = "4.0.3";
39+
public static String LEANPLUM_VERSION = "4.0.4";
4040
public static String CLIENT = "android";
4141

4242
static final String LEANPLUM_PACKAGE_IDENTIFIER = BuildConfig.LEANPLUM_PACKAGE_IDENTIFIER;
@@ -144,6 +144,7 @@ public static class Params {
144144
public static final String IAP_CURRENCY_CODE = "currencyCode";
145145
public static final String IAP_ITEM = "item";
146146
public static final String INCLUDE_DEFAULTS = "includeDefaults";
147+
public static final String INCLUDE_VARIANT_DEBUG_INFO = "includeVariantDebugInfo";
147148
public static final String INCLUDE_MESSAGE_ID = "includeMessageId";
148149
public static final String INFO = "info";
149150
public static final String INSTALL_DATE = "installDate";
@@ -200,6 +201,7 @@ public static class Keys {
200201
public static final String REGION = "region";
201202
public static final String REGION_STATE = "regionState";
202203
public static final String REGIONS = "regions";
204+
public static final String VARIANT_DEBUG_INFO = "variantDebugInfo";
203205
public static final String SIZE = "size";
204206
public static final String SUBTITLE = "Subtitle";
205207
public static final String SYNC_INBOX = "syncNewsfeed";

AndroidSDKCore/src/main/java/com/leanplum/internal/LeanplumInternal.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public class LeanplumInternal {
7373
private static final Queue<Map<String, ?>> userAttributeChanges = new ConcurrentLinkedQueue<>();
7474
private static final ArrayList<Runnable> startIssuedHandlers = new ArrayList<>();
7575
private static boolean isScreenTrackingEnabled = false;
76+
private static boolean isVariantDebugInfoEnabled = false;
7677

7778
private static void onHasStartedAndRegisteredAsDeveloperAndFinishedSyncing() {
7879
if (!hasStartedAndRegisteredAsDeveloper) {
@@ -673,6 +674,14 @@ public static boolean getIsScreenTrackingEnabled() {
673674
return isScreenTrackingEnabled;
674675
}
675676

677+
public static boolean getIsVariantDebugInfoEnabled() {
678+
return isVariantDebugInfoEnabled;
679+
}
680+
681+
public static void setIsVariantDebugInfoEnabled(boolean isVariantDebugInfoEnabled) {
682+
LeanplumInternal.isVariantDebugInfoEnabled = isVariantDebugInfoEnabled;
683+
}
684+
676685
public static void enableAutomaticScreenTracking() {
677686
isScreenTrackingEnabled = true;
678687
}

AndroidSDKCore/src/main/java/com/leanplum/internal/Socket.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ static void handleApplyVarsEvent(JSONArray args) {
307307
return;
308308
}
309309
VarCache.applyVariableDiffs(
310-
JsonConverter.mapFromJson(object), null, null, null, null, null);
310+
JsonConverter.mapFromJson(object), null, null, null, null, null, null);
311311
} catch (JSONException e) {
312312
Log.e("Couldn't applyVars for preview.", e);
313313
} catch (Throwable e) {

AndroidSDKCore/src/main/java/com/leanplum/internal/VarCache.java

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public class VarCache {
8787
private static boolean silent;
8888
private static int contentVersion;
8989
private static Map<String, Object> userAttributes;
90+
private static Map<String, Object> variantDebugInfo = new HashMap<>();
9091

9192
private static final String NAME_COMPONENT_REGEX = "(?:[^\\.\\[.(\\\\]+|\\\\.)+";
9293
private static final Pattern NAME_COMPONENT_PATTERN = Pattern.compile(NAME_COMPONENT_REGEX);
@@ -322,6 +323,18 @@ public static boolean hasReceivedDiffs() {
322323
return hasReceivedDiffs;
323324
}
324325

326+
public static Map<String, Object> getVariantDebugInfo() {
327+
return variantDebugInfo;
328+
}
329+
330+
public static void setVariantDebugInfo(Map<String, Object> variantDebugInfo) {
331+
if (variantDebugInfo != null) {
332+
VarCache.variantDebugInfo = variantDebugInfo;
333+
} else {
334+
VarCache.variantDebugInfo = new HashMap<>();
335+
}
336+
}
337+
325338
public static void loadDiffs() {
326339
if (Constants.isNoop()) {
327340
return;
@@ -335,7 +348,8 @@ public static void loadDiffs() {
335348
new ArrayList<Map<String, Object>>(),
336349
new ArrayList<Map<String, Object>>(),
337350
new HashMap<String, Object>(),
338-
new ArrayList<Map<String, Object>>());
351+
new ArrayList<Map<String, Object>>(),
352+
new HashMap<String, Object>());
339353
return;
340354
}
341355
try {
@@ -351,13 +365,15 @@ public static void loadDiffs() {
351365
defaults, Constants.Defaults.EVENT_RULES_KEY, "[]");
352366
String regions = aesContext.decodePreference(defaults, Constants.Defaults.REGIONS_KEY, "{}");
353367
String variants = aesContext.decodePreference(defaults, Constants.Keys.VARIANTS, "[]");
368+
String variantDebugInfo = aesContext.decodePreference(defaults, Constants.Keys.VARIANT_DEBUG_INFO, "{}");
354369
applyVariableDiffs(
355370
JsonConverter.fromJson(variables),
356371
JsonConverter.fromJson(messages),
357372
JsonConverter.<Map<String, Object>>listFromJson(new JSONArray(updateRules)),
358373
JsonConverter.<Map<String, Object>>listFromJson(new JSONArray(eventRules)),
359374
JsonConverter.fromJson(regions),
360-
JsonConverter.<Map<String, Object>>listFromJson(new JSONArray(variants)));
375+
JsonConverter.<Map<String, Object>>listFromJson(new JSONArray(variants)),
376+
JsonConverter.fromJson(variantDebugInfo));
361377
String deviceId = aesContext.decodePreference(defaults, Constants.Params.DEVICE_ID, null);
362378
if (deviceId != null) {
363379
if (Util.isValidDeviceId(deviceId)) {
@@ -435,6 +451,13 @@ public static void saveDiffs() {
435451
} catch (JSONException e1) {
436452
Log.e("Error converting " + variants + " to JSON.\n" + Log.getStackTraceString(e1));
437453
}
454+
455+
if (variantDebugInfo != null) {
456+
editor.putString(
457+
Constants.Keys.VARIANT_DEBUG_INFO,
458+
aesContext.encrypt(JsonConverter.toJson(variantDebugInfo)));
459+
}
460+
438461
editor.putString(Constants.Params.DEVICE_ID, aesContext.encrypt(Request.deviceId()));
439462
editor.putString(Constants.Params.USER_ID, aesContext.encrypt(Request.userId()));
440463
editor.putString(Constants.Keys.LOGGING_ENABLED,
@@ -490,7 +513,8 @@ public static void applyVariableDiffs(
490513
List<Map<String, Object>> updateRules,
491514
List<Map<String, Object>> eventRules,
492515
Map<String, Object> regions,
493-
List<Map<String, Object>> variants) {
516+
List<Map<String, Object>> variants,
517+
Map<String, Object> variantDebugInfo) {
494518
if (diffs != null) {
495519
VarCache.diffs = diffs;
496520
computeMergedDictionary();
@@ -567,6 +591,10 @@ public static void applyVariableDiffs(
567591
VarCache.variants = variants;
568592
}
569593

594+
if (variantDebugInfo != null) {
595+
VarCache.setVariantDebugInfo(variantDebugInfo);
596+
}
597+
570598
contentVersion++;
571599

572600
if (!silent) {
@@ -878,6 +906,7 @@ public static void saveUserAttributes() {
878906
*/
879907
public static void reset() {
880908
vars.clear();
909+
variantDebugInfo.clear();
881910
fileAttributes.clear();
882911
fileStreams.clear();
883912
valuesFromClient.clear();

AndroidSDKPush/src/main/java/com/leanplum/LeanplumPushService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ public void response(JSONObject response) {
270270
messages = null;
271271
}
272272
if (values != null || messages != null) {
273-
VarCache.applyVariableDiffs(values, messages, null, null, regions, variants);
273+
VarCache.applyVariableDiffs(values, messages, null, null, regions, variants, null);
274274
}
275275
}
276276
onComplete.variablesChanged();

AndroidSDKTests/src/test/java/com/leanplum/LeanplumActionContextTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ public void testPrefetchingChainedMessage() {
288288
VarCache.applyVariableDiffs(null, new HashMap<>(
289289
ImmutableMap.<String, Object>of(Long.toString(chainedMessageId),
290290
ImmutableMap.<String, Object>of())),
291-
null, null, null, null);
291+
null, null, null, null, null);
292292
// Since it now exists locally, we should return false for forceContentUpdate.
293293
Assert.assertFalse(ActionContext.shouldForceContentUpdateForChainedMessage(
294294
JsonConverter.fromJson(jsonData)));

AndroidSDKTests/src/test/java/com/leanplum/LeanplumTest.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,37 @@ public void onResponse(boolean success) {
359359
assertTrue(Request.userId().equals(userId));
360360
}
361361

362+
@Test
363+
public void shouldStartWithParamToIncludeVariantDebugInfo() {
364+
ResponseHelper.seedResponse("/responses/simple_start_response.json");
365+
366+
Leanplum.setVariantDebugInfoEnabled(true);
367+
// Validate request.
368+
RequestHelper.addRequestHandler(new RequestHelper.RequestHandler() {
369+
@Override
370+
public void onRequest(String httpMethod, String apiMethod, Map<String, Object> params) {
371+
// Expected request params.
372+
final HashMap<String, Object> expectedRequestParams = CollectionUtil.newHashMap(
373+
"city", "(detect)",
374+
"country", "(detect)",
375+
"location", "(detect)",
376+
"region", "(detect)",
377+
"locale", "en_US",
378+
"includeVariantDebugInfo", true
379+
);
380+
381+
assertEquals(Constants.Methods.START, apiMethod);
382+
383+
// Validate request.
384+
assertTrue(params.keySet().containsAll(expectedRequestParams.keySet()));
385+
assertTrue(params.values().containsAll(expectedRequestParams.values()));
386+
}
387+
});
388+
Leanplum.start(mContext);
389+
assertTrue(Leanplum.hasStarted());
390+
}
391+
392+
362393
/**
363394
* Tests Metadata.
364395
*/
@@ -383,7 +414,7 @@ public void testMetadata() {
383414
}});
384415
}};
385416

386-
VarCache.applyVariableDiffs(null, messages, null, null, null, variants);
417+
VarCache.applyVariableDiffs(null, messages, null, null, null, variants, null);
387418
assertEquals(variants, Leanplum.variants());
388419
assertEquals(messages, Leanplum.messageMetadata());
389420
}
@@ -773,6 +804,14 @@ public void testVariables() throws Exception {
773804
assertArrayEquals(groupIntegerVariable.nameComponents(), new String[] {"groups", "integers"});
774805
}
775806

807+
@Test
808+
public void shouldGetResponseAndReturnVariantDebugInfo() throws Exception {
809+
setupSDK(mContext, "/responses/start_with_variant_debug_info_response.json");
810+
Map<String, ?> v = Leanplum.getVariantDebugInfo();
811+
assertEquals(Leanplum.getVariantDebugInfo().size(), 1);
812+
assertNotNull(Leanplum.getVariantDebugInfo().get("abTests"));
813+
}
814+
776815
@Test
777816
public void testVariableParser() throws Exception {
778817
// Parse test class.

0 commit comments

Comments
 (0)