From ea75f06c3a7a3d379deac20c97732306b66c43e7 Mon Sep 17 00:00:00 2001 From: Tuan Pham Date: Tue, 28 Nov 2023 14:10:50 -0600 Subject: [PATCH] chore: update UX --- .../GetReadyPage/CameraPreviewView.swift | 13 ++------ .../Views/GetReadyPage/GetReadyPageView.swift | 31 ++++++++++++------- .../Liveness/FaceLivenessDetectionView.swift | 1 + .../FaceLivenessDetectionViewModel.swift | 1 + 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/Sources/FaceLiveness/Views/GetReadyPage/CameraPreviewView.swift b/Sources/FaceLiveness/Views/GetReadyPage/CameraPreviewView.swift index fc42ed6e..5108d9fd 100644 --- a/Sources/FaceLiveness/Views/GetReadyPage/CameraPreviewView.swift +++ b/Sources/FaceLiveness/Views/GetReadyPage/CameraPreviewView.swift @@ -8,10 +8,10 @@ import SwiftUI struct CameraPreviewView: View { - private static let previewWidthRatio = 0.6 - private static let previewHeightRatio = 0.75 + private static let previewWidthRatio = 0.65 + private static let previewHeightRatio = 0.6 private static let previewXPositionRatio = 0.5 - private static let previewYPositionRatio = 0.55 + private static let previewYPositionRatio = 0.5 @StateObject var model: CameraPreviewViewModel @@ -39,13 +39,6 @@ struct CameraPreviewView: View { .position(x: geometry.size.width*Self.previewXPositionRatio, y: geometry.size.height*Self.previewYPositionRatio) } - VStack { - Text(LocalizedStrings.preview_center_your_face_text) - .font(.largeTitle) - .multilineTextAlignment(.center) - .padding() - Spacer() - } } } } diff --git a/Sources/FaceLiveness/Views/GetReadyPage/GetReadyPageView.swift b/Sources/FaceLiveness/Views/GetReadyPage/GetReadyPageView.swift index cd43b986..bada9365 100644 --- a/Sources/FaceLiveness/Views/GetReadyPage/GetReadyPageView.swift +++ b/Sources/FaceLiveness/Views/GetReadyPage/GetReadyPageView.swift @@ -10,36 +10,43 @@ import SwiftUI struct GetReadyPageView: View { let beginCheckButtonDisabled: Bool let onBegin: () -> Void + let onCancel: () -> Void init( onBegin: @escaping () -> Void, + onCancel: @escaping () -> Void, beginCheckButtonDisabled: Bool = false ) { self.onBegin = onBegin + self.onCancel = onCancel self.beginCheckButtonDisabled = beginCheckButtonDisabled } var body: some View { VStack { - VStack(alignment: .leading) { - Text(LocalizedStrings.get_ready_page_title) - .font(.system(size: 34, weight: .semibold)) - .accessibilityAddTraits(.isHeader) - .padding(.bottom, 8) + ZStack { + CameraPreviewView() + VStack { + HStack(alignment: .top) { + Spacer() + CloseButton( + action: onCancel + ) + } + Text(LocalizedStrings.preview_center_your_face_text) + .font(.title) + .multilineTextAlignment(.center) + + Spacer() WarningBox( titleText: LocalizedStrings.get_ready_photosensitivity_title, bodyText: LocalizedStrings.get_ready_photosensitivity_description, popoverContent: { photosensitivityWarningPopoverContent } ) .accessibilityElement(children: .combine) - .padding(.bottom, 8) - - CameraPreviewView() - .border(Color.livenessPreviewBorder) } - .padding() - + } beginCheckButton } } @@ -76,6 +83,6 @@ struct GetReadyPageView: View { struct GetReadyPageView_Previews: PreviewProvider { static var previews: some View { - GetReadyPageView(onBegin: {}) + GetReadyPageView(onBegin: {}, onCancel: {}) } } diff --git a/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionView.swift b/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionView.swift index 64098e5f..31b023e4 100644 --- a/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionView.swift +++ b/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionView.swift @@ -151,6 +151,7 @@ public struct FaceLivenessDetectorView: View { guard displayState != .displayingLiveness else { return } displayState = .displayingLiveness }, + onCancel: { onCompletion(.failure(.userCancelled)) }, beginCheckButtonDisabled: false ) .onAppear { diff --git a/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionViewModel.swift b/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionViewModel.swift index 5c8dc163..709ac49e 100644 --- a/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionViewModel.swift +++ b/Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionViewModel.swift @@ -115,6 +115,7 @@ class FaceLivenessDetectionViewModel: ObservableObject { } @objc func willResignActive(_ notification: Notification) { + guard self.livenessState.state != .initial else { return } DispatchQueue.main.async { self.stopRecording() self.livenessState.unrecoverableStateEncountered(.viewResignation)