David Langley
11 months ago
committed by
GitHub
18 changed files with 230 additions and 72 deletions
@ -0,0 +1,32 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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