Skip to content

Commit 1cf38c8

Browse files
authored
chore: kickoff release
2 parents bdd3dc8 + bb5cc4a commit 1cf38c8

File tree

3 files changed

+42
-15
lines changed

3 files changed

+42
-15
lines changed

HostApp/HostApp/Views/StartSessionView.swift

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ struct StartSessionView: View {
1313
@ObservedObject var viewModel = StartSessionViewModel()
1414
@Binding var sessionID: String
1515
@Binding var isPresentingContainerView: Bool
16+
@State private var showAlert = false
1617

1718
var body: some View {
1819
VStack {
@@ -31,18 +32,34 @@ struct StartSessionView: View {
3132
dark: .hex("#7dd6e8")
3233
),
3334
action: {
34-
viewModel.createSession {
35-
sessionID = $0
36-
isPresentingContainerView = true
35+
viewModel.createSession { sessionId, err in
36+
if let sessionId = sessionId {
37+
sessionID = sessionId
38+
isPresentingContainerView = true
39+
}
40+
41+
showAlert = err != nil
3742
}
3843
},
3944
enabled: viewModel.isSignedIn
4045
)
46+
.alert(isPresented: $showAlert) {
47+
Alert(
48+
title: Text("Error Creating Liveness Session"),
49+
message: Text("Unable to create a liveness session id. Please try again."),
50+
dismissButton: .default(
51+
Text("OK"),
52+
action: {
53+
isPresentingContainerView = false
54+
}
55+
)
56+
)
57+
}
4158

4259
Spacer()
4360
HStack {
4461
Spacer()
45-
Text("v0.1.16")
62+
Text("v0.1.19")
4663
.font(.callout)
4764
.padding()
4865
}

HostApp/HostApp/Views/StartSessionViewModel.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ class StartSessionViewModel: ObservableObject {
2525
? .signedIn(action: signOut)
2626
: .signedOut(action: signIn)
2727
} catch {
28+
presentationState = .signedOut(action: signIn)
2829
print("Error fetching auth session", error)
2930
}
3031

3132
}
3233
}
3334

34-
func createSession(_ completion: @escaping (String) -> Void) {
35+
func createSession(_ completion: @escaping (String?, Error?) -> Void) {
3536
Task { @MainActor in
37+
let currentPresentationState = presentationState
3638
presentationState = .loading
3739
let request = RESTRequest(
3840
apiName: "liveness",
@@ -45,9 +47,12 @@ class StartSessionViewModel: ObservableObject {
4547
CreateSessionResponse.self,
4648
from: data
4749
)
48-
completion(response.sessionId)
50+
presentationState = currentPresentationState
51+
completion(response.sessionId, nil)
4952
} catch {
53+
presentationState = currentPresentationState
5054
print("Error creating session", error)
55+
completion(nil, error)
5156
}
5257
}
5358
}

Sources/FaceLiveness/Views/Liveness/LivenessViewController.swift

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import Amplify
1313

1414
final class _LivenessViewController: UIViewController {
1515
let viewModel: FaceLivenessDetectionViewModel
16-
var previewLayer: CALayer!
16+
var previewLayer: CALayer?
1717

1818
let faceShapeLayer = CAShapeLayer()
1919
var ovalExists = false
@@ -39,8 +39,9 @@ final class _LivenessViewController: UIViewController {
3939
}
4040

4141
deinit {
42-
self.previewLayer.removeFromSuperlayer()
43-
(self.previewLayer as? AVCaptureVideoPreviewLayer)?.session = nil
42+
guard let previewLayer = self.previewLayer else { return }
43+
previewLayer.removeFromSuperlayer()
44+
(previewLayer as? AVCaptureVideoPreviewLayer)?.session = nil
4445
self.previewLayer = nil
4546
}
4647

@@ -84,7 +85,9 @@ final class _LivenessViewController: UIViewController {
8485

8586
avLayer.position = view.center
8687
self.previewLayer = avLayer
87-
viewModel.cameraViewRect = previewLayer.frame
88+
if let previewLayer = self.previewLayer {
89+
viewModel.cameraViewRect = previewLayer.frame
90+
}
8891

8992
DispatchQueue.main.async {
9093
self.view.layer.insertSublayer(avLayer, at: 0)
@@ -112,11 +115,12 @@ final class _LivenessViewController: UIViewController {
112115
extension _LivenessViewController: FaceLivenessViewControllerPresenter {
113116
func displaySingleFrame(uiImage: UIImage) {
114117
DispatchQueue.main.async {
118+
guard let previewLayer = self.previewLayer else { return }
115119
let imageView = UIImageView(image: uiImage)
116-
imageView.frame = self.previewLayer.frame
120+
imageView.frame = previewLayer.frame
117121
self.view.addSubview(imageView)
118-
self.previewLayer.removeFromSuperlayer()
119-
(self.previewLayer as? AVCaptureVideoPreviewLayer)?.session = nil
122+
(previewLayer as? AVCaptureVideoPreviewLayer)?.session = nil
123+
previewLayer.removeFromSuperlayer()
120124
self.viewModel.stopRecording()
121125
}
122126
}
@@ -147,14 +151,15 @@ extension _LivenessViewController: FaceLivenessViewControllerPresenter {
147151

148152
func drawOvalInCanvas(_ ovalRect: CGRect) {
149153
DispatchQueue.main.async {
154+
guard let previewLayer = self.previewLayer else { return }
150155
self.faceGuideRect = ovalRect
151156

152157
let ovalView = OvalView(
153-
frame: self.previewLayer.frame,
158+
frame: previewLayer.frame,
154159
ovalFrame: ovalRect
155160
)
156161
self.ovalView = ovalView
157-
ovalView.center = self.previewLayer.position
162+
ovalView.center = previewLayer.position
158163
self.view.insertSubview(
159164
ovalView,
160165
belowSubview: self.freshnessView

0 commit comments

Comments
 (0)