fix(devices): cache platform device names, dedupe placeholder ids, purge collided EQ entries
Build & Deploy PluriWave / Análisis de código (push) Successful in 36s
Build & Deploy PluriWave / Build APK + AAB release (push) Successful in 1m47s

Dart half of bt-device-identity. EstadoEcualizador now caches each
device's platform-reported name in memory so the settings screen
shows the device's own Bluetooth name instead of its raw id when no
custom rename exists, and skips auto-creating preset entries for the
composite-placeholder sentinel. Enabling multi-device EQ triggers the
Bluetooth permission request through the new channel contract. A
flag-guarded one-time migration purges only entries keyed by the
exact literal placeholder id from the three per-device preference
maps, since those collided entries cannot be attributed to a device.

Work unit 2/2 of bt-device-identity (Dart state + migration).
This commit is contained in:
2026-07-11 00:25:00 +02:00
parent 224763bca3
commit b17c582572
11 changed files with 711 additions and 7 deletions
@@ -21,6 +21,12 @@ abstract class ServicioDispositivoAudio {
/// (method channel round-trip). Returns the cached value if already known.
Future<DispositivoAudio> obtenerDispositivoActual();
/// Requests the `BLUETOOTH_CONNECT` runtime permission (API 31+) at the
/// point the device-management UI is opened (bt-device-identity ADR-1).
/// Returns true when granted or not required (SDK < 31, iOS); false when
/// denied.
Future<bool> solicitarPermisoBluetooth();
/// Cancels the device-change subscription and releases resources.
Future<void> dispose();
}
@@ -82,6 +88,14 @@ class ServicioDispositivoAudioReal extends ServicioDispositivoAudio {
return device;
}
@override
Future<bool> solicitarPermisoBluetooth() async {
final granted = await _methodChannel.invokeMethod<bool>(
'requestBluetoothConnect',
);
return granted ?? false;
}
@override
Future<void> dispose() async {
await _eventSub?.cancel();