mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-25 02:52:45 +02:00
Update recorder view and content
This commit is contained in:
+4
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+22
-22
@@ -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
|
||||
}
|
||||
|
||||
+2
-1
@@ -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],
|
||||
|
||||
+5
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user