AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Setup/SetupViewComponent/PreviewAreaView.swift (79 lines of code) (raw):

// // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // import SwiftUI import FluentUI struct PreviewAreaView: View { @ObservedObject var viewModel: PreviewAreaViewModel let viewManager: VideoViewManager let avatarManager: AvatarViewManagerProtocol var body: some View { Group { if viewModel.isPermissionsDenied { PermissionWarningView(displayIcon: viewModel.getPermissionWarningIcon(), displayText: viewModel.getPermissionWarningText(), goToSettingsButtonViewModel: viewModel.goToSettingsButtonViewModel) } else { localVideoPreviewView } } } var localVideoPreviewView: some View { return LocalVideoView(viewModel: viewModel.localVideoViewModel, viewManager: viewManager, viewType: .preview, avatarManager: avatarManager) } } struct PermissionWarningView: View { let displayIcon: CompositeIcon let displayText: String let goToSettingsButtonViewModel: PrimaryButtonViewModel private enum Constants { static var verticalSpacing: CGFloat = 20 static var horizontalSpacing: CGFloat = 16 static var iconSize: CGFloat = 50 } var body: some View { GeometryReader { geometry in VStack(spacing: Constants.verticalSpacing) { Spacer() GeometryReader { scrollViewGeometry in ScrollView { VStack { Icon(name: displayIcon, size: Constants.iconSize) .foregroundColor(Color(StyleProvider.color.onSurface)) Text(displayText) .padding(.horizontal, Constants.horizontalSpacing) .font(Fonts.subhead.font) .multilineTextAlignment(.center) .foregroundColor(Color(StyleProvider.color.onSurface)) PrimaryButton(viewModel: goToSettingsButtonViewModel) .accessibilityIdentifier(AccessibilityIdentifier.goToSettingsAccessibilityID.rawValue) .padding() .frame(height: 52) } .frame(width: scrollViewGeometry.size.width) .frame(minHeight: scrollViewGeometry.size.height) } .frame(height: scrollViewGeometry.size.height - Constants.horizontalSpacing * 2) } }.frame(width: geometry.size.width, height: geometry.size.height) .accessibilityElement(children: .contain) } } } struct GradientView: View { var body: some View { let height: CGFloat = 160 VStack { Spacer() Rectangle() .fill( LinearGradient(gradient: Gradient(stops: [ Gradient.Stop(color: .black.opacity(0), location: 0.3914), Gradient.Stop(color: Color(StyleProvider.color.gradientColor), location: 0.9965) ]), startPoint: .top, endPoint: .bottom) ) .frame(maxHeight: height) } } }