From a640061dfc91f115944d398d167da609f193d68d Mon Sep 17 00:00:00 2001 From: "Mathieu Massicotte, CEP" <38018243+massicottem@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:49:16 -0500 Subject: [PATCH 1/4] Fix: Fix mediaContentComplete calculation (#66) --- media/src/main/java/com/mparticle/media/MediaSession.kt | 2 +- 1 file changed, 1 insertion(+), 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 7c60094..9422cf5 100644 --- a/media/src/main/java/com/mparticle/media/MediaSession.kt +++ b/media/src/main/java/com/mparticle/media/MediaSession.kt @@ -602,7 +602,7 @@ class MediaSession protected constructor(builder: Builder) { } mediaSessionEndTimestamp = System.currentTimeMillis() - if (mediaContentCompleteLimit < 100 && (duration != null && currentPlayheadPosition != null) && ((currentPlayheadPosition!! / duration!!) >= (mediaContentCompleteLimit / 100))) { + if (mediaContentCompleteLimit < 100 && (duration != null && currentPlayheadPosition != null) && ((currentPlayheadPosition!! / duration!!.toDouble()) >= (mediaContentCompleteLimit / 100.0))) { mediaContentComplete = true } From 1d83c2b11aa27cb5b3784570a354e97ad5b4ab0e Mon Sep 17 00:00:00 2001 From: Mo Mustafa Date: Wed, 26 Mar 2025 13:42:48 -0700 Subject: [PATCH 2/4] fix: Pause mediaContentTimeSpent when logMediaContentEnd is triggered --- .../java/com/mparticle/media/MediaSession.kt | 4 ++ .../java/com/mparticle/MediaSessionTest.kt | 57 +++++++++++++++++++ 2 files changed, 61 insertions(+) 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..7712c35 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,61 @@ 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 + + println(testContentTimeSpent) + 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 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) + } } fun T.assertTrue(assertion: (T) -> Boolean) { From 07a5e0cdc1c1d6160b6f18788b5a9a7077fc0a33 Mon Sep 17 00:00:00 2001 From: Mo Mustafa Date: Wed, 26 Mar 2025 13:48:55 -0700 Subject: [PATCH 3/4] remove testinf println --- media/src/test/java/com/mparticle/MediaSessionTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/media/src/test/java/com/mparticle/MediaSessionTest.kt b/media/src/test/java/com/mparticle/MediaSessionTest.kt index 7712c35..ffb7d05 100644 --- a/media/src/test/java/com/mparticle/MediaSessionTest.kt +++ b/media/src/test/java/com/mparticle/MediaSessionTest.kt @@ -502,7 +502,6 @@ class MediaSessionTest { val testContentTimeSpent = mediaSession.mediaContentTimeSpent val testTimeSpent = mediaSession.mediaTimeSpent - println(testContentTimeSpent) assertNotEquals(testContentTimeSpent, testTimeSpent) assertEquals(testContentTimeSpent, 1.0) assertEquals(testTimeSpent, 2.0) From f4294f5a11ee77d7d3581782d147fe9041f48fe5 Mon Sep 17 00:00:00 2001 From: Mo Mustafa Date: Wed, 26 Mar 2025 13:50:08 -0700 Subject: [PATCH 4/4] correct testLogPause comment --- media/src/test/java/com/mparticle/MediaSessionTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media/src/test/java/com/mparticle/MediaSessionTest.kt b/media/src/test/java/com/mparticle/MediaSessionTest.kt index ffb7d05..1e0e352 100644 --- a/media/src/test/java/com/mparticle/MediaSessionTest.kt +++ b/media/src/test/java/com/mparticle/MediaSessionTest.kt @@ -521,7 +521,7 @@ class MediaSessionTest { // 1s delay added to account for the time spent on media content. Thread.sleep(1000) mediaSession.logPause() - // Another 1s delay added after logMediaContentEnd is triggered to + // Another 1s delay added after logPause is triggered to // account for time spent on media session (total = 2s). Thread.sleep(1000) mediaSession.logMediaSessionEnd()