diff --git a/media/src/main/java/com/mparticle/media/MediaSession.kt b/media/src/main/java/com/mparticle/media/MediaSession.kt index 9422cf5..dd720fa 100644 --- a/media/src/main/java/com/mparticle/media/MediaSession.kt +++ b/media/src/main/java/com/mparticle/media/MediaSession.kt @@ -174,6 +174,10 @@ class MediaSession protected constructor(builder: Builder) { */ fun logMediaContentEnd(options: Options? = null) { mediaContentComplete = true + currentPlaybackStartTimestamp?.let { + storedPlaybackTime += ((System.currentTimeMillis() - it) / 1000) + currentPlaybackStartTimestamp = null; + } val mediaSessionEvent = MediaEvent(this, MediaEventName.CONTENT_END, options = options) logEvent(mediaSessionEvent) } diff --git a/media/src/test/java/com/mparticle/MediaSessionTest.kt b/media/src/test/java/com/mparticle/MediaSessionTest.kt index a4d30a6..1e0e352 100644 --- a/media/src/test/java/com/mparticle/MediaSessionTest.kt +++ b/media/src/test/java/com/mparticle/MediaSessionTest.kt @@ -4,6 +4,8 @@ import com.mparticle.media.MediaSession import com.mparticle.media.events.* import com.mparticle.testutils.RandomUtils import junit.framework.Assert.* +import org.junit.Assert +import org.junit.Assert.assertNotEquals import org.junit.Test import java.lang.reflect.Method import java.util.* @@ -477,6 +479,60 @@ class MediaSessionTest { loggedEvents.add(baseEvent) } } + + @Test + fun testLogMediaContentEnd() { + val mparticle = MockMParticle() + val mediaSession = MediaSession.builder(mparticle) { + title = "hello" + mediaContentId ="123" + duration =1000 + } + + // logPlay is triggered to start media content time tracking. + mediaSession.logPlay() + // 1s delay added to account for the time spent on media content. + Thread.sleep(1000) + mediaSession.logMediaContentEnd() + // Another 1s delay added after logMediaContentEnd is triggered to + // account for time spent on media session (total = 2s). + Thread.sleep(1000) + mediaSession.logMediaSessionEnd() + + val testContentTimeSpent = mediaSession.mediaContentTimeSpent + val testTimeSpent = mediaSession.mediaTimeSpent + + assertNotEquals(testContentTimeSpent, testTimeSpent) + assertEquals(testContentTimeSpent, 1.0) + assertEquals(testTimeSpent, 2.0) + } + + @Test + fun testLogPause() { + val mparticle = MockMParticle() + val mediaSession = MediaSession.builder(mparticle) { + title = "hello" + mediaContentId ="123" + duration =1000 + } + + // logPlay is triggered to start media content time tracking. + mediaSession.logPlay() + // 1s delay added to account for the time spent on media content. + Thread.sleep(1000) + mediaSession.logPause() + // Another 1s delay added after logPause is triggered to + // account for time spent on media session (total = 2s). + Thread.sleep(1000) + mediaSession.logMediaSessionEnd() + + val testContentTimeSpent = mediaSession.mediaContentTimeSpent + val testTimeSpent = mediaSession.mediaTimeSpent + + assertNotEquals(testContentTimeSpent, testTimeSpent) + assertEquals(testContentTimeSpent, 1.0) + assertEquals(testTimeSpent, 2.0) + } } fun T.assertTrue(assertion: (T) -> Boolean) {