Update recorder view and content

This commit is contained in:
Philippe Loriaux
2022-10-19 21:19:28 +02:00
parent 3dd173ff4b
commit 1280ff9569
7 changed files with 41 additions and 29 deletions
@@ -24,6 +24,7 @@ struct VoiceBroadcastRecorderCoordinatorParameters {
let session: MXSession
let room: MXRoom
let voiceBroadcastStartEvent: MXEvent
let senderDisplayName: String?
}
final class VoiceBroadcastRecorderCoordinator: Coordinator, Presentable {
@@ -48,7 +49,9 @@ final class VoiceBroadcastRecorderCoordinator: Coordinator, Presentable {
voiceBroadcastRecorderService = VoiceBroadcastRecorderService(session: parameters.session, roomId: parameters.room.matrixItemId)
let viewModel = VoiceBroadcastRecorderViewModel(recorderService: voiceBroadcastRecorderService)
let details = VoiceBroadcastRecorderDetails(senderDisplayName: parameters.senderDisplayName)
let viewModel = VoiceBroadcastRecorderViewModel(details: details,
recorderService: voiceBroadcastRecorderService)
voiceBroadcastRecorderViewModel = viewModel
}
@@ -34,7 +34,7 @@ class VoiceBroadcastRecorderProvider {
/// Create or retrieve the voiceBroadcast timeline coordinator for this event and return
/// a view to be displayed in the timeline
func buildVoiceBroadcastRecorderViewForEvent(_ event: MXEvent) -> UIView? {
func buildVoiceBroadcastRecorderViewForEvent(_ event: MXEvent, senderDisplayName: String?) -> UIView? {
guard let session = session, let room = session.room(withRoomId: event.roomId) else {
return nil
}
@@ -43,7 +43,7 @@ class VoiceBroadcastRecorderProvider {
return coordinator.toPresentable().view
}
let parameters = VoiceBroadcastRecorderCoordinatorParameters(session: session, room: room, voiceBroadcastStartEvent: event)
let parameters = VoiceBroadcastRecorderCoordinatorParameters(session: session, room: room, voiceBroadcastStartEvent: event, senderDisplayName: senderDisplayName)
let coordinator = VoiceBroadcastRecorderCoordinator(parameters: parameters)
coordinatorsForEventIdentifiers[event.eventId] = coordinator
@@ -28,49 +28,49 @@ struct VoiceBroadcastRecorderView: View {
@ObservedObject var viewModel: VoiceBroadcastRecorderViewModel.Context
var body: some View {
let details = viewModel.viewState.details
VStack(alignment: .leading, spacing: 16.0) {
Text(VectorL10n.voiceBroadcastInTimelineTitle)
Text(details.senderDisplayName ?? "")
.font(theme.fonts.bodySB)
.foregroundColor(theme.colors.primaryContent)
HStack(alignment: .top, spacing: 16.0) {
Button {
// FIXME: Manage record in progress case
viewModel.send(viewAction: .start)
if viewModel.viewState.recordingState == .started {
viewModel.send(viewAction: .stop)
} else {
viewModel.send(viewAction: .start)
}
} label: {
// FIXME: Manage record in progress case
Image("voice_broadcast_record")
.renderingMode(.original)
if viewModel.viewState.recordingState == .started {
Image("voice_broadcast_stop")
.renderingMode(.original)
} else {
Image("voice_broadcast_record")
.renderingMode(.original)
}
}
.accessibilityIdentifier("recordButton")
Button {
// FIXME: Manage resume case
viewModel.send(viewAction: .pause)
if viewModel.viewState.recordingState == .paused {
viewModel.send(viewAction: .resume)
} else if viewModel.viewState.recordingState == .started {
viewModel.send(viewAction: .pause)
}
} label: {
Image("voice_broadcast_record_pause")
.renderingMode(.original)
}
.accessibilityIdentifier("pauseButton")
.disabled(viewModel.viewState.recordingState == .stopped)
.mask(Color.black.opacity(viewModel.viewState.recordingState == .stopped ? 0.3 : 1.0))
}
}
.padding([.horizontal, .top], 2.0)
.padding([.bottom])
}
// private func updateRecordingStatus() {
// switch viewModel.viewState.recordingState {
// case .started:
// viewModel.send(viewAction: .stop)
// case .paused:
// viewModel.send(viewAction: .resume)
// case .stopped:
// viewModel.send(viewAction: .start)
// case .resumed:
// viewModel.send(viewAction: .pause)
// }
// }
}
@@ -30,7 +30,12 @@ enum VoiceBroadcastRecorderState {
case resumed
}
struct VoiceBroadcastRecorderDetails {
let senderDisplayName: String?
}
struct VoiceBroadcastRecorderViewState: BindableState {
var details: VoiceBroadcastRecorderDetails
var recordingState: VoiceBroadcastRecorderState
var bindings: VoiceBroadcastRecorderViewStateBindings
}
@@ -31,7 +31,8 @@ enum MockVoiceBroadcastRecorderScreenState: MockScreenState, CaseIterable {
}
var screenView: ([Any], AnyView) {
let viewModel = MockVoiceBroadcastRecorderViewModel(initialViewState: VoiceBroadcastRecorderViewState(recordingState: .stopped, bindings: VoiceBroadcastRecorderViewStateBindings()))
let details = VoiceBroadcastRecorderDetails(senderDisplayName: "")
let viewModel = MockVoiceBroadcastRecorderViewModel(initialViewState: VoiceBroadcastRecorderViewState(details: details, recordingState: .stopped, bindings: VoiceBroadcastRecorderViewStateBindings()))
return (
[false, viewModel],
@@ -31,9 +31,12 @@ class VoiceBroadcastRecorderViewModel: VoiceBroadcastRecorderViewModelType, Voic
// MARK: - Setup
init(recorderService: VoiceBroadcastRecorderServiceProtocol) {
init(details: VoiceBroadcastRecorderDetails,
recorderService: VoiceBroadcastRecorderServiceProtocol) {
self.voiceBroadcastRecorderService = recorderService
super.init(initialViewState: VoiceBroadcastRecorderViewState(recordingState: .stopped, bindings: VoiceBroadcastRecorderViewStateBindings()))
super.init(initialViewState: VoiceBroadcastRecorderViewState(details: details,
recordingState: .stopped,
bindings: VoiceBroadcastRecorderViewStateBindings()))
}
// MARK: - Public