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) ) 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) {