From 599155f184a3bb0893f33b62028ab8ae24699b0a Mon Sep 17 00:00:00 2001 From: Gustavo Pagani Date: Tue, 17 May 2022 16:40:24 +0100 Subject: [PATCH] Improve PlayerRepository; fix MediaItemPosition --- media/api/current.api | 1 + media/build.gradle | 5 +++-- .../horologist/media/model/MediaItemPosition.kt | 4 ++-- .../media/repository/PlayerRepository.kt | 14 ++++++++------ .../media/model/MediaItemPositionTest.kt | 16 ++++++++++++++++ 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/media/api/current.api b/media/api/current.api index d3f0b320c9..5a20fdedc4 100644 --- a/media/api/current.api +++ b/media/api/current.api @@ -89,6 +89,7 @@ package com.google.android.horologist.media.repository { method public boolean hasPreviousMediaItem(); method public void pause(); method public void play(); + method public void play(int mediaItemIndex); method public void prepare(); method public void release(); method public void removeMediaItem(int index); diff --git a/media/build.gradle b/media/build.gradle index eb2dbc992a..cc7659368d 100644 --- a/media/build.gradle +++ b/media/build.gradle @@ -22,8 +22,8 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } dependencies { @@ -31,6 +31,7 @@ dependencies { implementation libs.kotlinx.coroutines.core testImplementation libs.junit + testImplementation libs.truth } apply plugin: "com.vanniktech.maven.publish" \ No newline at end of file diff --git a/media/src/main/java/com/google/android/horologist/media/model/MediaItemPosition.kt b/media/src/main/java/com/google/android/horologist/media/model/MediaItemPosition.kt index 6636790a23..7f3ecbfe75 100644 --- a/media/src/main/java/com/google/android/horologist/media/model/MediaItemPosition.kt +++ b/media/src/main/java/com/google/android/horologist/media/model/MediaItemPosition.kt @@ -39,10 +39,10 @@ public sealed class MediaItemPosition( current: Duration, duration: Duration ): KnownDuration { - check(current.isNegative()) { + check(!current.isNegative()) { "Current position can't be a negative value [current: $current] [duration: $duration]." } - check(!duration.isPositive()) { + check(duration.isPositive()) { "Duration has to be greater than zero [current: $current] [duration: $duration]." } check(current <= duration) { diff --git a/media/src/main/java/com/google/android/horologist/media/repository/PlayerRepository.kt b/media/src/main/java/com/google/android/horologist/media/repository/PlayerRepository.kt index 250a9a9ffb..379ae474c4 100644 --- a/media/src/main/java/com/google/android/horologist/media/repository/PlayerRepository.kt +++ b/media/src/main/java/com/google/android/horologist/media/repository/PlayerRepository.kt @@ -22,6 +22,7 @@ import com.google.android.horologist.media.model.MediaItem import com.google.android.horologist.media.model.MediaItemPosition import com.google.android.horologist.media.model.PlayerState import kotlinx.coroutines.flow.StateFlow +import kotlin.time.Duration @ExperimentalHorologistMediaApi public interface PlayerRepository { @@ -61,6 +62,11 @@ public interface PlayerRepository { */ public fun play() + /** + * Play [media item][MediaItem] at given index as soon as player is ready. + */ + public fun play(mediaItemIndex: Int) + /** * Pauses playback. */ @@ -88,10 +94,8 @@ public interface PlayerRepository { /** * Returns the [seekBack] increment. - * - * @return The seek back increment, in milliseconds. */ - public fun getSeekBackIncrement(): Long + public fun getSeekBackIncrement(): Duration /** * Seeks back in the [current media item][currentMediaItem] by [seek back increment][getSeekBackIncrement]. @@ -100,10 +104,8 @@ public interface PlayerRepository { /** * Returns the [seekForward] increment. - * - * @return The seek forward increment, in milliseconds. */ - public fun getSeekForwardIncrement(): Long + public fun getSeekForwardIncrement(): Duration /** * Seek forward in the [current media item][currentMediaItem] by [seek forward increment][getSeekForwardIncrement]. diff --git a/media/src/test/java/com/google/android/horologist/media/model/MediaItemPositionTest.kt b/media/src/test/java/com/google/android/horologist/media/model/MediaItemPositionTest.kt index 6fa9c388cb..24d23c95c3 100644 --- a/media/src/test/java/com/google/android/horologist/media/model/MediaItemPositionTest.kt +++ b/media/src/test/java/com/google/android/horologist/media/model/MediaItemPositionTest.kt @@ -16,6 +16,7 @@ package com.google.android.horologist.media.model +import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertThrows import org.junit.Test import kotlin.time.Duration @@ -23,6 +24,21 @@ import kotlin.time.Duration.Companion.seconds class MediaItemPositionTest { + @Test + fun givenValidValues_whenCreateKnownPosition_thenCreateCorrectly() { + // given + val current = 1.seconds + val duration = 2.seconds + + // when + val result = MediaItemPosition.create(current = current, duration = duration) + + // then + assertThat(result.current).isEqualTo(current) + assertThat(result.duration).isEqualTo(duration) + assertThat(result.percent).isEqualTo(0.5f) + } + @Test fun givenCurrentPositionIsNegative_whenCreateKnownPosition_thenExceptionIsThrown() { // given