From 5ef7c8dbb538975bbb44d846f75484dc2c50e82d Mon Sep 17 00:00:00 2001 From: Valentina Iancu Date: Wed, 17 Apr 2024 17:22:14 +0200 Subject: [PATCH 1/2] feat(GiniCaptureSDK): Add no results screen events - events added: `screen_shown`, `close_tapped`, `enter_manually_tapped`, `retake_images_tapped` PP-391 --- .../NoResultScreenViewController.swift | 49 +++++++++++++++---- .../Core/Tracking/AnalyticsEvent.swift | 4 ++ .../Core/Tracking/AnalyticsScreen.swift | 1 + 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift index 7778cc0d7..fae28180f 100644 --- a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift +++ b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift @@ -30,6 +30,19 @@ final class NoResultScreenViewController: UIViewController { return text } } + + var analyticsValue: String { + switch self { + case .pdf: + return "pdf" + case .image: + return "image" + case .qrCode: + return "qrCode" + default: + return "unknown" + } + } } lazy var tableView: UITableView = { @@ -113,6 +126,11 @@ final class NoResultScreenViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.setupView() + + let eventProperties = [AnalyticsProperty(key: .noResultType, + value: type.analyticsValue)] + AnalyticsManager.trackScreenShown(screenName: .noResults, + properties: eventProperties) } override func viewDidLayoutSubviews() { @@ -175,7 +193,7 @@ final class NoResultScreenViewController: UIViewController { private func configureCustomTopNavigationBar() { let cancelButton = GiniBarButton(ofType: .cancel) - cancelButton.addAction(viewModel, #selector(viewModel.didPressCancell)) + cancelButton.addAction(self, #selector(didPressCancel)) if giniConfiguration.bottomNavigationBarEnabled { navigationItem.rightBarButtonItem = cancelButton.barButton @@ -240,14 +258,27 @@ final class NoResultScreenViewController: UIViewController { } private func configureButtons() { - buttonsView.enterButton.addTarget( - viewModel, - action: #selector(viewModel.didPressEnterManually), - for: .touchUpInside) - buttonsView.retakeButton.addTarget( - viewModel, - action: #selector(viewModel.didPressRetake), - for: .touchUpInside) + buttonsView.enterButton.addTarget(self, + action: #selector(didPressEnterManually), + for: .touchUpInside) + buttonsView.retakeButton.addTarget(self, + action: #selector(didPressRetake), + for: .touchUpInside) + } + + @objc func didPressEnterManually() { + AnalyticsManager.track(event: .enterManuallyTapped, screenName: .noResults) + viewModel.didPressEnterManually() + } + + @objc func didPressRetake() { + AnalyticsManager.track(event: .retakeImagesTapped, screenName: .noResults) + viewModel.didPressRetake() + } + + @objc func didPressCancel() { + AnalyticsManager.track(event: .closeTapped, screenName: .noResults) + viewModel.didPressCancel() } private func configureHeaderContraints() { diff --git a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsEvent.swift b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsEvent.swift index cfa68901b..0b0f731ae 100644 --- a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsEvent.swift +++ b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsEvent.swift @@ -27,4 +27,8 @@ enum AnalyticsEvent: String { case deletePagesTapped = "delete_pages_tapped" case addPagesTapped = "add_pages_tapped" case swipePages = "swipe_pages" + + // MARK: - No Results and Error + case enterManuallyTapped = "enter_manually_tapped" + case retakeImagesTapped = "retake_images_tapped" } diff --git a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsScreen.swift b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsScreen.swift index 659da7705..487137dce 100644 --- a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsScreen.swift +++ b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Tracking/AnalyticsScreen.swift @@ -12,4 +12,5 @@ enum AnalyticsScreen: String { case camera case review case analysis + case noResults = "no_results" } From ae3e1e3db41b235c0d448af2a3e55f5d6b45b825 Mon Sep 17 00:00:00 2001 From: Valentina Iancu Date: Wed, 17 Apr 2024 17:22:42 +0200 Subject: [PATCH 2/2] refactor(GiniCaptureSDK): Cleanup code - fix typo - fix indentation PP-391 --- .../Error/ErrorScreenViewController.swift | 2 +- .../NoResult/BottomButtonsViewModel.swift | 17 +++++----- .../NoResultScreenViewController.swift | 33 ++++++++----------- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/Error/ErrorScreenViewController.swift b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/Error/ErrorScreenViewController.swift index e295aea59..2236b5d1b 100644 --- a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/Error/ErrorScreenViewController.swift +++ b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/Error/ErrorScreenViewController.swift @@ -146,7 +146,7 @@ class ErrorScreenViewController: UIViewController { private func configureCustomTopNavigationBar() { let cancelButton = GiniBarButton(ofType: .cancel) - cancelButton.addAction(viewModel, #selector(viewModel.didPressCancell)) + cancelButton.addAction(viewModel, #selector(viewModel.didPressCancel)) if giniConfiguration.bottomNavigationBarEnabled { navigationItem.rightBarButtonItem = cancelButton.barButton diff --git a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/BottomButtonsViewModel.swift b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/BottomButtonsViewModel.swift index 521adb20a..edcd98598 100644 --- a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/BottomButtonsViewModel.swift +++ b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/BottomButtonsViewModel.swift @@ -9,14 +9,13 @@ import Foundation final class BottomButtonsViewModel { - let retakePressed: (() -> Void)? - let enterManuallyPressed: (() -> Void)? - let cancelPressed: (() -> Void) - - init( - retakeBlock: (() -> Void)? = nil, - manuallyPressed: (() -> Void)? = nil, - cancelPressed: @escaping(() -> Void)) { + private let retakePressed: (() -> Void)? + private let enterManuallyPressed: (() -> Void)? + private let cancelPressed: (() -> Void) + + init(retakeBlock: (() -> Void)? = nil, + manuallyPressed: (() -> Void)? = nil, + cancelPressed: @escaping(() -> Void)) { self.retakePressed = retakeBlock self.enterManuallyPressed = manuallyPressed self.cancelPressed = cancelPressed @@ -32,7 +31,7 @@ final class BottomButtonsViewModel { enterManuallyPressed?() } - @objc func didPressCancell() { + @objc func didPressCancel() { errorOccurred = false cancelPressed() } diff --git a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift index fae28180f..446c6a674 100644 --- a/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift +++ b/CaptureSDK/GiniCaptureSDK/Sources/GiniCaptureSDK/Core/Screens/NoResult/NoResultScreenViewController.swift @@ -96,11 +96,9 @@ final class NoResultScreenViewController: UIViewController { }).count } - public init( - giniConfiguration: GiniConfiguration, - type: NoResultType, - viewModel: BottomButtonsViewModel - ) { + public init(giniConfiguration: GiniConfiguration, + type: NoResultType, + viewModel: BottomButtonsViewModel) { self.giniConfiguration = giniConfiguration self.type = type switch type { @@ -169,26 +167,21 @@ final class NoResultScreenViewController: UIViewController { } private func configureMainView() { - title = NSLocalizedStringPreferredFormat( - "ginicapture.noresult.title", - comment: "No result screen title") - header.iconImageView.accessibilityLabel = NSLocalizedStringPreferredFormat( - "ginicapture.noresult.title", - comment: "No result screen title") + title = NSLocalizedStringPreferredFormat("ginicapture.noresult.title", + comment: "No result screen title") + header.iconImageView.accessibilityLabel = NSLocalizedStringPreferredFormat("ginicapture.noresult.title", + comment: "No result screen title") header.headerLabel.text = type.description header.headerLabel.font = giniConfiguration.textStyleFonts[.subheadline] - header.headerLabel.textColor = GiniColor( - light: UIColor.GiniCapture.dark1, - dark: UIColor.GiniCapture.light1 - ).uiColor() - view.backgroundColor = GiniColor(light: UIColor.GiniCapture.light2, dark: UIColor.GiniCapture.dark2).uiColor() + header.headerLabel.textColor = GiniColor(light: UIColor.GiniCapture.dark1, + dark: UIColor.GiniCapture.light1).uiColor() + view.backgroundColor = GiniColor(light: UIColor.GiniCapture.light2, + dark: UIColor.GiniCapture.dark2).uiColor() view.addSubview(header) view.addSubview(tableView) view.addSubview(buttonsView) - header.backgroundColor = GiniColor( - light: UIColor.GiniCapture.error4, - dark: UIColor.GiniCapture.error1 - ).uiColor() + header.backgroundColor = GiniColor(light: UIColor.GiniCapture.error4, + dark: UIColor.GiniCapture.error1).uiColor() } private func configureCustomTopNavigationBar() {