David Langley
11 months ago
committed by
GitHub
18 changed files with 230 additions and 72 deletions
@ -0,0 +1,32 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
plugins { |
||||||
|
id("io.element.android-library") |
||||||
|
alias(libs.plugins.anvil) |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "io.element.android.libraries.mediaplayer.api" |
||||||
|
} |
||||||
|
|
||||||
|
anvil { |
||||||
|
generateDaggerFactories.set(true) |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
implementation(projects.libraries.matrix.api) |
||||||
|
implementation(libs.coroutines.core) |
||||||
|
} |
@ -0,0 +1,78 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package io.element.android.libraries.mediaplayer.api |
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.EventId |
||||||
|
import kotlinx.coroutines.flow.StateFlow |
||||||
|
|
||||||
|
/** |
||||||
|
* A media player for Element X. |
||||||
|
*/ |
||||||
|
interface MediaPlayer : AutoCloseable { |
||||||
|
|
||||||
|
/** |
||||||
|
* The current state of the player. |
||||||
|
*/ |
||||||
|
val state: StateFlow<State> |
||||||
|
|
||||||
|
/** |
||||||
|
* Acquires control of the player and starts playing the given media. |
||||||
|
*/ |
||||||
|
fun acquireControlAndPlay( |
||||||
|
uri: String, |
||||||
|
mediaId: String, |
||||||
|
mimeType: String, |
||||||
|
) |
||||||
|
|
||||||
|
/** |
||||||
|
* Plays the current media. |
||||||
|
*/ |
||||||
|
fun play() |
||||||
|
|
||||||
|
/** |
||||||
|
* Pauses the current media. |
||||||
|
*/ |
||||||
|
fun pause() |
||||||
|
|
||||||
|
/** |
||||||
|
* Seeks the current media to the given position. |
||||||
|
*/ |
||||||
|
fun seekTo(positionMs: Long) |
||||||
|
|
||||||
|
/** |
||||||
|
* Releases any resources associated with this player. |
||||||
|
*/ |
||||||
|
override fun close() |
||||||
|
|
||||||
|
data class State( |
||||||
|
/** |
||||||
|
* Whether the player is currently playing. |
||||||
|
*/ |
||||||
|
val isPlaying: Boolean, |
||||||
|
/** |
||||||
|
* The id of the media which is currently playing. |
||||||
|
* |
||||||
|
* NB: This is usually the string representation of the [EventId] of the event |
||||||
|
* which contains the media. |
||||||
|
*/ |
||||||
|
val mediaId: String?, |
||||||
|
/** |
||||||
|
* The current position of the player. |
||||||
|
*/ |
||||||
|
val currentPosition: Long, |
||||||
|
) |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
plugins { |
||||||
|
id("io.element.android-library") |
||||||
|
alias(libs.plugins.anvil) |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "io.element.android.libraries.mediaplayer.impl" |
||||||
|
} |
||||||
|
|
||||||
|
anvil { |
||||||
|
generateDaggerFactories.set(true) |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
api(projects.libraries.mediaplayer.api) |
||||||
|
implementation(libs.androidx.media3.exoplayer) |
||||||
|
|
||||||
|
implementation(libs.dagger) |
||||||
|
implementation(projects.libraries.di) |
||||||
|
|
||||||
|
implementation(libs.coroutines.core) |
||||||
|
|
||||||
|
testImplementation(projects.tests.testutils) |
||||||
|
testImplementation(libs.test.junit) |
||||||
|
testImplementation(libs.test.truth) |
||||||
|
testImplementation(libs.test.mockk) |
||||||
|
testImplementation(libs.test.turbine) |
||||||
|
testImplementation(libs.coroutines.core) |
||||||
|
testImplementation(libs.coroutines.test) |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package io.element.android.libraries.mediaplayer.impl |
||||||
|
|
||||||
|
import kotlinx.coroutines.test.runTest |
||||||
|
import org.junit.Test |
||||||
|
|
||||||
|
class MediaPlayerImplTest { |
||||||
|
@Test |
||||||
|
fun `default test`() = runTest { |
||||||
|
// TODO |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
plugins { |
||||||
|
id("io.element.android-library") |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "io.element.android.libraries.mediaplayer.test" |
||||||
|
} |
||||||
|
|
||||||
|
dependencies { |
||||||
|
api(projects.libraries.mediaplayer.api) |
||||||
|
implementation(projects.tests.testutils) |
||||||
|
|
||||||
|
implementation(libs.coroutines.test) |
||||||
|
implementation(libs.test.truth) |
||||||
|
} |
Loading…
Reference in new issue