Skip to content

Commit 01ab39e

Browse files
authored
Merge pull request #7478 from vector-im/feature/fre/voice_broadcast_player_interface
Voice Broadcast - Some internal improvements related to the player
2 parents 40ea00f + 838e11c commit 01ab39e

22 files changed

+332
-158
lines changed

changelog.d/7478.wip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[Voice Broadcast] Improve playlist fetching and player codebase

vector/src/main/java/im/vector/app/core/di/VoiceModule.kt

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,33 @@ package im.vector.app.core.di
1818

1919
import android.content.Context
2020
import android.os.Build
21+
import dagger.Binds
2122
import dagger.Module
2223
import dagger.Provides
2324
import dagger.hilt.InstallIn
2425
import dagger.hilt.components.SingletonComponent
25-
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
26-
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorderQ
26+
import im.vector.app.features.voicebroadcast.listening.VoiceBroadcastPlayer
27+
import im.vector.app.features.voicebroadcast.listening.VoiceBroadcastPlayerImpl
28+
import im.vector.app.features.voicebroadcast.recording.VoiceBroadcastRecorder
29+
import im.vector.app.features.voicebroadcast.recording.VoiceBroadcastRecorderQ
2730
import javax.inject.Singleton
2831

29-
@Module
3032
@InstallIn(SingletonComponent::class)
31-
object VoiceModule {
32-
@Provides
33-
@Singleton
34-
fun providesVoiceBroadcastRecorder(context: Context): VoiceBroadcastRecorder? {
35-
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
36-
VoiceBroadcastRecorderQ(context)
37-
} else {
38-
null
33+
@Module
34+
abstract class VoiceModule {
35+
36+
companion object {
37+
@Provides
38+
@Singleton
39+
fun providesVoiceBroadcastRecorder(context: Context): VoiceBroadcastRecorder? {
40+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
41+
VoiceBroadcastRecorderQ(context)
42+
} else {
43+
null
44+
}
3945
}
4046
}
47+
48+
@Binds
49+
abstract fun bindVoiceBroadcastPlayer(player: VoiceBroadcastPlayerImpl): VoiceBroadcastPlayer
4150
}

vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import im.vector.app.features.raw.wellknown.isSecureBackupRequired
4242
import im.vector.app.features.raw.wellknown.withElementWellKnown
4343
import im.vector.app.features.session.coroutineScope
4444
import im.vector.app.features.settings.VectorPreferences
45-
import im.vector.app.features.voicebroadcast.usecase.StopOngoingVoiceBroadcastUseCase
45+
import im.vector.app.features.voicebroadcast.recording.usecase.StopOngoingVoiceBroadcastUseCase
4646
import im.vector.lib.core.utils.compat.getParcelableExtraCompat
4747
import kotlinx.coroutines.Dispatchers
4848
import kotlinx.coroutines.delay

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VoiceBroadcastItemFactory.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ import im.vector.app.features.home.room.detail.timeline.item.MessageVoiceBroadca
2626
import im.vector.app.features.home.room.detail.timeline.item.MessageVoiceBroadcastListeningItem_
2727
import im.vector.app.features.home.room.detail.timeline.item.MessageVoiceBroadcastRecordingItem
2828
import im.vector.app.features.home.room.detail.timeline.item.MessageVoiceBroadcastRecordingItem_
29-
import im.vector.app.features.voicebroadcast.VoiceBroadcastPlayer
30-
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
29+
import im.vector.app.features.voicebroadcast.listening.VoiceBroadcastPlayer
3130
import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent
3231
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
3332
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
33+
import im.vector.app.features.voicebroadcast.recording.VoiceBroadcastRecorder
3434
import org.matrix.android.sdk.api.session.Session
3535
import org.matrix.android.sdk.api.session.getRoom
3636
import org.matrix.android.sdk.api.session.getUserOrDefault

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/AbsMessageVoiceBroadcastItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ import im.vector.app.R
2525
import im.vector.app.core.extensions.tintBackground
2626
import im.vector.app.core.resources.ColorProvider
2727
import im.vector.app.core.resources.DrawableProvider
28-
import im.vector.app.features.voicebroadcast.VoiceBroadcastPlayer
29-
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
28+
import im.vector.app.features.voicebroadcast.listening.VoiceBroadcastPlayer
3029
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
30+
import im.vector.app.features.voicebroadcast.recording.VoiceBroadcastRecorder
3131
import org.matrix.android.sdk.api.util.MatrixItem
3232

3333
abstract class AbsMessageVoiceBroadcastItem<H : AbsMessageVoiceBroadcastItem.Holder> : AbsMessageItem<H>() {

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceBroadcastListeningItem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import com.airbnb.epoxy.EpoxyModelClass
2323
import im.vector.app.R
2424
import im.vector.app.core.epoxy.onClick
2525
import im.vector.app.features.home.room.detail.RoomDetailAction
26-
import im.vector.app.features.voicebroadcast.VoiceBroadcastPlayer
26+
import im.vector.app.features.voicebroadcast.listening.VoiceBroadcastPlayer
2727
import im.vector.app.features.voicebroadcast.views.VoiceBroadcastMetadataView
2828

2929
@EpoxyModelClass

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceBroadcastRecordingItem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import com.airbnb.epoxy.EpoxyModelClass
2222
import im.vector.app.R
2323
import im.vector.app.core.epoxy.onClick
2424
import im.vector.app.features.home.room.detail.RoomDetailAction.VoiceBroadcastAction
25-
import im.vector.app.features.voicebroadcast.VoiceBroadcastRecorder
2625
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
26+
import im.vector.app.features.voicebroadcast.recording.VoiceBroadcastRecorder
2727
import im.vector.app.features.voicebroadcast.views.VoiceBroadcastMetadataView
2828

2929
@EpoxyModelClass

vector/src/main/java/im/vector/app/features/voicebroadcast/VoiceBroadcastHelper.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616

1717
package im.vector.app.features.voicebroadcast
1818

19-
import im.vector.app.features.voicebroadcast.usecase.PauseVoiceBroadcastUseCase
20-
import im.vector.app.features.voicebroadcast.usecase.ResumeVoiceBroadcastUseCase
21-
import im.vector.app.features.voicebroadcast.usecase.StartVoiceBroadcastUseCase
22-
import im.vector.app.features.voicebroadcast.usecase.StopVoiceBroadcastUseCase
19+
import im.vector.app.features.voicebroadcast.listening.VoiceBroadcastPlayer
20+
import im.vector.app.features.voicebroadcast.recording.usecase.PauseVoiceBroadcastUseCase
21+
import im.vector.app.features.voicebroadcast.recording.usecase.ResumeVoiceBroadcastUseCase
22+
import im.vector.app.features.voicebroadcast.recording.usecase.StartVoiceBroadcastUseCase
23+
import im.vector.app.features.voicebroadcast.recording.usecase.StopVoiceBroadcastUseCase
2324
import javax.inject.Inject
2425

2526
/**
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright (c) 2022 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package im.vector.app.features.voicebroadcast.listening
18+
19+
interface VoiceBroadcastPlayer {
20+
21+
/**
22+
* The current playing voice broadcast identifier, if any.
23+
*/
24+
val currentVoiceBroadcastId: String?
25+
26+
/**
27+
* The current playing [State], [State.IDLE] by default.
28+
*/
29+
val playingState: State
30+
31+
/**
32+
* Start playback of the given voice broadcast.
33+
*/
34+
fun playOrResume(roomId: String, voiceBroadcastId: String)
35+
36+
/**
37+
* Pause playback of the current voice broadcast, if any.
38+
*/
39+
fun pause()
40+
41+
/**
42+
* Stop playback of the current voice broadcast, if any, and reset the player state.
43+
*/
44+
fun stop()
45+
46+
/**
47+
* Add a [Listener] to the given voice broadcast id.
48+
*/
49+
fun addListener(voiceBroadcastId: String, listener: Listener)
50+
51+
/**
52+
* Remove a [Listener] from the given voice broadcast id.
53+
*/
54+
fun removeListener(voiceBroadcastId: String, listener: Listener)
55+
56+
/**
57+
* Player states.
58+
*/
59+
enum class State {
60+
PLAYING,
61+
PAUSED,
62+
BUFFERING,
63+
IDLE
64+
}
65+
66+
/**
67+
* Listener related to [VoiceBroadcastPlayer].
68+
*/
69+
fun interface Listener {
70+
/**
71+
* Notify about [VoiceBroadcastPlayer.playingState] changes.
72+
*/
73+
fun onStateChanged(state: State)
74+
}
75+
}

0 commit comments

Comments
 (0)