// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved. import SwiftUI import SessionUIKit import SignalUtilitiesKit import SessionUtilitiesKit import AVFoundation struct QRCodeScreen: View { @EnvironmentObject var host: HostWrapper @State var tabIndex = 0 @State private var accountId: String = "" @State private var errorString: String? = nil var body: some View { ZStack(alignment: .topLeading) { VStack( spacing: 0 ){ CustomTopTabBar( tabIndex: $tabIndex, tabTitles: [ "view".localized(), "scan".localized() ] ).frame(maxWidth: .infinity) if tabIndex == 0 { MyQRCodeScreen() } else { ScanQRCodeScreen( $accountId, error: $errorString, continueAction: continueWithAccountId ) } } } .backgroundColor(themeColor: .backgroundPrimary) } fileprivate func startNewPrivateChatIfPossible(with hexEncodedPublicKey: String, onError: (() -> ())?) { if !KeyPair.isValidHexEncodedPublicKey(candidate: hexEncodedPublicKey) { errorString = "qrNotAccountId".localized() } else { SessionApp.presentConversationCreatingIfNeeded( for: hexEncodedPublicKey, variant: .contact, action: .compose, dismissing: self.host.controller, animated: false ) } } func continueWithAccountId(onSuccess: (() -> ())?, onError: (() -> ())?) { let hexEncodedPublicKey = accountId startNewPrivateChatIfPossible(with: hexEncodedPublicKey, onError: onError) } } struct MyQRCodeScreen: View { var body: some View{ VStack( spacing: Values.mediumSpacing ) { QRCodeView( string: getUserHexEncodedPublicKey(), hasBackground: false, logo: "SessionWhite40", themeStyle: ThemeManager.currentTheme.interfaceStyle ) .accessibility( Accessibility( identifier: "QR code", label: "QR code" ) ) .aspectRatio(1, contentMode: .fit) Text("accountIdYoursDescription".localized()) .font(.system(size: Values.verySmallFontSize)) .foregroundColor(themeColor: .textSecondary) .multilineTextAlignment(.center) Spacer() } .padding(.horizontal, Values.mediumSpacing) .padding(.all, Values.veryLargeSpacing) } } #Preview { QRCodeScreen() }