@@ -22,58 +22,83 @@ extension AndroidCentral {
2222
2323 weak var central : AndroidCentral ?
2424
25- /*
26- public override func onScanResult(
27- callbackType: Android.Bluetooth.LE.ScanCallbackType,
28- result: Android.Bluetooth.LE.ScanResult
29- ) {
30-
31- central?.log?("\(type(of: self)) \(#function) name: \(result.device.getName() ?? "") address: \(result.device.address)")
32-
33- let scanData = ScanData(result)
34-
25+ init ( central: AndroidCentral , environment: JNIEnvironment ? ) {
26+ self . central = central
27+ }
28+ }
29+ }
30+
31+ @JavaImplementation ( " org.pureswift.bluetooth.le.ScanCallback " )
32+ extension AndroidCentral . LowEnergyScanCallback {
33+
34+ @JavaMethod
35+ func onScanResultSwift( _ error: Int32 , _ result: AndroidBluetooth . ScanResult ? ) {
36+ guard let central else {
37+ return
38+ }
39+ central. log ? ( " \( type ( of: self ) ) : \( #function) name: \( result. getDevice ( ) . getName ( ) ?? " " ) address: \( result. getDevice ( ) . getAddress ( ) ) " )
40+ guard let result, let scanData = try ? ScanData ( result) else {
41+ assertionFailure ( )
42+ return
43+ }
44+ Task {
45+ await central. storage. update { state in
46+ state. scan. continuation? . yield ( scanData)
47+ state. scan. peripherals [ scanData. peripheral] = InternalState . Scan. Device (
48+ scanData: scanData,
49+ scanResult: result
50+ )
51+ }
52+ }
53+ }
54+
55+ @JavaMethod
56+ func onBatchScanResultsSwift( results: [ AndroidBluetooth . ScanResult ? ] ) {
57+ guard let central else {
58+ return
59+ }
60+ central. log ? ( " \( type ( of: self ) ) : \( #function) " )
61+ for result in results {
62+ guard let result, let scanData = try ? ScanData ( result) else {
63+ assertionFailure ( )
64+ return
65+ }
3566 Task {
36- await central? .storage.update { state in
67+ await central. storage. update { state in
3768 state. scan. continuation? . yield ( scanData)
38- state.scan.peripherals[scanData.peripheral] = InternalState.Scan.Device(
69+ state. scan. peripherals [ scanData. peripheral] = AndroidCentral . InternalState. Scan. Device (
3970 scanData: scanData,
4071 scanResult: result
4172 )
4273 }
4374 }
4475 }
76+ }
77+
78+ @JavaMethod
79+ func onScanFailedSwift( error: Int32 ) {
4580
46- public override func onBatchScanResults(results: [Android.Bluetooth.LE.ScanResult]) {
47-
48- central?.log?("\(type(of: self)): \(#function)")
49-
50- for result in results {
51-
52- let scanData = ScanData(result)
53-
54- Task {
55- await central?.storage.update { state in
56- state.scan.continuation?.yield(scanData)
57- state.scan.peripherals[scanData.peripheral] = InternalState.Scan.Device(
58- scanData: scanData,
59- scanResult: result
60- )
61- }
62- }
63- }
64- }
81+ central? . log ? ( " \( type ( of: self ) ) : \( #function) " )
6582
66- public override func onScanFailed(error: AndroidBluetoothLowEnergyScanCallback.Error) {
67-
68- central?.log?("\(type(of: self)): \(#function)")
69-
70- Task {
71- await central?.storage.update { state in
72- state.scan.continuation?.finish(throwing: error)
73- }
83+ // TODO: Map error codes
84+ let error = AndroidCentralError . scanFailed ( error)
85+
86+ /*
87+ static var SCAN_FAILED_ALREADY_STARTED
88+ static var SCAN_FAILED_APPLICATION_REGISTRATION_FAILED
89+ static var SCAN_FAILED_FEATURE_UNSUPPORTED
90+ static var SCAN_FAILED_INTERNAL_ERROR
91+ */
92+
93+ Task {
94+ await central? . storage. update { state in
95+ state. scan. continuation? . finish ( throwing: error)
7496 }
75- }*/
97+ }
7698 }
99+ }
100+
101+ extension AndroidCentral {
77102
78103 @JavaClass ( " org.pureswift.bluetooth.BluetoothGattCallback " )
79104 internal class GattCallback : AndroidBluetooth . BluetoothGattCallback {
0 commit comments