halkyon/apps/todo/halkyon_todo_flutter/macos/Runner/MainFlutterWindow.swift

49 lines
1.5 KiB
Swift
Raw Permalink Normal View History

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
}
}