Skip to content

Commit 497af13

Browse files
authored
fix: Pause mediaContentTimeSpent when logMediaContentEnd is triggered (#70)
1 parent 7cc7c46 commit 497af13

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

media/src/main/java/com/mparticle/media/MediaSession.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,10 @@ class MediaSession protected constructor(builder: Builder) {
174174
*/
175175
fun logMediaContentEnd(options: Options? = null) {
176176
mediaContentComplete = true
177+
currentPlaybackStartTimestamp?.let {
178+
storedPlaybackTime += ((System.currentTimeMillis() - it) / 1000)
179+
currentPlaybackStartTimestamp = null;
180+
}
177181
val mediaSessionEvent = MediaEvent(this, MediaEventName.CONTENT_END, options = options)
178182
logEvent(mediaSessionEvent)
179183
}

media/src/test/java/com/mparticle/MediaSessionTest.kt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import com.mparticle.media.MediaSession
44
import com.mparticle.media.events.*
55
import com.mparticle.testutils.RandomUtils
66
import junit.framework.Assert.*
7+
import org.junit.Assert
8+
import org.junit.Assert.assertNotEquals
79
import org.junit.Test
810
import java.lang.reflect.Method
911
import java.util.*
@@ -477,6 +479,60 @@ class MediaSessionTest {
477479
loggedEvents.add(baseEvent)
478480
}
479481
}
482+
483+
@Test
484+
fun testLogMediaContentEnd() {
485+
val mparticle = MockMParticle()
486+
val mediaSession = MediaSession.builder(mparticle) {
487+
title = "hello"
488+
mediaContentId ="123"
489+
duration =1000
490+
}
491+
492+
// logPlay is triggered to start media content time tracking.
493+
mediaSession.logPlay()
494+
// 1s delay added to account for the time spent on media content.
495+
Thread.sleep(1000)
496+
mediaSession.logMediaContentEnd()
497+
// Another 1s delay added after logMediaContentEnd is triggered to
498+
// account for time spent on media session (total = 2s).
499+
Thread.sleep(1000)
500+
mediaSession.logMediaSessionEnd()
501+
502+
val testContentTimeSpent = mediaSession.mediaContentTimeSpent
503+
val testTimeSpent = mediaSession.mediaTimeSpent
504+
505+
assertNotEquals(testContentTimeSpent, testTimeSpent)
506+
assertEquals(testContentTimeSpent, 1.0)
507+
assertEquals(testTimeSpent, 2.0)
508+
}
509+
510+
@Test
511+
fun testLogPause() {
512+
val mparticle = MockMParticle()
513+
val mediaSession = MediaSession.builder(mparticle) {
514+
title = "hello"
515+
mediaContentId ="123"
516+
duration =1000
517+
}
518+
519+
// logPlay is triggered to start media content time tracking.
520+
mediaSession.logPlay()
521+
// 1s delay added to account for the time spent on media content.
522+
Thread.sleep(1000)
523+
mediaSession.logPause()
524+
// Another 1s delay added after logPause is triggered to
525+
// account for time spent on media session (total = 2s).
526+
Thread.sleep(1000)
527+
mediaSession.logMediaSessionEnd()
528+
529+
val testContentTimeSpent = mediaSession.mediaContentTimeSpent
530+
val testTimeSpent = mediaSession.mediaTimeSpent
531+
532+
assertNotEquals(testContentTimeSpent, testTimeSpent)
533+
assertEquals(testContentTimeSpent, 1.0)
534+
assertEquals(testTimeSpent, 2.0)
535+
}
480536
}
481537

482538
fun <T: Any> T.assertTrue(assertion: (T) -> Boolean) {

0 commit comments

Comments
 (0)