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

// // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // import SwiftUI struct SetupControlBarView: View { @ObservedObject var viewModel: SetupControlBarViewModel @State var audioDeviceButtonSourceView = UIView() @AccessibilityFocusState var focusedOnAudioButton: Bool let layoutSpacing: CGFloat = 0 let controlWidth: CGFloat = 315 let controlHeight: CGFloat = 50 let horizontalPadding: CGFloat = 16 let verticalPadding: CGFloat = 13 var body: some View { GeometryReader { geometry in VStack(alignment: .center) { Spacer() HStack(alignment: .center, spacing: layoutSpacing) { if viewModel.isCameraButtonVisible { Spacer() cameraButton } if viewModel.isMicButtonVisible { Spacer() micButton } if viewModel.isAudioDeviceButtonVisible { Spacer() audioDeviceButton } Spacer() } .frame(width: getWidth(from: geometry), height: controlHeight) .padding(.horizontal, getHorizontalPadding(from: geometry)) .padding(.vertical, verticalPadding) .hidden(viewModel.isControlBarHidden()) .accessibilityElement(children: .contain) }.accessibilityElement(children: .contain) } } var cameraButton: some View { IconWithLabelButton(viewModel: viewModel.cameraButtonViewModel) .accessibility(identifier: AccessibilityIdentifier.toggleVideoAccessibilityID.rawValue) .hidden(!viewModel.isCameraButtonVisible) } var micButton: some View { IconWithLabelButton(viewModel: viewModel.micButtonViewModel) .accessibility(identifier: AccessibilityIdentifier.toggleMicAccessibilityID.rawValue) .hidden(!viewModel.isMicButtonVisible) } var audioDeviceButton: some View { IconWithLabelButton(viewModel: viewModel.audioDeviceButtonViewModel) .background(SourceViewSpace(sourceView: audioDeviceButtonSourceView)) .accessibility(identifier: AccessibilityIdentifier.toggleAudioDeviceAccessibilityID.rawValue) .accessibilityFocused($focusedOnAudioButton, equals: true) .hidden(!viewModel.isAudioDeviceButtonVisible) } private func getWidth(from geometry: GeometryProxy) -> CGFloat { if controlWidth > geometry.size.width { return geometry.size.width } return controlWidth } private func getHorizontalPadding(from geometry: GeometryProxy) -> CGFloat { if controlWidth > geometry.size.width { return 0 } return (geometry.size.width - controlWidth) / 2 } }