From d3ed70e0a205ecd52f21c2dfe033d4ce2c15a666 Mon Sep 17 00:00:00 2001 From: Rasmus Tauts Date: Thu, 12 Sep 2024 10:41:06 +0300 Subject: [PATCH] Show snackbar when engagement request is timed out Snackbar needs to be showed after request has timed out. Also, if outcome is anythign but nil or timed_out, we need to ignore it --- .../Public/Glia/Glia+RestoreEngagement.swift | 1 + .../CallVisualizer/CallVisualizer.swift | 6 ++-- .../CallVisualizer.Coordinator.swift | 35 +++++++++++++++---- .../SnackBarView/SnackBar.Interface.swift | 3 +- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/GliaWidgets/Public/Glia/Glia+RestoreEngagement.swift b/GliaWidgets/Public/Glia/Glia+RestoreEngagement.swift index ce7914417..1b7738368 100644 --- a/GliaWidgets/Public/Glia/Glia+RestoreEngagement.swift +++ b/GliaWidgets/Public/Glia/Glia+RestoreEngagement.swift @@ -49,6 +49,7 @@ extension Glia { func showSnackBarMessage() { environment.snackBar.showSnackBarMessage( + text: viewFactory.theme.snackBar.text, style: viewFactory.theme.snackBar, topMostViewController: GliaPresenter( environment: .create( diff --git a/GliaWidgets/Sources/CallVisualizer/CallVisualizer.swift b/GliaWidgets/Sources/CallVisualizer/CallVisualizer.swift index c7bf55ec9..2c566ee92 100644 --- a/GliaWidgets/Sources/CallVisualizer/CallVisualizer.swift +++ b/GliaWidgets/Sources/CallVisualizer/CallVisualizer.swift @@ -93,8 +93,8 @@ extension CallVisualizer { coordinator.handleAcceptedUpgrade() } - func handleEngagementRequestAccepted(request: CoreSdkClient.Request, answer: Command) { - coordinator.handleEngagementRequestAccepted(request: request, answer: answer) + func handleEngagementRequest(request: CoreSdkClient.Request, answer: Command) { + coordinator.handleEngagementRequest(request: request, answer: answer) } func addVideoStream(stream: CoreSdkClient.VideoStreamable) { @@ -131,7 +131,7 @@ extension CallVisualizer { else { switch event { case let .onEngagementRequest(request, answer): - self?.handleEngagementRequestAccepted(request: request, answer: answer) + self?.handleEngagementRequest(request: request, answer: answer) default: return } return diff --git a/GliaWidgets/Sources/CallVisualizer/Coordinator/CallVisualizer.Coordinator.swift b/GliaWidgets/Sources/CallVisualizer/Coordinator/CallVisualizer.Coordinator.swift index b017cb27c..04203f043 100644 --- a/GliaWidgets/Sources/CallVisualizer/Coordinator/CallVisualizer.Coordinator.swift +++ b/GliaWidgets/Sources/CallVisualizer/Coordinator/CallVisualizer.Coordinator.swift @@ -55,17 +55,35 @@ extension CallVisualizer { showVideoCallViewController() } - func handleEngagementRequestAccepted(request: CoreSdkClient.Request, answer: Command) { - if let outcome = request.outcome, outcome == "timed_out" { - self.environment.alertManager.dismissCurrentAlert() - answer(false) + func handleEngagementRequest( + request: CoreSdkClient.Request, + answer: Command + ) { + guard let outcome = request.outcome else { + handleEngagementRequestOutcomeNil(answer: answer) return } + if outcome == "timed_out" { + handleEngagementRequestOutcomeTimeout(answer: answer) + } + } + + func handleEngagementRequestOutcomeTimeout(answer: Command) { + environment.alertManager.dismissCurrentAlert() + environment.gcd.mainQueue.asyncAfterDeadline(.now() + 0.5) { + // Will be swapped for localized string + self.showSnackBarMessage(text: "Request has timed out") + } + answer(false) + } + + func handleEngagementRequestOutcomeNil(answer: Command) { fetchSiteConfigurations { [weak self] site in let showSnackBarIfNeeded: () -> Void = { guard site.mobileObservationEnabled == true else { return } guard site.mobileObservationIndicationEnabled == true else { return } - self?.showSnackBarMessage() + guard let self else { return } + self.showSnackBarMessage(text: self.environment.viewFactory.theme.snackBar.text) } let completion: Command = .init { isAccepted in if isAccepted { @@ -84,6 +102,7 @@ extension CallVisualizer { } } + func end() { removeBubbleView() closeFlow() @@ -100,7 +119,8 @@ extension CallVisualizer { fetchSiteConfigurations { [weak self] site in guard site.mobileObservationEnabled == true else { return } guard site.mobileObservationIndicationEnabled == true else { return } - self?.showSnackBarMessage() + guard let self else { return } + self.showSnackBarMessage(text: self.environment.viewFactory.theme.snackBar.text) } } @@ -428,8 +448,9 @@ private extension CallVisualizer.Coordinator { // MARK: - Live Observation private extension CallVisualizer.Coordinator { - func showSnackBarMessage() { + func showSnackBarMessage(text: String) { environment.snackBar.showSnackBarMessage( + text: text, style: environment.viewFactory.theme.snackBar, topMostViewController: topMostViewController, timerProviding: environment.timerProviding, diff --git a/GliaWidgets/SwiftUI/Components/SnackBarView/SnackBar.Interface.swift b/GliaWidgets/SwiftUI/Components/SnackBarView/SnackBar.Interface.swift index 93d6e7254..7ba38941a 100644 --- a/GliaWidgets/SwiftUI/Components/SnackBarView/SnackBar.Interface.swift +++ b/GliaWidgets/SwiftUI/Components/SnackBarView/SnackBar.Interface.swift @@ -32,6 +32,7 @@ struct SnackBar { } func showSnackBarMessage( + text: String, style: Theme.SnackBarStyle, topMostViewController: UIViewController, timerProviding: FoundationBased.Timer.Providing, @@ -39,7 +40,7 @@ struct SnackBar { notificationCenter: FoundationBased.NotificationCenter ) { self.present( - text: style.text, + text: text, style: style, for: topMostViewController, bottomOffset: -60,