WakelockMacosPlugin.swift
1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import Cocoa
import FlutterMacOS
import IOKit.pwr_mgt
public class WakelockMacosPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "wakelock_macos", binaryMessenger: registrar.messenger)
let instance = WakelockMacosPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
var assertionID: IOPMAssertionID = 0
var wakelockEnabled = false
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
switch call.method {
case "toggle":
let args = call.arguments as? Dictionary<String, Any>
let enable = args!["enable"] as! Bool
if enable {
enableWakelock()
} else {
disableWakelock();
}
result(true)
case "enabled":
result(wakelockEnabled)
default:
result(FlutterMethodNotImplemented)
}
}
func enableWakelock(reason: String = "Disabling display sleep") {
if !wakelockEnabled {
wakelockEnabled = IOPMAssertionCreateWithName( kIOPMAssertionTypeNoDisplaySleep as CFString,
IOPMAssertionLevel(kIOPMAssertionLevelOn),
reason as CFString,
&assertionID) == kIOReturnSuccess
}
}
func disableWakelock() {
if wakelockEnabled {
IOPMAssertionRelease(assertionID)
wakelockEnabled = false
}
}
}