@@ -91,7 +91,7 @@ class MediaSession protected constructor(builder: Builder) {
9191 val mediaContentTimeSpent: Double
9292 get() { // total seconds spent playing content
9393 return currentPlaybackStartTimestamp?.let {
94- this .storedPlaybackTime + (System .currentTimeMillis().minus( it) / 1000 ).toDouble()
94+ this .storedPlaybackTime + (System .currentTimeMillis() - it) / 1000.0
9595 } ? : this .storedPlaybackTime
9696 }
9797 var mediaContentCompleteLimit: Int = 100
@@ -119,7 +119,7 @@ class MediaSession protected constructor(builder: Builder) {
119119 var storedPlaybackTime: Double = 0.0 // On Pause calculate playback time and clear currentPlaybackTime
120120 private set
121121 private var sessionSummarySent = false // Ensures we only send summary event once
122- private var pausedByAdBreak : Boolean = false // Tracks if content was paused by an ad break (for resume logic)
122+ private var playbackState : PlaybackState = PlaybackState . PAUSED_BY_USER // Tracks whether playback was playing, paused, or paused by ad break
123123
124124 private var testing = false // Enabled for test cases
125125
@@ -192,6 +192,8 @@ class MediaSession protected constructor(builder: Builder) {
192192 if (currentPlaybackStartTimestamp == null ) {
193193 currentPlaybackStartTimestamp = System .currentTimeMillis()
194194 }
195+
196+ playbackState = PlaybackState .PLAYING
195197 val playEvent = MediaEvent (this , MediaEventName .PLAY , options = options)
196198 logEvent(playEvent)
197199 }
@@ -204,6 +206,8 @@ class MediaSession protected constructor(builder: Builder) {
204206 storedPlaybackTime + = ((System .currentTimeMillis() - it) / 1000 )
205207 currentPlaybackStartTimestamp = null ;
206208 }
209+
210+ playbackState = PlaybackState .PAUSED_BY_USER
207211 val pauseEvent = MediaEvent (this , MediaEventName .PAUSE , options = options)
208212 logEvent(pauseEvent)
209213 }
@@ -576,34 +580,30 @@ class MediaSession protected constructor(builder: Builder) {
576580 }
577581
578582 private fun pauseContentTimeIfAdBreakExclusionEnabled () {
579- if (excludeAdBreaksFromContentTime) {
580- currentPlaybackStartTimestamp?.let {
581- storedPlaybackTime + = ((System .currentTimeMillis() - it) / 1000 )
582- currentPlaybackStartTimestamp = null
583- pausedByAdBreak = true
584- } ? : run {
585- // Content was already paused, don't mark as paused by ad break
586- pausedByAdBreak = false
587- }
583+ if (! excludeAdBreaksFromContentTime || playbackState != PlaybackState .PLAYING ) return
584+
585+ currentPlaybackStartTimestamp?.let {
586+ storedPlaybackTime + = (System .currentTimeMillis() - it) / 1000.0
587+ currentPlaybackStartTimestamp = null
588+ playbackState = PlaybackState .PAUSED_BY_AD_BREAK
588589 }
589590 }
590591
591592 private fun resumeContentTimeIfAdBreakExclusionEnabled () {
592- if (excludeAdBreaksFromContentTime) {
593- // Only resume if content was paused by the ad break, not if it was already paused
594- if (pausedByAdBreak && currentPlaybackStartTimestamp == null ) {
595- currentPlaybackStartTimestamp = System .currentTimeMillis()
596- }
597- pausedByAdBreak = false
598- }
593+ if (! excludeAdBreaksFromContentTime || playbackState != PlaybackState .PAUSED_BY_AD_BREAK ) return
594+
595+ currentPlaybackStartTimestamp = System .currentTimeMillis()
596+ playbackState = PlaybackState .PLAYING
599597 }
600598
601599 private fun logAdSummary (content : MediaAd ? ) {
602600 content?.let { ad ->
603601 ad.adStartTimestamp?.let { startTime ->
604- val endTime = System .currentTimeMillis()
605- ad.adEndTimestamp = endTime
606- mediaTotalAdTimeSpent + = ((endTime - startTime) / 1000 ).toDouble()
602+ val endTime = ad.adEndTimestamp ? : System .currentTimeMillis()
603+ if (ad.adEndTimestamp == null ) {
604+ ad.adEndTimestamp = endTime
605+ mediaTotalAdTimeSpent + = ((endTime - startTime) / 1000 ).toDouble()
606+ }
607607 }
608608
609609 val customAttributes: MutableMap <String , String > = mutableMapOf ()
@@ -802,6 +802,12 @@ class MediaSession protected constructor(builder: Builder) {
802802
803803}
804804
805+ private enum class PlaybackState {
806+ PLAYING ,
807+ PAUSED_BY_USER ,
808+ PAUSED_BY_AD_BREAK
809+ }
810+
805811private fun String?.require (variableName : String ): String {
806812 if (this == null ) {
807813 Logger .error(" \" $variableName \" should not be null" )
0 commit comments