diff --git a/media-data/src/main/java/com/google/android/horologist/media/data/mapper/MediaPositionMapper.kt b/media-data/src/main/java/com/google/android/horologist/media/data/mapper/MediaPositionMapper.kt index 52c27e6094..88e75df057 100644 --- a/media-data/src/main/java/com/google/android/horologist/media/data/mapper/MediaPositionMapper.kt +++ b/media-data/src/main/java/com/google/android/horologist/media/data/mapper/MediaPositionMapper.kt @@ -30,7 +30,7 @@ public object MediaPositionMapper { public fun map(player: Player?): MediaPosition? { return if (player == null || player.currentMediaItem == null) { null - } else if (player.duration == C.TIME_UNSET) { + } else if (player.duration == C.TIME_UNSET || player.duration <= 0L) { MediaPosition.UnknownDuration(player.currentPosition.milliseconds) } else { MediaPosition.create( diff --git a/media-data/src/test/java/com/google/android/horologist/media/data/mapper/MediaPositionMapperTest.kt b/media-data/src/test/java/com/google/android/horologist/media/data/mapper/MediaPositionMapperTest.kt index 9c008d8634..fcc6552fdd 100644 --- a/media-data/src/test/java/com/google/android/horologist/media/data/mapper/MediaPositionMapperTest.kt +++ b/media-data/src/test/java/com/google/android/horologist/media/data/mapper/MediaPositionMapperTest.kt @@ -36,7 +36,7 @@ class MediaPositionMapperTest { } @Test - fun `check position calculations unknown duration`() { + fun `check position calculation unset results in unknown duration`() { fakeStatePlayer.overridePosition( currentPosition = 10L, duration = C.TIME_UNSET @@ -46,6 +46,17 @@ class MediaPositionMapperTest { assertThat(position.current).isEqualTo(10.milliseconds) } + @Test + fun `check position calculation invalid results in unknown duration`() { + fakeStatePlayer.overridePosition( + currentPosition = 10L, + duration = -500L + ) + val position = + MediaPositionMapper.map(fakeStatePlayer) as MediaPosition.UnknownDuration + assertThat(position.current).isEqualTo(10.milliseconds) + } + @Test fun `check position calculations past end`() { fakeStatePlayer.overridePosition( diff --git a/media/src/main/java/com/google/android/horologist/media/model/MediaPosition.kt b/media/src/main/java/com/google/android/horologist/media/model/MediaPosition.kt index 681deffad5..db1a6c94c0 100644 --- a/media/src/main/java/com/google/android/horologist/media/model/MediaPosition.kt +++ b/media/src/main/java/com/google/android/horologist/media/model/MediaPosition.kt @@ -48,7 +48,7 @@ public sealed class MediaPosition( "Duration has to be greater than zero [current: $current] [duration: $duration]." } check(current <= duration) { - "Current position has to be greater than duration [current: $current] [duration: $duration]." + "Duration can't be less than current position [current: $current] [duration: $duration]." } val percent =