Skip to content

Commit ec7e695

Browse files
feat: Add support for Rokt first-party kit (#550)
1 parent 372b117 commit ec7e695

File tree

10 files changed

+217
-2
lines changed

10 files changed

+217
-2
lines changed

android-core/src/main/java/com/mparticle/MParticle.java

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.content.Context;
77
import android.content.Intent;
88
import android.content.SharedPreferences;
9+
import android.graphics.Typeface;
910
import android.location.Location;
1011
import android.location.LocationManager;
1112
import android.net.Uri;
@@ -51,12 +52,12 @@
5152
import com.mparticle.media.MediaCallbacks;
5253
import com.mparticle.messaging.MPMessagingAPI;
5354
import com.mparticle.messaging.ProviderCloudMessage;
54-
import com.mparticle.segmentation.SegmentListener;
5555

5656
import org.jetbrains.annotations.NotNull;
5757
import org.json.JSONObject;
5858

5959
import java.io.File;
60+
import java.lang.ref.WeakReference;
6061
import java.math.BigDecimal;
6162
import java.util.HashMap;
6263
import java.util.HashSet;
@@ -111,6 +112,7 @@ public class MParticle {
111112
protected boolean locationTrackingEnabled = false;
112113
@NonNull
113114
protected Internal mInternal = new Internal();
115+
protected Rokt rokt = new Rokt();
114116
private IdentityStateListener mDeferredModifyPushRegistrationListener;
115117
@NonNull
116118
private WrapperSdkVersion wrapperSdkVersion = new WrapperSdkVersion(WrapperSdk.WrapperNone, null);
@@ -1170,6 +1172,10 @@ public void logNotificationOpened(@NonNull Intent intent) {
11701172
public Internal Internal() {
11711173
return mInternal;
11721174
}
1175+
@NonNull
1176+
public Rokt Rokt() {
1177+
return rokt;
1178+
}
11731179

11741180
void refreshConfiguration() {
11751181
Logger.debug("Refreshing configuration...");
@@ -1703,6 +1709,7 @@ public interface ServiceProviders {
17031709
int SWRVE = 1145;
17041710
int BLUESHIFT = 1144;
17051711
int NEURA = 147;
1712+
int ROKT = 181;
17061713
@NonNull
17071714
String BROADCAST_ACTIVE = "MPARTICLE_SERVICE_PROVIDER_ACTIVE_";
17081715
@NonNull
@@ -1774,6 +1781,46 @@ public interface ResetListener {
17741781
}
17751782

17761783

1784+
/**
1785+
* Rokt Integration
1786+
* */
1787+
public class Rokt{
1788+
protected Rokt(){
1789+
1790+
}
1791+
public void selectPlacements(String viewName,
1792+
Map<String, String> attributes,
1793+
Runnable onUnload,
1794+
Runnable onLoad,
1795+
Runnable onShouldHideLoadingIndicator,
1796+
Runnable onShouldShowLoadingIndicator,
1797+
Map<String, WeakReference<RoktEmbeddedView>> placeHolders,
1798+
Map<String, WeakReference<Typeface>> fontTypefaces) {
1799+
if (mConfigManager.isEnabled()) {
1800+
mKitManager.execute(viewName,
1801+
attributes,
1802+
onUnload,
1803+
onLoad,
1804+
onShouldHideLoadingIndicator,
1805+
onShouldShowLoadingIndicator,
1806+
placeHolders,
1807+
fontTypefaces);
1808+
}
1809+
}
1810+
public void selectPlacements(String viewName,
1811+
Map<String, String> attributes) {
1812+
if (mConfigManager.isEnabled()) {
1813+
mKitManager.execute(viewName,
1814+
attributes,
1815+
null,
1816+
null,
1817+
null,
1818+
null,
1819+
null,
1820+
null);
1821+
}
1822+
}
1823+
}
17771824
/**
17781825
* @hidden
17791826
*/
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.mparticle;
2+
3+
import android.content.Context;
4+
import android.util.AttributeSet;
5+
import android.widget.FrameLayout;
6+
7+
public class RoktEmbeddedView extends FrameLayout {
8+
9+
public RoktEmbeddedView(Context context) {
10+
super(context);
11+
}
12+
13+
public RoktEmbeddedView(Context context, AttributeSet attrs) {
14+
super(context, attrs);
15+
}
16+
17+
public RoktEmbeddedView(Context context, AttributeSet attrs, int defStyleAttr) {
18+
super(context, attrs, defStyleAttr);
19+
}
20+
}

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Activity;
44
import android.content.Context;
55
import android.content.Intent;
6+
import android.graphics.Typeface;
67
import android.location.Location;
78
import android.net.Uri;
89
import android.os.Bundle;
@@ -15,6 +16,7 @@
1516
import com.mparticle.MPEvent;
1617
import com.mparticle.MParticle;
1718
import com.mparticle.MParticleOptions;
19+
import com.mparticle.RoktEmbeddedView;
1820
import com.mparticle.consent.ConsentState;
1921
import com.mparticle.identity.IdentityApiRequest;
2022
import com.mparticle.identity.MParticleUser;
@@ -646,6 +648,27 @@ public void reset() {
646648
}
647649
}
648650

651+
@Override
652+
public void execute(String viewName,
653+
Map<String, String> attributes,
654+
Runnable onUnload,
655+
Runnable onLoad,
656+
Runnable onShouldHideLoadingIndicator,
657+
Runnable onShouldShowLoadingIndicator,
658+
Map<String, WeakReference<RoktEmbeddedView>> placeHolders,
659+
Map<String, WeakReference<Typeface>> fontTypefaces) {
660+
if (mKitManager != null) {
661+
mKitManager.execute(viewName,
662+
attributes,
663+
onUnload,
664+
onLoad,
665+
onShouldHideLoadingIndicator,
666+
onShouldShowLoadingIndicator,
667+
placeHolders,
668+
fontTypefaces);
669+
}
670+
}
671+
649672
static class CoreCallbacksImpl implements CoreCallbacks {
650673
KitFrameworkWrapper mKitFrameworkWrapper;
651674
ConfigManager mConfigManager;

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Activity;
44
import android.content.Context;
55
import android.content.Intent;
6+
import android.graphics.Typeface;
67
import android.location.Location;
78
import android.net.Uri;
89
import android.os.Bundle;
@@ -14,6 +15,7 @@
1415
import com.mparticle.MPEvent;
1516
import com.mparticle.MParticle;
1617
import com.mparticle.MParticleOptions;
18+
import com.mparticle.RoktEmbeddedView;
1719
import com.mparticle.consent.ConsentState;
1820
import com.mparticle.identity.IdentityApiRequest;
1921
import com.mparticle.identity.MParticleUser;
@@ -120,6 +122,15 @@ public interface KitManager {
120122

121123
void reset();
122124

125+
void execute(String viewName,
126+
Map<String, String> attributes,
127+
Runnable onUnload,
128+
Runnable onLoad,
129+
Runnable onShouldHideLoadingIndicator,
130+
Runnable onShouldShowLoadingIndicator,
131+
Map<String, WeakReference<RoktEmbeddedView>> placeHolders,
132+
Map<String, WeakReference<Typeface>> fontTypefaces);
133+
123134
enum KitStatus {
124135
NOT_CONFIGURED,
125136
STOPPED,

android-core/src/test/kotlin/com/mparticle/MParticleTest.kt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.mparticle
22

3+
import android.graphics.Typeface
34
import android.os.Looper
45
import android.os.SystemClock
56
import android.webkit.WebView
@@ -25,10 +26,16 @@ import org.junit.Test
2526
import org.junit.runner.RunWith
2627
import org.mockito.ArgumentCaptor
2728
import org.mockito.ArgumentMatchers
29+
import org.mockito.ArgumentMatchers.any
2830
import org.mockito.Mockito
31+
import org.mockito.Mockito.mock
32+
import org.mockito.Mockito.never
33+
import org.mockito.Mockito.verify
34+
import org.mockito.Mockito.`when`
2935
import org.powermock.api.mockito.PowerMockito
3036
import org.powermock.core.classloader.annotations.PrepareForTest
3137
import org.powermock.modules.junit4.PowerMockRunner
38+
import java.lang.ref.WeakReference
3239
import java.util.LinkedList
3340
import java.util.concurrent.ExecutorService
3441
import java.util.concurrent.Executors
@@ -461,6 +468,53 @@ class MParticleTest {
461468
}
462469
}
463470

471+
@Test
472+
fun testSelectPlacements_withFullParams_whenEnabled() {
473+
var instance: MParticle = InnerMockMParticle()
474+
MParticle.setInstance(instance)
475+
`when`(instance.mConfigManager.isEnabled).thenReturn(true)
476+
477+
val attributes = mutableMapOf<String, String>()
478+
attributes["key"] = "value"
479+
480+
val placeholders: Map<String, WeakReference<RoktEmbeddedView>> = HashMap()
481+
val fonts: Map<String, WeakReference<Typeface>> = HashMap()
482+
483+
val onLoad: Runnable = mock(Runnable::class.java)
484+
val onUnload: Runnable = mock(Runnable::class.java)
485+
val onHide: Runnable = mock(Runnable::class.java)
486+
val onShow: Runnable = mock(Runnable::class.java)
487+
488+
instance.rokt!!.selectPlacements("testView", attributes, onUnload, onLoad, onHide, onShow, placeholders, fonts)
489+
490+
verify(instance.mKitManager)?.execute("testView", attributes, onUnload, onLoad, onHide, onShow, placeholders, fonts)
491+
}
492+
493+
@Test
494+
fun testSelectPlacements_withBasicParams_whenEnabled() {
495+
var instance: MParticle = InnerMockMParticle()
496+
MParticle.setInstance(instance)
497+
`when`(instance.mConfigManager.isEnabled()).thenReturn(true)
498+
499+
val attributes = mutableMapOf<String, String>()
500+
attributes.put("a", "b")
501+
502+
instance.rokt.selectPlacements("basicView", attributes)
503+
504+
verify(instance.mKitManager).execute("basicView", attributes, null, null, null, null, null, null)
505+
}
506+
507+
@Test
508+
fun testSelectPlacements_withBasicParams_whenDisabled() {
509+
var instance: MParticle = InnerMockMParticle()
510+
MParticle.setInstance(instance)
511+
`when`(instance.mConfigManager.isEnabled()).thenReturn(false)
512+
513+
instance.rokt.selectPlacements("basicView", HashMap())
514+
515+
verify(instance.mKitManager, never()).execute(any(), any(), any(), any(), any(), any(), any(), any())
516+
}
517+
464518
inner class InnerMockMParticle : MParticle() {
465519
init {
466520
mConfigManager = ConfigManager(MockContext())

android-core/src/test/kotlin/com/mparticle/external/ApiVisibilityTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class ApiVisibilityTest {
1717
publicMethodCount++
1818
}
1919
}
20-
Assert.assertEquals(65, publicMethodCount)
20+
Assert.assertEquals(66, publicMethodCount)
2121
}
2222

2323
@Test

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.Context;
55
import android.content.Intent;
66
import android.content.SharedPreferences;
7+
import android.graphics.Typeface;
78
import android.location.Location;
89
import android.net.Uri;
910
import android.os.Bundle;
@@ -14,6 +15,7 @@
1415
import com.mparticle.BaseEvent;
1516
import com.mparticle.MPEvent;
1617
import com.mparticle.MParticle;
18+
import com.mparticle.RoktEmbeddedView;
1719
import com.mparticle.commerce.CommerceEvent;
1820
import com.mparticle.consent.ConsentState;
1921
import com.mparticle.identity.MParticleUser;
@@ -608,4 +610,16 @@ public interface UserAttributeListener {
608610
public interface BatchListener {
609611
List<ReportingMessage> logBatch(JSONObject jsonObject);
610612
}
613+
614+
public interface RoktListener {
615+
void execute(String viewName,
616+
Map<String, String> attributes,
617+
Runnable onUnload,
618+
Runnable onLoad,
619+
Runnable onShouldHideLoadingIndicator,
620+
Runnable onShouldShowLoadingIndicator,
621+
Map<String, WeakReference<RoktEmbeddedView>> placeHolders,
622+
Map<String, WeakReference<Typeface>> fontTypefaces,
623+
FilteredMParticleUser user);
624+
}
611625
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ private void setupKnownIntegrations() {
6464
knownIntegrations.put(MParticle.ServiceProviders.SWRVE, "com.mparticle.kits.SwrveKit");
6565
knownIntegrations.put(MParticle.ServiceProviders.BLUESHIFT, "com.mparticle.kits.BlueshiftKit");
6666
knownIntegrations.put(MParticle.ServiceProviders.NEURA, "com.mparticle.kits.NeuraKit");
67+
knownIntegrations.put(MParticle.ServiceProviders.ROKT, "com.mparticle.kits.RoktKit");
6768
}
6869

6970
public KitIntegration createInstance(KitManagerImpl manager, KitConfiguration configuration) throws JSONException, ClassNotFoundException {

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Activity;
44
import android.content.Context;
55
import android.content.Intent;
6+
import android.graphics.Typeface;
67
import android.location.Location;
78
import android.net.Uri;
89
import android.os.Bundle;
@@ -23,6 +24,7 @@
2324
import com.mparticle.MParticle;
2425
import com.mparticle.MParticleOptions;
2526
import com.mparticle.UserAttributeListener;
27+
import com.mparticle.RoktEmbeddedView;
2628
import com.mparticle.commerce.CommerceEvent;
2729
import com.mparticle.consent.ConsentState;
2830
import com.mparticle.identity.IdentityApiRequest;
@@ -1319,6 +1321,42 @@ public void reset() {
13191321
}
13201322
}
13211323

1324+
@Override
1325+
public void execute(String viewName,
1326+
Map<String, String> attributes,
1327+
Runnable onUnload,
1328+
Runnable onLoad,
1329+
Runnable onShouldHideLoadingIndicator,
1330+
Runnable onShouldShowLoadingIndicator,
1331+
Map<String, WeakReference<RoktEmbeddedView>> placeHolders,
1332+
Map<String, WeakReference<Typeface>> fontTypefaces) {
1333+
for (KitIntegration provider : providers.values()) {
1334+
try {
1335+
if (provider instanceof KitIntegration.RoktListener && !provider.isDisabled()) {
1336+
MParticleUser user = MParticle.getInstance().Identity().getCurrentUser();
1337+
Map<String, Object> objectAttributes = new HashMap<>();
1338+
1339+
for (Map.Entry<String, String> entry : attributes.entrySet()) {
1340+
objectAttributes.put(entry.getKey(), entry.getValue());
1341+
}
1342+
1343+
user.setUserAttributes(objectAttributes);
1344+
((KitIntegration.RoktListener) provider).execute(viewName,
1345+
attributes,
1346+
onUnload,
1347+
onLoad,
1348+
onShouldHideLoadingIndicator,
1349+
onShouldShowLoadingIndicator,
1350+
placeHolders,
1351+
fontTypefaces,
1352+
FilteredMParticleUser.getInstance(user.getId(), provider));
1353+
}
1354+
} catch (Exception e) {
1355+
Logger.warning("Failed to call execute for kit: " + provider.getName() + ": " + e.getMessage());
1356+
}
1357+
}
1358+
}
1359+
13221360
public void runOnKitThread(Runnable runnable) {
13231361
if (mKitHandler == null) {
13241362
mKitHandler = new Handler(kitHandlerThread.getLooper());

testutils/src/main/java/com/mparticle/mock/MockMParticle.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,11 @@ class MockInternal extends Internal {
3535
super();
3636
}
3737
}
38+
39+
class MockRokt extends Rokt {
40+
41+
MockRokt() {
42+
super();
43+
}
44+
}
3845
}

0 commit comments

Comments
 (0)