Skip to content

Commit 8b6a3d5

Browse files
feat: Implement Rokt Jetpack compose (#600)
1 parent a8c05c0 commit 8b6a3d5

5 files changed

Lines changed: 80 additions & 37 deletions

File tree

android-core/src/main/java/com/mparticle/internal/KitFrameworkWrapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,13 @@ public void close() {
715715
}
716716
}
717717

718+
@Override
719+
public void prepareAttributesAsync(@NonNull Map<String, String> attributes) {
720+
if (mKitManager != null) {
721+
mKitManager.prepareAttributesAsync(attributes);
722+
}
723+
}
724+
718725
static class CoreCallbacksImpl implements CoreCallbacks {
719726
KitFrameworkWrapper mKitFrameworkWrapper;
720727
ConfigManager mConfigManager;

android-core/src/main/java/com/mparticle/internal/KitManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ void execute(@NonNull String identifier,
148148

149149
void close();
150150

151+
void prepareAttributesAsync(@NonNull Map<String, String> attributes);
152+
151153
enum KitStatus {
152154
NOT_CONFIGURED,
153155
STOPPED,

android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,8 @@ void execute(@NonNull String viewName,
628628

629629
Flow<RoktEvent> events(@NonNull String identifier);
630630

631+
void enrichAttributes(
632+
@NonNull Map<String, String> attributes, @Nullable FilteredMParticleUser user);
631633
/**
632634
* Set the SDK version of the mParticle SDK.
633635
* This should match the value set in MParticle.getWrapperSdkVersion()

android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java

Lines changed: 65 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,8 @@
3535
import com.mparticle.identity.IdentityApi;
3636
import com.mparticle.identity.IdentityApiRequest;
3737
import com.mparticle.identity.IdentityApiResult;
38-
import com.mparticle.identity.IdentityHttpResponse;
3938
import com.mparticle.identity.IdentityStateListener;
4039
import com.mparticle.identity.MParticleUser;
41-
import com.mparticle.identity.TaskFailureListener;
42-
import com.mparticle.identity.TaskSuccessListener;
4340
import com.mparticle.internal.Constants;
4441
import com.mparticle.internal.CoreCallbacks;
4542
import com.mparticle.internal.KitManager;
@@ -1366,41 +1363,9 @@ public void execute(@NonNull String viewName,
13661363
MParticleUser user = instance.Identity().getCurrentUser();
13671364
String email = getValueIgnoreCase(attributes, "email");
13681365
String hashedEmail = getValueIgnoreCase(attributes, "emailsha256");
1369-
Map<String, String> finalAttributes = attributes;
1366+
Map<String, String> tempAttributes = attributes;
13701367
confirmEmail(email, hashedEmail, user, instance.Identity(), () -> {
1371-
JSONArray jsonArray = new JSONArray();
1372-
1373-
KitConfiguration kitConfig = provider.getConfiguration();
1374-
if (kitConfig != null) {
1375-
try {
1376-
jsonArray = kitConfig.getPlacementAttributesMapping();
1377-
} catch (JSONException e) {
1378-
Logger.warning("Invalid placementAttributes for kit: " + provider.getName() + " JSON: " + e.getMessage());
1379-
}
1380-
}
1381-
for (int i = 0; i < jsonArray.length(); i++) {
1382-
JSONObject obj = jsonArray.optJSONObject(i);
1383-
if (obj == null) continue;
1384-
String mapFrom = obj.optString("map");
1385-
String mapTo = obj.optString("value");
1386-
if (finalAttributes.containsKey(mapFrom)) {
1387-
String value = finalAttributes.remove(mapFrom);
1388-
finalAttributes.put(mapTo, value);
1389-
}
1390-
}
1391-
Map<String, Object> objectAttributes = new HashMap<>();
1392-
for (Map.Entry<String, String> entry : finalAttributes.entrySet()) {
1393-
if (!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1394-
objectAttributes.put(entry.getKey(), entry.getValue());
1395-
}
1396-
}
1397-
if (user != null) {
1398-
user.setUserAttributes(objectAttributes);
1399-
}
1400-
1401-
if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1402-
finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, Objects.toString(MPUtility.isDevEnv(), "false")); // Default value is "false" if null
1403-
}
1368+
Map<String, String> finalAttributes = prepareAttributes(provider, tempAttributes, user);
14041369

14051370
((KitIntegration.RoktListener) provider).execute(viewName,
14061371
finalAttributes,
@@ -1426,6 +1391,43 @@ private String getValueIgnoreCase(Map<String, String> map, String searchKey) {
14261391
return null;
14271392
}
14281393

1394+
private Map<String, String> prepareAttributes(KitIntegration provider, Map<String, String> finalAttributes, MParticleUser user){
1395+
JSONArray jsonArray = new JSONArray();
1396+
1397+
KitConfiguration kitConfig = provider.getConfiguration();
1398+
if (kitConfig != null) {
1399+
try {
1400+
jsonArray = kitConfig.getPlacementAttributesMapping();
1401+
} catch (JSONException e) {
1402+
Logger.warning("Invalid placementAttributes for kit: " + provider.getName() + " JSON: " + e.getMessage());
1403+
}
1404+
}
1405+
for (int i = 0; i < jsonArray.length(); i++) {
1406+
JSONObject obj = jsonArray.optJSONObject(i);
1407+
if (obj == null) continue;
1408+
String mapFrom = obj.optString("map");
1409+
String mapTo = obj.optString("value");
1410+
if (finalAttributes.containsKey(mapFrom)) {
1411+
String value = finalAttributes.remove(mapFrom);
1412+
finalAttributes.put(mapTo, value);
1413+
}
1414+
}
1415+
Map<String, Object> objectAttributes = new HashMap<>();
1416+
for (Map.Entry<String, String> entry : finalAttributes.entrySet()) {
1417+
if(!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1418+
objectAttributes.put(entry.getKey(), entry.getValue());
1419+
}
1420+
}
1421+
if (user != null) {
1422+
user.setUserAttributes(objectAttributes);
1423+
}
1424+
1425+
if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) {
1426+
finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, String.valueOf(Objects.toString(MPUtility.isDevEnv(), "false"))); // Default value is "false" if null
1427+
}
1428+
return finalAttributes;
1429+
}
1430+
14291431
@Override
14301432
public Flow<RoktEvent> events(@NonNull String identifier) {
14311433
for (KitIntegration provider : providers.values()) {
@@ -1481,6 +1483,32 @@ public void close() {
14811483
}
14821484
}
14831485

1486+
@Override
1487+
public void prepareAttributesAsync(@NonNull Map<String, String> attributes) {
1488+
1489+
for (KitIntegration provider : providers.values()) {
1490+
try {
1491+
if (provider instanceof KitIntegration.RoktListener && !provider.isDisabled()) {
1492+
if (attributes == null) {
1493+
attributes = new HashMap<>();
1494+
}
1495+
MParticle instance = MParticle.getInstance();
1496+
MParticleUser user = instance.Identity().getCurrentUser();
1497+
String email = attributes.get("email");
1498+
String hashedEmail = getValueIgnoreCase(attributes, "emailsha256");
1499+
Map<String, String> tempAttributes = attributes;
1500+
confirmEmail(email, hashedEmail, user, instance.Identity(), () -> {
1501+
Map<String, String> finalAttributes = prepareAttributes(provider, tempAttributes, user);
1502+
((KitIntegration.RoktListener) provider).enrichAttributes(
1503+
finalAttributes, FilteredMParticleUser.getInstance(user.getId(), provider));
1504+
});
1505+
}
1506+
} catch (Exception e) {
1507+
Logger.warning("Failed to call prepareRoktListener for kit: " + provider.getName() + ": " + e.getMessage());
1508+
}
1509+
}
1510+
}
1511+
14841512
private void confirmEmail(
14851513
@Nullable String email,
14861514
@Nullable String hashedEmail,

android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,6 +1940,10 @@ class KitManagerImplTest {
19401940
return flowOf()
19411941
}
19421942

1943+
override fun enrichAttributes(attributes: MutableMap<String, String>, user: FilteredMParticleUser?) {
1944+
println("callRoktComposable with $attributes")
1945+
}
1946+
19431947
override fun setWrapperSdkVersion(wrapperSdkVersion: WrapperSdkVersion) {
19441948
println("setWrapperSdkVersion with $wrapperSdkVersion")
19451949
}

0 commit comments

Comments
 (0)