Compare commits
No commits in common. "a6ba88803cef7bb97ae5ed025be4a619a0312700" and "1624e0e59d7baa33d7813f8d6bb7852182d557d8" have entirely different histories.
a6ba88803c
...
1624e0e59d
4 changed files with 16 additions and 41 deletions
|
|
@ -14,9 +14,6 @@ final class AppState: ObservableObject {
|
||||||
@Published var token: String?
|
@Published var token: String?
|
||||||
@Published var userId: String?
|
@Published var userId: String?
|
||||||
|
|
||||||
/// When true, skip auto-navigation in BusinessListView (user explicitly went back)
|
|
||||||
var skipAutoNav = false
|
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
// Restore saved session
|
// Restore saved session
|
||||||
if let saved = SecureStorage.loadSession() {
|
if let saved = SecureStorage.loadSession() {
|
||||||
|
|
@ -39,8 +36,6 @@ final class AppState: ObservableObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
func backToBusinessList() {
|
func backToBusinessList() {
|
||||||
AppPrefs.lastBusinessId = nil
|
|
||||||
skipAutoNav = true
|
|
||||||
currentScreen = .businessList
|
currentScreen = .businessList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSCameraUsageDescription</key>
|
|
||||||
<string>Payfrit Beacon needs camera access to scan QR codes on beacon labels for provisioning.</string>
|
|
||||||
<key>NSBluetoothAlwaysUsageDescription</key>
|
<key>NSBluetoothAlwaysUsageDescription</key>
|
||||||
<string>Payfrit Beacon needs Bluetooth to detect and configure nearby beacons.</string>
|
<string>Payfrit Beacon needs Bluetooth to detect and configure nearby beacons.</string>
|
||||||
<key>NSBluetoothPeripheralUsageDescription</key>
|
<key>NSBluetoothPeripheralUsageDescription</key>
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,6 @@ struct BusinessListView: View {
|
||||||
let list = try await APIClient.shared.listBusinesses(token: token)
|
let list = try await APIClient.shared.listBusinesses(token: token)
|
||||||
businesses = list
|
businesses = list
|
||||||
|
|
||||||
// Skip auto-navigation if user explicitly tapped Back
|
|
||||||
if !appState.skipAutoNav {
|
|
||||||
// Auto-navigate if only one business (like Android)
|
// Auto-navigate if only one business (like Android)
|
||||||
if list.count == 1, let only = list.first {
|
if list.count == 1, let only = list.first {
|
||||||
appState.selectBusiness(only)
|
appState.selectBusiness(only)
|
||||||
|
|
@ -108,8 +106,6 @@ struct BusinessListView: View {
|
||||||
appState.selectBusiness(last)
|
appState.selectBusiness(last)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
|
||||||
appState.skipAutoNav = false
|
|
||||||
} catch let e as APIError where e.errorDescription == APIError.unauthorized.errorDescription {
|
} catch let e as APIError where e.errorDescription == APIError.unauthorized.errorDescription {
|
||||||
appState.logout()
|
appState.logout()
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
||||||
|
|
@ -241,31 +241,17 @@ final class CameraPreviewUIView: UIView {
|
||||||
func setFlash(_ on: Bool) {
|
func setFlash(_ on: Bool) {
|
||||||
guard let device = AVCaptureDevice.default(for: .video),
|
guard let device = AVCaptureDevice.default(for: .video),
|
||||||
device.hasTorch else { return }
|
device.hasTorch else { return }
|
||||||
do {
|
try? device.lockForConfiguration()
|
||||||
try device.lockForConfiguration()
|
|
||||||
device.torchMode = on ? .on : .off
|
device.torchMode = on ? .on : .off
|
||||||
device.unlockForConfiguration()
|
device.unlockForConfiguration()
|
||||||
} catch {
|
|
||||||
NSLog("[QRScanner] Failed to set torch: \(error.localizedDescription)")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setupCamera() {
|
private func setupCamera() {
|
||||||
let session = AVCaptureSession()
|
let session = AVCaptureSession()
|
||||||
session.sessionPreset = .high
|
session.sessionPreset = .high
|
||||||
|
|
||||||
guard let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else {
|
guard let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back),
|
||||||
NSLog("[QRScanner] ERROR: No back camera available")
|
let input = try? AVCaptureDeviceInput(device: device) else { return }
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
let input: AVCaptureDeviceInput
|
|
||||||
do {
|
|
||||||
input = try AVCaptureDeviceInput(device: device)
|
|
||||||
} catch {
|
|
||||||
NSLog("[QRScanner] ERROR: Failed to create camera input: \(error.localizedDescription)")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if session.canAddInput(input) {
|
if session.canAddInput(input) {
|
||||||
session.addInput(input)
|
session.addInput(input)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue