@@ -9,22 +9,27 @@ import SwiftUI
99import FaceLiveness
1010
1111struct ExampleLivenessView : View {
12- @Binding var isPresented : Bool
12+ @Binding var containerViewState : ContainerViewState
1313 @ObservedObject var viewModel : ExampleLivenessViewModel
1414
15- init ( sessionID: String , isPresented: Binding < Bool > ) {
16- self . viewModel = . init( sessionID: sessionID)
17- self . _isPresented = isPresented
15+ init ( sessionID: String , containerViewState: Binding < ContainerViewState > ) {
16+ self . _containerViewState = containerViewState
17+ if case let . liveness( selectedCamera) = _containerViewState. wrappedValue {
18+ self . viewModel = . init( sessionID: sessionID, presentationState: . liveness( selectedCamera) )
19+ } else {
20+ self . viewModel = . init( sessionID: sessionID)
21+ }
1822 }
1923
2024 var body : some View {
2125 switch viewModel. presentationState {
22- case . liveness:
26+ case . liveness( let camera ) :
2327 FaceLivenessDetectorView (
2428 sessionID: viewModel. sessionID,
2529 region: " us-east-1 " ,
30+ challengeOptions: . init( faceMovementChallengeOption: FaceMovementChallengeOption ( camera: camera) ) ,
2631 isPresented: Binding (
27- get: { viewModel. presentationState == . liveness } ,
32+ get: { viewModel. presentationState == . liveness( camera ) } ,
2833 set: { _ in }
2934 ) ,
3035 onCompletion: { result in
@@ -33,11 +38,11 @@ struct ExampleLivenessView: View {
3338 case . success:
3439 withAnimation { viewModel. presentationState = . result }
3540 case . failure( . sessionNotFound) , . failure( . cameraPermissionDenied) , . failure( . accessDenied) :
36- viewModel. presentationState = . liveness
37- isPresented = false
41+ viewModel. presentationState = . liveness( camera )
42+ containerViewState = . startSession
3843 case . failure( . userCancelled) :
39- viewModel. presentationState = . liveness
40- isPresented = false
44+ viewModel. presentationState = . liveness( camera )
45+ containerViewState = . startSession
4146 case . failure( . sessionTimedOut) :
4247 viewModel. presentationState = . error( . sessionTimedOut)
4348 case . failure( . socketClosed) :
@@ -46,6 +51,10 @@ struct ExampleLivenessView: View {
4651 viewModel. presentationState = . error( . countdownFaceTooClose)
4752 case . failure( . invalidSignature) :
4853 viewModel. presentationState = . error( . invalidSignature)
54+ case . failure( . faceInOvalMatchExceededTimeLimitError) :
55+ viewModel. presentationState = . error( . faceInOvalMatchExceededTimeLimitError)
56+ case . failure( . internalServer) :
57+ viewModel. presentationState = . error( . internalServer)
4958 case . failure( . cameraNotAvailable) :
5059 viewModel. presentationState = . error( . cameraNotAvailable)
5160 case . failure( . validation) :
@@ -58,11 +67,11 @@ struct ExampleLivenessView: View {
5867 }
5968 }
6069 )
61- . id ( isPresented )
70+ . id ( containerViewState )
6271 case . result:
6372 LivenessResultView (
6473 sessionID: viewModel. sessionID,
65- onTryAgain: { isPresented = false } ,
74+ onTryAgain: { containerViewState = . startSession } ,
6675 content: {
6776 LivenessResultContentView ( fetchResults: viewModel. fetchLivenessResult)
6877 }
@@ -71,7 +80,7 @@ struct ExampleLivenessView: View {
7180 case . error( let detectionError) :
7281 LivenessResultView (
7382 sessionID: viewModel. sessionID,
74- onTryAgain: { isPresented = false } ,
83+ onTryAgain: { containerViewState = . startSession } ,
7584 content: {
7685 switch detectionError {
7786 case . socketClosed:
0 commit comments