import Cocoa import FlutterMacOS class MainFlutterWindow: NSWindow { /// The channel halkyon_app's SecretScreen asks to keep the window out of /// screenshots and screen recordings while something secret shows (the /// recovery phrase, recovery codes, an authenticator's key), and how many /// show: counted, as several may at once. private var screenGuard: FlutterMethodChannel? private var secretsShown = 0 override func awakeFromNib() { let flutterViewController = FlutterViewController() let windowFrame = self.frame self.contentViewController = flutterViewController self.setFrame(windowFrame, display: true) RegisterGeneratedPlugins(registry: flutterViewController) guardScreen(messenger: flutterViewController.engine.binaryMessenger) super.awakeFromNib() } private func guardScreen(messenger: FlutterBinaryMessenger) { let channel = FlutterMethodChannel( name: "app.halkyon/screen_guard", binaryMessenger: messenger) channel.setMethodCallHandler { [weak self] call, result in guard let self = self else { result(nil) return } switch call.method { case "hold": self.secretsShown += 1 self.sharingType = .none result(nil) case "release": self.secretsShown = max(0, self.secretsShown - 1) if self.secretsShown == 0 { self.sharingType = .readOnly } result(nil) default: result(FlutterMethodNotImplemented) } } screenGuard = channel } }