Skip to content

Commit

Permalink
Fix: do not hide keyboard when recording a voice message (#1958)
Browse files Browse the repository at this point in the history
  • Loading branch information
nimau authored Oct 25, 2023
1 parent c6e4dc2 commit c020ba2
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,15 @@ struct ComposerToolbarViewState: BindableState {
}
return composerEmpty
}

var isVoiceMessageModeActivated: Bool {
switch composerMode {
case .recordVoiceMessage, .previewVoiceMessage:
return true
default:
return false
}
}
}

struct ComposerToolbarViewStateBindings {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,6 @@ final class ComposerToolbarViewModel: ComposerToolbarViewModelType, ComposerTool
case .default:
break
case .recordVoiceMessage(let audioRecorderState):
state.bindings.composerFocused = false
state.audioRecorderState = audioRecorderState
case .previewVoiceMessage(let audioPlayerState, _, _):
state.audioPlayerState = audioPlayerState
Expand Down
61 changes: 40 additions & 21 deletions ElementX/Sources/Screens/ComposerToolbar/View/ComposerToolbar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ struct ComposerToolbar: View {
}

private var topBar: some View {
HStack(alignment: .bottom, spacing: 5) {
topBarLayout {
mainTopBarContent

if !context.composerActionsEnabled {
Expand Down Expand Up @@ -105,31 +105,32 @@ struct ComposerToolbar: View {
.padding(.leading, 7)
}
}

private var topBarLayout: some Layout {
HStackLayout(alignment: .bottom, spacing: 5)
}

@ViewBuilder
private var mainTopBarContent: some View {
switch context.viewState.composerMode {
case .recordVoiceMessage(let state) where context.viewState.enableVoiceMessageComposer:
VoiceMessageRecordingComposer(recorderState: state)
.padding(.leading, 12)
case .previewVoiceMessage(let state, let waveform, let isUploading) where context.viewState.enableVoiceMessageComposer:
Group {
voiceMessageTrashButton
voiceMessagePreviewComposer(audioPlayerState: state, waveform: waveform)
ZStack {
topBarLayout {
if !context.composerActionsEnabled {
RoomAttachmentPicker(context: context)
}
messageComposer
.environmentObject(context)
.onTapGesture {
guard !composerFocused else { return }
composerFocused = true
}
.padding(.leading, context.composerActionsEnabled ? 7 : 0)
.padding(.trailing, context.composerActionsEnabled ? 4 : 0)
}
.disabled(isUploading)
default:
if !context.composerActionsEnabled {
RoomAttachmentPicker(context: context)
.opacity(context.viewState.isVoiceMessageModeActivated ? 0 : 1)

if context.viewState.isVoiceMessageModeActivated {
voiceMessageContent
}
messageComposer
.environmentObject(context)
.onTapGesture {
guard !composerFocused else { return }
composerFocused = true
}
.padding(.leading, context.composerActionsEnabled ? 7 : 0)
.padding(.trailing, context.composerActionsEnabled ? 4 : 0)
}
}

Expand Down Expand Up @@ -237,6 +238,24 @@ struct ComposerToolbar: View {

// MARK: - Voice message

@ViewBuilder
private var voiceMessageContent: some View {
// Display the voice message composer above to keep the focus and keep the keyboard open if it's already open.
switch context.viewState.composerMode {
case .recordVoiceMessage(let state) where context.viewState.enableVoiceMessageComposer:
VoiceMessageRecordingComposer(recorderState: state)
.padding(.leading, 12)
case .previewVoiceMessage(let state, let waveform, let isUploading) where context.viewState.enableVoiceMessageComposer:
topBarLayout {
voiceMessageTrashButton
voiceMessagePreviewComposer(audioPlayerState: state, waveform: waveform)
}
.disabled(isUploading)
default:
EmptyView()
}
}

private var voiceMessageRecordingButton: some View {
VoiceMessageRecordingButton {
showVoiceMessageRecordingTooltip = false
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit c020ba2

Please sign in to comment.