Skip to content

Commit 99146c2

Browse files
authored
[macOS] platform_channel sample style cleanups (flutter#123569)
[macOS] platform_channel sample style cleanups
1 parent b0ad7c4 commit 99146c2

File tree

2 files changed

+45
-36
lines changed

2 files changed

+45
-36
lines changed

examples/platform_channel/macos/Runner/MainFlutterWindow.swift

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,35 @@
55
import Cocoa
66
import FlutterMacOS
77

8-
class MainFlutterWindow: NSWindow, FlutterStreamHandler, PowerSourceStateChangeDelegate {
8+
class MainFlutterWindow: NSWindow {
99
private let powerSource = PowerSource()
10-
private let stateChangeSource = PowerSourceStateChangeHandler()
10+
private let stateChangeHandler = PowerSourceStateChangeHandler()
1111
private var eventSink: FlutterEventSink?
1212

1313
override func awakeFromNib() {
1414
let flutterViewController = FlutterViewController()
1515
let windowFrame = self.frame
1616
self.contentViewController = flutterViewController
17+
self.displayIfNeeded()
1718
self.setFrame(windowFrame, display: true)
1819

1920
// Register battery method channel.
2021
let registrar = flutterViewController.registrar(forPlugin: "BatteryLevel")
2122
let batteryChannel = FlutterMethodChannel(
2223
name: "samples.flutter.io/battery",
2324
binaryMessenger: registrar.messenger)
24-
batteryChannel.setMethodCallHandler({ [weak self] (call, result) in
25+
batteryChannel.setMethodCallHandler { [powerSource = self.powerSource] (call, result) in
2526
switch call.method {
2627
case "getBatteryLevel":
27-
if self?.powerSource.hasBattery() == false {
28-
result(FlutterError(
29-
code: "NO_BATTERY",
30-
message: "Device does not have a battery",
31-
details: nil))
28+
guard powerSource.hasBattery() else {
29+
result(
30+
FlutterError(
31+
code: "NO_BATTERY",
32+
message: "Device does not have a battery",
33+
details: nil))
3234
return
3335
}
34-
let level = self?.powerSource.getCurrentCapacity()
35-
if level == -1 {
36+
guard let level = powerSource.getCurrentCapacity() else {
3637
result(
3738
FlutterError(
3839
code: "UNAVAILABLE",
@@ -44,7 +45,7 @@ class MainFlutterWindow: NSWindow, FlutterStreamHandler, PowerSourceStateChangeD
4445
default:
4546
result(FlutterMethodNotImplemented)
4647
}
47-
})
48+
}
4849

4950
// Register charging event channel.
5051
let chargingChannel = FlutterEventChannel(
@@ -57,36 +58,40 @@ class MainFlutterWindow: NSWindow, FlutterStreamHandler, PowerSourceStateChangeD
5758
super.awakeFromNib()
5859
}
5960

61+
/// Emit a power status event to the registered event sink.
62+
func emitPowerStatusEvent() {
63+
if let sink = self.eventSink {
64+
switch self.powerSource.getPowerState() {
65+
case .ac:
66+
sink("charging")
67+
case .battery:
68+
sink("discharging")
69+
case .unknown:
70+
sink("UNAVAILABLE")
71+
}
72+
}
73+
}
74+
}
75+
76+
extension MainFlutterWindow: FlutterStreamHandler {
6077
func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink)
6178
-> FlutterError?
6279
{
6380
self.eventSink = events
6481
self.emitPowerStatusEvent()
65-
self.stateChangeSource.delegate = self
82+
self.stateChangeHandler.delegate = self
6683
return nil
6784
}
6885

6986
func onCancel(withArguments arguments: Any?) -> FlutterError? {
70-
self.stateChangeSource.delegate = nil
87+
self.stateChangeHandler.delegate = nil
7188
self.eventSink = nil
7289
return nil
7390
}
91+
}
7492

75-
func onPowerSourceStateChanged() {
93+
extension MainFlutterWindow: PowerSourceStateChangeDelegate {
94+
func didChangePowerSourceState() {
7695
self.emitPowerStatusEvent()
7796
}
78-
79-
func emitPowerStatusEvent() {
80-
if let sink = self.eventSink {
81-
switch self.powerSource.getPowerState() {
82-
case .ac:
83-
sink("charging")
84-
case .battery:
85-
sink("discharging")
86-
case .unknown:
87-
sink("UNAVAILABLE")
88-
}
89-
}
90-
}
91-
9297
}

examples/platform_channel/macos/Runner/PowerSource.swift

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,29 @@ enum PowerState {
1212
}
1313

1414
/// A convenience wrapper for an IOKit power source.
15-
class PowerSource {
15+
final class PowerSource {
1616
let info = IOPSCopyPowerSourcesInfo().takeRetainedValue()
17-
lazy var sources = IOPSCopyPowerSourcesList(info).takeRetainedValue() as Array
17+
let sources: Array<CFTypeRef>
18+
19+
init() {
20+
sources = IOPSCopyPowerSourcesList(info).takeRetainedValue() as Array
21+
}
1822

1923
func hasBattery() -> Bool {
2024
return !sources.isEmpty
2125
}
2226

2327
/// Returns the current power source capacity. Apple-defined power sources will return this value
2428
/// as a percentage.
25-
func getCurrentCapacity() -> Int {
29+
func getCurrentCapacity() -> Int? {
2630
if let source = sources.first {
2731
let description =
2832
IOPSGetPowerSourceDescription(info, source).takeUnretainedValue() as! [String: AnyObject]
2933
if let level = description[kIOPSCurrentCapacityKey] as? Int {
3034
return level
3135
}
3236
}
33-
return -1
37+
return nil
3438
}
3539

3640
/// Returns whether the device is drawing battery power or connected to an external power source.
@@ -54,22 +58,22 @@ class PowerSource {
5458
}
5559

5660
protocol PowerSourceStateChangeDelegate: AnyObject {
57-
func onPowerSourceStateChanged()
61+
func didChangePowerSourceState()
5862
}
5963

6064
/// A listener for system power source state change events. Notifies the delegate on each event.
61-
class PowerSourceStateChangeHandler {
65+
final class PowerSourceStateChangeHandler {
6266
private var runLoopSource: CFRunLoopSource?
6367
weak var delegate: PowerSourceStateChangeDelegate?
6468

6569
init() {
6670
let context = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())
6771
self.runLoopSource = IOPSNotificationCreateRunLoopSource(
6872
{ (context: UnsafeMutableRawPointer?) in
69-
let weakSelf = Unmanaged<PowerSourceStateChangeHandler>.fromOpaque(
73+
let unownedSelf = Unmanaged<PowerSourceStateChangeHandler>.fromOpaque(
7074
UnsafeRawPointer(context!)
7175
).takeUnretainedValue()
72-
weakSelf.delegate?.onPowerSourceStateChanged()
76+
unownedSelf.delegate?.didChangePowerSourceState()
7377
}, context
7478
).takeRetainedValue()
7579
CFRunLoopAddSource(CFRunLoopGetCurrent(), self.runLoopSource, .defaultMode)

0 commit comments

Comments
 (0)