From 86fa1b84b4c4d226804c8e75978132aee7971be3 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 15 Aug 2022 14:06:24 +0100 Subject: [PATCH] Use MakeAppScreenshot in SingleChatController --- Package.swift | 1 + .../Controllers/SingleChatController.swift | 49 +++++-------------- 2 files changed, 13 insertions(+), 37 deletions(-) diff --git a/Package.swift b/Package.swift index a373ced4..539ef5e1 100644 --- a/Package.swift +++ b/Package.swift @@ -464,6 +464,7 @@ let package = Package( .target(name: "Presentation"), .target(name: "DrawerFeature"), .target(name: "ChatInputFeature"), + .target(name: "ReportingFeature"), .target(name: "DependencyInjection"), .product(name: "ChatLayout", package: "ChatLayout"), .product(name: "DifferenceKit", package: "DifferenceKit"), diff --git a/Sources/ChatFeature/Controllers/SingleChatController.swift b/Sources/ChatFeature/Controllers/SingleChatController.swift index d2f7f95a..1a066b20 100644 --- a/Sources/ChatFeature/Controllers/SingleChatController.swift +++ b/Sources/ChatFeature/Controllers/SingleChatController.swift @@ -12,6 +12,7 @@ import ChatLayout import DrawerFeature import DifferenceKit import ChatInputFeature +import ReportingFeature import DependencyInjection import ScrollViewController @@ -28,6 +29,7 @@ public final class SingleChatController: UIViewController { @Dependency private var logger: XXLogger @Dependency private var voxophone: Voxophone @Dependency private var coordinator: ChatCoordinating + @Dependency private var makeAppScreenshot: MakeAppScreenshot @Dependency private var statusBarController: StatusBarStyleControlling lazy private var infoView = UIControl() @@ -430,7 +432,7 @@ public final class SingleChatController: UIViewController { drawer.dismiss(animated: true) { [weak self] in guard let self = self else { return } self.drawerCancellables.removeAll() - self.viewModel.proceeedWithReport(screenshot: self.takeAppScreenshot()) { + self.viewModel.proceeedWithReport(screenshot: try! self.makeAppScreenshot()) { self.navigationController?.popViewController(animated: true) } } @@ -447,26 +449,6 @@ public final class SingleChatController: UIViewController { coordinator.toDrawer(drawer, from: self) } - func takeAppScreenshot() -> UIImage { - guard let foregroundWindowScene = foregroundWindowScene else { - fatalError("[takeAppScreenshot]: Unable to get foreground window scene") - } - - let keyWindow = getKeyWindow(foregroundWindowScene) - - let rendererFormat = UIGraphicsImageRendererFormat() - rendererFormat.scale = foregroundWindowScene.screen.scale - - let renderer = UIGraphicsImageRenderer( - bounds: keyWindow.bounds, - format: rendererFormat - ) - - return renderer.image { ctx in - keyWindow.layer.render(in: ctx.cgContext) - } - } - private func presentDeleteAllDrawer() { let clearButton = CapsuleButton() clearButton.setStyle(.red) @@ -596,11 +578,17 @@ extension SingleChatController: KeyboardListenerDelegate { } func keyboardWillChangeFrame(info: KeyboardInfo) { - guard let scene = foregroundWindowScene else { - fatalError("[keyboardWillChangeFrame]: Couldn't get foregroundWindowScene") + let keyWindow: UIWindow? = UIApplication.shared.connectedScenes + .filter { $0.activationState == .foregroundActive } + .compactMap { $0 as? UIWindowScene } + .first? + .windows + .first(where: \.isKeyWindow) + + guard let keyWindow = keyWindow else { + fatalError("[keyboardWillChangeFrame]: Couldn't get key window") } - let keyWindow = getKeyWindow(scene) let keyboardFrame = keyWindow.convert(info.frameEnd, to: view) guard !currentInterfaceActions.options.contains(.changingFrameSize), @@ -764,16 +752,3 @@ extension SingleChatController: QLPreviewControllerDelegate { fileURL = nil } } - -let foregroundWindowScene: UIWindowScene? = UIApplication.shared.connectedScenes - .filter { $0.activationState == .foregroundActive } - .compactMap { $0 as? UIWindowScene } - .first - -func getKeyWindow(_ scene: UIWindowScene) -> UIWindow { - guard let keyWindow = scene.windows.first(where: \.isKeyWindow) else { - fatalError("Unable to get key window") - } - - return keyWindow -} -- GitLab