// /* * Copyright (c) 2022 BWI GmbH * * 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 import UIKit class PermalinkQRCodeScannerController: NSObject { @objc static func createFromSwiftUIView() -> UIViewController { return UIHostingController(rootView: PermalinkQRCodeScanner()) } } struct PermalinkQRCodeScanner: View { @Environment(\.presentationMode) var presentationMode @State var qrCode: String = "" @State var scanCompleted = false @State var showInvalidCodeAlert = false var body: some View { NavigationView { ScannerView(qrCode: $qrCode, scanCompleted: $scanCompleted) .navigationTitle(BWIL10n.roomRecentsScanQrCode) .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .navigationBarLeading) { Button { presentationMode.wrappedValue.dismiss() } label: { Text(VectorL10n.close) .foregroundColor(Color(ThemeService.shared().theme.tintColor)) } } } .alert(isPresented: $showInvalidCodeAlert) { Alert( title: Text(BWIL10n.roomRecentsScanFailedTitle), message: Text(BWIL10n.roomRecentsScanFailedMessage), dismissButton: .default(Text(VectorL10n.ok)) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { presentationMode.wrappedValue.dismiss() } } ) } } .onChange(of: scanCompleted) { newValue in if newValue { checkQRCode() } } } private func checkQRCode() { let permalinkURL = AppConfigService.shared.permalinkUrl() ?? BWIBuildSettings.shared.clientPermalinkBaseUrl if !permalinkURL.isEmpty && qrCode.hasPrefix(permalinkURL) { presentationMode.wrappedValue.dismiss() DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { if let url = NSURLComponents(string: qrCode)?.url { AppDelegate.theDelegate().handleUniversalLinkURL(url) } } } else { showInvalidCodeAlert = true } } }