From 8c26cf20345f0cbe843bec7321df6b5afb852071 Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Thu, 22 May 2025 16:05:57 -0400 Subject: [PATCH 1/2] fix: handle ad_break_id key in the ad Summary event --- media/src/main/java/com/mparticle/media/MediaSession.kt | 8 ++++++++ media/src/main/java/com/mparticle/media/events/MediaAd.kt | 3 ++- .../main/java/com/mparticle/media/events/MediaEvent.kt | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/media/src/main/java/com/mparticle/media/MediaSession.kt b/media/src/main/java/com/mparticle/media/MediaSession.kt index dd720fa..386d25b 100644 --- a/media/src/main/java/com/mparticle/media/MediaSession.kt +++ b/media/src/main/java/com/mparticle/media/MediaSession.kt @@ -78,6 +78,7 @@ class MediaSession protected constructor(builder: Builder) { private var adContent: MediaAd? = null private var segment: MediaSegment? = null + private var mediaAdBreak: MediaAdBreak? = null var mediaSessionStartTimestamp: Long //Timestamp created on logMediaSessionStart event private set @@ -283,6 +284,7 @@ class MediaSession protected constructor(builder: Builder) { val adBreakEvent = MediaEvent(this, MediaEventName.AD_BREAK_START, options = options).apply { this.adBreak = adBreak } + mediaAdBreak = adBreak logEvent(adBreakEvent) } @@ -337,6 +339,9 @@ class MediaSession protected constructor(builder: Builder) { mediaTotalAdTimeSpent += ((endTime - startTime) / 1000) } val adEndEvent = MediaEvent(this, MediaEventName.AD_END, options = options) + mediaAdBreak?.let { + adContent?.adBreakId = it.id + } logEvent(adEndEvent) logAdSummary(adContent) @@ -590,6 +595,9 @@ class MediaSession protected constructor(builder: Builder) { ad.title?.let { customAttributes[adContentTitleKey] = it } + ad.adBreakId?.let { + customAttributes[adBreakIdKey] = it + } customAttributes[adContentSkippedKey] = ad.adSkipped.toString() customAttributes[adContentCompletedKey] = ad.adCompleted.toString() diff --git a/media/src/main/java/com/mparticle/media/events/MediaAd.kt b/media/src/main/java/com/mparticle/media/events/MediaAd.kt index 72a12eb..42db1f3 100644 --- a/media/src/main/java/com/mparticle/media/events/MediaAd.kt +++ b/media/src/main/java/com/mparticle/media/events/MediaAd.kt @@ -19,5 +19,6 @@ class MediaAd( internal var adStartTimestamp: Long? = null, internal var adEndTimestamp: Long? = null, internal var adSkipped: Boolean = false, - internal var adCompleted: Boolean = false + internal var adCompleted: Boolean = false, + internal var adBreakId: String? = null ) \ No newline at end of file diff --git a/media/src/main/java/com/mparticle/media/events/MediaEvent.kt b/media/src/main/java/com/mparticle/media/events/MediaEvent.kt index cb2fa66..2c3053b 100644 --- a/media/src/main/java/com/mparticle/media/events/MediaEvent.kt +++ b/media/src/main/java/com/mparticle/media/events/MediaEvent.kt @@ -176,6 +176,7 @@ open class MediaEvent( adBreak?.apply { json.put( "adBreak", JSONObject() + .put("id",id) .put("title", title) .put("duration", duration) ) From 93c4169063341d27464bc7561a6a9f4d79b404db Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Tue, 3 Jun 2025 16:34:13 -0400 Subject: [PATCH 2/2] Added Test cases --- .../java/com/mparticle/MediaSessionTest.kt | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/media/src/test/java/com/mparticle/MediaSessionTest.kt b/media/src/test/java/com/mparticle/MediaSessionTest.kt index 1e0e352..e06b960 100644 --- a/media/src/test/java/com/mparticle/MediaSessionTest.kt +++ b/media/src/test/java/com/mparticle/MediaSessionTest.kt @@ -533,6 +533,70 @@ class MediaSessionTest { assertEquals(testContentTimeSpent, 1.0) assertEquals(testTimeSpent, 2.0) } + + @Test + fun testLogAdSummary() { + val mparticle = MockMParticle() + val mediaSession = MediaSession.builder(mparticle) { + title = "hello" + mediaContentId ="123" + duration =1000 + } + + val events = mutableListOf() + mediaSession.mediaEventListener = { event -> + events.add(event) + } + mediaSession.logAdStart { } + mediaSession.logAdBreakStart { + id = "123456" + title = "TestADBREAk" + } + mediaSession.logAdEnd() + mediaSession.logAdBreakEnd() + assertEquals(4, events.size) + events.forEach { + it.mediaContent.apply { + assertEquals("hello", name) + assertEquals("123", contentId) + assertEquals(1000L, duration) + } + } + assertNotNull(mparticle.loggedEvents[3].customAttributes) + assertNotNull(mparticle.loggedEvents[3].customAttributes?.get("ad_break_id")) + assertEquals("123456",mparticle.loggedEvents[3].customAttributes?.get("ad_break_id")) + } + + @Test + fun testLogAdSummary_When_Break_ID_IS_NULL() { + val mparticle = MockMParticle() + val mediaSession = MediaSession.builder(mparticle) { + title = "hello" + mediaContentId ="123" + duration =1000 + } + + val events = mutableListOf() + mediaSession.mediaEventListener = { event -> + events.add(event) + } + mediaSession.logAdStart { } + mediaSession.logAdBreakStart { + title = "TestADBREAk" + } + mediaSession.logAdEnd() + mediaSession.logAdBreakEnd() + assertEquals(4, events.size) + events.forEach { + it.mediaContent.apply { + assertEquals("hello", name) + assertEquals("123", contentId) + assertEquals(1000L, duration) + } + } + assertNotNull(mparticle.loggedEvents[3].customAttributes) + assertNull(mparticle.loggedEvents[3].customAttributes?.get("ad_break_id")) + } } fun T.assertTrue(assertion: (T) -> Boolean) {