1import 'dart:async';
 2import 'dart:io';
 3
 4import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_device.dart';
 5import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_discovery.dart';
 6import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_service.dart';
 7import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_low_energy/ble_state.dart';
 8import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_manager.dart';
 9import 'package:blood_pressure_app/features/bluetooth/backend/bluetooth_state.dart';
10import 'package:bluetooth_low_energy/bluetooth_low_energy.dart';
11
12/// Bluetooth manager for the 'bluetooth_low_energy' package
13final class BluetoothLowEnergyManager extends BluetoothManager<DiscoveredEventArgs, UUID, GATTService, GATTCharacteristic> {
14  /// constructor
15  BluetoothLowEnergyManager() {
16    logger.fine('init');
17
18    // Sync current adapter state
19    _adapterStateParser.parseAndCache(BluetoothLowEnergyStateChangedEventArgs(backend.state));
20  }
21
22  @override
23  Future<bool?> enable() async {
24    if (!Platform.isAndroid) {
25      return null;
26    }
27
28    return backend.authorize();
29  }
30
31  /// The actual backend implementation
32  final CentralManager backend = CentralManager();
33
34  final BluetoothLowEnergyStateParser _adapterStateParser = BluetoothLowEnergyStateParser();
35
36  @override
37  BluetoothAdapterState get lastKnownAdapterState => _adapterStateParser.lastKnownState;
38
39  @override
40  Stream<BluetoothAdapterState> get stateStream => backend.stateChanged.map(_adapterStateParser.parse);
41
42  BluetoothLowEnergyDiscovery? _discovery;
43
44  @override
45  BluetoothLowEnergyDiscovery get discovery {
46    _discovery ??= BluetoothLowEnergyDiscovery(this);
47    return _discovery!;
48  }
49
50  @override
51  BluetoothLowEnergyDevice createDevice(DiscoveredEventArgs device) => BluetoothLowEnergyDevice(this, device);
52
53  @override
54  BluetoothLowEnergyUUID createUuid(UUID uuid) => BluetoothLowEnergyUUID(uuid);
55
56  @override
57  BluetoothLowEnergyUUID createUuidFromString(String uuid) => BluetoothLowEnergyUUID.fromString(uuid);
58
59  @override
60  BluetoothLowEnergyService createService(GATTService service) => BluetoothLowEnergyService.fromSource(service);
61
62  @override
63  BluetoothLowEnergyCharacteristic createCharacteristic(GATTCharacteristic characteristic) => BluetoothLowEnergyCharacteristic.fromSource(characteristic);
64}