Inform the user about decryption errors during a voice broadcast

This commit is contained in:
Nicolas Mauri
2023-01-23 16:17:33 +01:00
parent 9aa9f7752e
commit 13b7f78de7
10 changed files with 120 additions and 15 deletions
@@ -0,0 +1,47 @@
//
// Copyright 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.
//
import SwiftUI
struct VoiceBroadcastPlaybackDecryptionErrorView: View {
// MARK: - Properties
// MARK: Private
@Environment(\.theme) private var theme: ThemeSwiftUI
// MARK: Public
var body: some View {
ZStack {
HStack(spacing: 0) {
Image(uiImage: Asset.Images.errorIcon.image)
.frame(width: 40, height: 40)
Text(VectorL10n.voiceBroadcastPlaybackUnableToDecrypt)
.multilineTextAlignment(.center)
.font(theme.fonts.caption1)
.foregroundColor(theme.colors.alert)
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct VoiceBroadcastPlaybackDecryptionErrorView_Previews: PreviewProvider {
static var previews: some View {
VoiceBroadcastPlaybackDecryptionErrorView()
}
}
@@ -91,7 +91,7 @@ struct VoiceBroadcastPlaybackView: View {
}
}
}.frame(maxWidth: .infinity, alignment: .leading)
if viewModel.viewState.broadcastState != .stopped {
Label {
Text(VectorL10n.voiceBroadcastLive)
@@ -109,7 +109,12 @@ struct VoiceBroadcastPlaybackView: View {
.frame(maxWidth: .infinity, alignment: .leading)
.padding(EdgeInsets(top: 0.0, leading: 0.0, bottom: 4.0, trailing: 0.0))
if viewModel.viewState.playbackState == .error {
if viewModel.viewState.decryptionState.errorCount > 0 {
VoiceBroadcastPlaybackDecryptionErrorView()
.fixedSize(horizontal: false, vertical: true)
.accessibilityIdentifier("decryptionErrorView")
}
else if viewModel.viewState.playbackState == .error {
VoiceBroadcastPlaybackErrorView()
} else {
HStack (spacing: 34.0) {
@@ -156,8 +161,8 @@ struct VoiceBroadcastPlaybackView: View {
}
VoiceBroadcastSlider(value: $viewModel.progress,
minValue: 0.0,
maxValue: viewModel.viewState.playingState.duration) { didChange in
minValue: 0.0,
maxValue: viewModel.viewState.playingState.duration) { didChange in
viewModel.send(viewAction: .sliderChange(didChange: didChange))
}