diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java index febfca485..7011e9b11 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java @@ -24,6 +24,7 @@ import com.mparticle.MParticle; import com.mparticle.MParticleOptions; import com.mparticle.MParticleTask; +import com.mparticle.TypedUserAttributeListener; import com.mparticle.UserAttributeListener; import com.mparticle.WrapperSdkVersion; import com.mparticle.commerce.CommerceEvent; @@ -1369,27 +1370,21 @@ public void execute(@NonNull String viewName, finalAttributes.put(mapTo, value); } } - Map objectAttributes = new HashMap<>(); - for (Map.Entry entry : finalAttributes.entrySet()) { - if(!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) { - objectAttributes.put(entry.getKey(), entry.getValue()); - } - } - if (user != null) { - user.setUserAttributes(objectAttributes); - } - - if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) { - finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, String.valueOf(Objects.toString(MPUtility.isDevEnv(), "false"))); // Default value is "false" if null - } + setRoktAttributesOnUser(finalAttributes, user, () -> { + if (!finalAttributes.containsKey(Constants.MessageKey.SANDBOX_MODE_ROKT)) { + finalAttributes.put(Constants.MessageKey.SANDBOX_MODE_ROKT, String.valueOf(Objects.toString(MPUtility.isDevEnv(), "false"))); // Default value is "false" if null + } - ((KitIntegration.RoktListener) provider).execute(viewName, - finalAttributes, - mpRoktEventCallback, - placeHolders, - fontTypefaces, - FilteredMParticleUser.getInstance(user.getId(), provider), - config); + Long userId = (user != null) ? user.getId() : null; + FilteredMParticleUser filteredUser = FilteredMParticleUser.getInstance(userId, provider); + ((KitIntegration.RoktListener) provider).execute(viewName, + finalAttributes, + mpRoktEventCallback, + placeHolders, + fontTypefaces, + filteredUser, + config); + }); }); } } catch (Exception e) { @@ -1424,6 +1419,31 @@ public void purchaseFinalized(@NonNull String placementId, @NonNull String catal } } + private void setRoktAttributesOnUser( + Map finalAttributes, + MParticleUser user, + Runnable runnable + ) { + Map objectAttributes = new HashMap<>(); + for (Map.Entry entry : finalAttributes.entrySet()) { + if(!entry.getKey().equals(Constants.MessageKey.SANDBOX_MODE_ROKT)) { + objectAttributes.put(entry.getKey(), entry.getValue()); + } + } + if (user != null) { + user.setUserAttributes(objectAttributes); + // Use asynchronous getUserAttributes with callback to ensure attributes are set before proceeding + user.getUserAttributes(new TypedUserAttributeListener() { + @Override + public void onUserAttributesReceived(@NonNull Map userAttributes, @NonNull Map> userAttributeLists, long mpid) { + runnable.run(); + } + }); + } else { + runnable.run(); + } + } + private void confirmEmail( @Nullable String email, @Nullable MParticleUser user,