fix(eq): seed device ID at startup and add device management UI

Fix multi-device EQ auto-switching by calling obtenerDispositivoActual()
during cargarPersistido() to seed the initial device ID. Add device
management modal with rename support, EQ preset editing, and connection
status indicator. Translate device UI keys to all 13 locales.
This commit is contained in:
2026-06-28 11:55:15 +02:00
parent 71978de68f
commit 58922de6fc
34 changed files with 1461 additions and 51 deletions
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "يبدأ خلال {minutes} دقيقة",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "تعديل الجهاز",
"eqDeviceNameLabel": "اسم الجهاز",
"eqDeviceNameHint": "مثال: مكبر صوت غرفة المعيشة",
"eqDeviceNameConfirm": "حفظ",
"eqDeviceConnected": "متصل"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "{minutes} মিনিটে শুরু হবে",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "ডিভাইস সম্পাদনা করুন",
"eqDeviceNameLabel": "ডিভাইসের নাম",
"eqDeviceNameHint": "যেমন: লিভিং রুমের স্পিকার",
"eqDeviceNameConfirm": "সংরক্ষণ করুন",
"eqDeviceConnected": "সংযুক্ত"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "Startet in {minutes} Min.",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Gerät bearbeiten",
"eqDeviceNameLabel": "Gerätename",
"eqDeviceNameHint": "z. B. Wohnzimmer-Lautsprecher",
"eqDeviceNameConfirm": "Speichern",
"eqDeviceConnected": "Verbunden"
}
+14 -1
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
},
"preNoticeCountdown": "Starts in {minutes} min",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Edit device",
"eqDeviceNameLabel": "Device name",
"eqDeviceNameHint": "e.g. Living Room Speaker",
"eqDeviceNameConfirm": "Save",
"eqDeviceConnected": "Connected"
}
+14 -1
View File
@@ -590,5 +590,18 @@
"placeholders": {
"presetName": {}
}
}
},
"preNoticeCountdown": "Empieza en {minutes} min",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Editar dispositivo",
"eqDeviceNameLabel": "Nombre del dispositivo",
"eqDeviceNameHint": "Ej: Altavoz del living",
"eqDeviceNameConfirm": "Guardar",
"eqDeviceConnected": "Conectado"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "Démarre dans {minutes} min",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Modifier l'appareil",
"eqDeviceNameLabel": "Nom de l'appareil",
"eqDeviceNameHint": "ex. : Enceinte salon",
"eqDeviceNameConfirm": "Enregistrer",
"eqDeviceConnected": "Connecté"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "{minutes} मिनट में शुरू होगा",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "डिवाइस संपादित करें",
"eqDeviceNameLabel": "डिवाइस का नाम",
"eqDeviceNameHint": "उदा. लिविंग रूम स्पीकर",
"eqDeviceNameConfirm": "सहेजें",
"eqDeviceConnected": "कनेक्टेड"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "Mulai dalam {minutes} menit",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Edit perangkat",
"eqDeviceNameLabel": "Nama perangkat",
"eqDeviceNameHint": "Mis: Speaker ruang tamu",
"eqDeviceNameConfirm": "Simpan",
"eqDeviceConnected": "Terhubung"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "Inizia tra {minutes} min",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Modifica dispositivo",
"eqDeviceNameLabel": "Nome del dispositivo",
"eqDeviceNameHint": "Es: Cassa del salotto",
"eqDeviceNameConfirm": "Salva",
"eqDeviceConnected": "Connesso"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "{minutes}分後に開始",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "デバイスを編集",
"eqDeviceNameLabel": "デバイス名",
"eqDeviceNameHint": "例:リビングのスピーカー",
"eqDeviceNameConfirm": "保存",
"eqDeviceConnected": "接続中"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "Começa em {minutes} min",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Editar dispositivo",
"eqDeviceNameLabel": "Nome do dispositivo",
"eqDeviceNameHint": "Ex: Caixa da sala",
"eqDeviceNameConfirm": "Salvar",
"eqDeviceConnected": "Conectado"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "Начнётся через {minutes} мин",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "Изменить устройство",
"eqDeviceNameLabel": "Название устройства",
"eqDeviceNameHint": "Напр.: Колонка в гостиной",
"eqDeviceNameConfirm": "Сохранить",
"eqDeviceConnected": "Подключено"
}
+15 -2
View File
@@ -627,5 +627,18 @@
"placeholders": {
"presetName": {}
}
}
}
},
"preNoticeCountdown": "{minutes}分钟后开始",
"@preNoticeCountdown": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"eqDeviceEditTitle": "编辑设备",
"eqDeviceNameLabel": "设备名称",
"eqDeviceNameHint": "例:客厅音箱",
"eqDeviceNameConfirm": "保存",
"eqDeviceConnected": "已连接"
}
+36
View File
@@ -2305,6 +2305,42 @@ abstract class AppLocalizations {
/// In es, this message translates to:
/// **'Preset: {presetName}'**
String advancedEqDevicePresetLabel(Object presetName);
/// No description provided for @preNoticeCountdown.
///
/// In es, this message translates to:
/// **'Empieza en {minutes} min'**
String preNoticeCountdown(int minutes);
/// No description provided for @eqDeviceEditTitle.
///
/// In es, this message translates to:
/// **'Editar dispositivo'**
String get eqDeviceEditTitle;
/// No description provided for @eqDeviceNameLabel.
///
/// In es, this message translates to:
/// **'Nombre del dispositivo'**
String get eqDeviceNameLabel;
/// No description provided for @eqDeviceNameHint.
///
/// In es, this message translates to:
/// **'Ej: Altavoz del living'**
String get eqDeviceNameHint;
/// No description provided for @eqDeviceNameConfirm.
///
/// In es, this message translates to:
/// **'Guardar'**
String get eqDeviceNameConfirm;
/// No description provided for @eqDeviceConnected.
///
/// In es, this message translates to:
/// **'Conectado'**
String get eqDeviceConnected;
}
class _AppLocalizationsDelegate
+20
View File
@@ -1247,4 +1247,24 @@ class AppLocalizationsAr extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'الإعداد المسبق: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'يبدأ خلال $minutes دقيقة';
}
@override
String get eqDeviceEditTitle => 'تعديل الجهاز';
@override
String get eqDeviceNameLabel => 'اسم الجهاز';
@override
String get eqDeviceNameHint => 'مثال: مكبر صوت غرفة المعيشة';
@override
String get eqDeviceNameConfirm => 'حفظ';
@override
String get eqDeviceConnected => 'متصل';
}
+20
View File
@@ -1254,4 +1254,24 @@ class AppLocalizationsBn extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'প্রিসেট: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return '$minutes মিনিটে শুরু হবে';
}
@override
String get eqDeviceEditTitle => 'ডিভাইস সম্পাদনা করুন';
@override
String get eqDeviceNameLabel => 'ডিভাইসের নাম';
@override
String get eqDeviceNameHint => 'যেমন: লিভিং রুমের স্পিকার';
@override
String get eqDeviceNameConfirm => 'সংরক্ষণ করুন';
@override
String get eqDeviceConnected => 'সংযুক্ত';
}
+20
View File
@@ -1264,4 +1264,24 @@ class AppLocalizationsDe extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Preset: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Startet in $minutes Min.';
}
@override
String get eqDeviceEditTitle => 'Gerät bearbeiten';
@override
String get eqDeviceNameLabel => 'Gerätename';
@override
String get eqDeviceNameHint => 'z. B. Wohnzimmer-Lautsprecher';
@override
String get eqDeviceNameConfirm => 'Speichern';
@override
String get eqDeviceConnected => 'Verbunden';
}
+20
View File
@@ -1250,4 +1250,24 @@ class AppLocalizationsEn extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Preset: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Starts in $minutes min';
}
@override
String get eqDeviceEditTitle => 'Edit device';
@override
String get eqDeviceNameLabel => 'Device name';
@override
String get eqDeviceNameHint => 'e.g. Living Room Speaker';
@override
String get eqDeviceNameConfirm => 'Save';
@override
String get eqDeviceConnected => 'Connected';
}
+20
View File
@@ -1259,4 +1259,24 @@ class AppLocalizationsEs extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Preset: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Empieza en $minutes min';
}
@override
String get eqDeviceEditTitle => 'Editar dispositivo';
@override
String get eqDeviceNameLabel => 'Nombre del dispositivo';
@override
String get eqDeviceNameHint => 'Ej: Altavoz del living';
@override
String get eqDeviceNameConfirm => 'Guardar';
@override
String get eqDeviceConnected => 'Conectado';
}
+20
View File
@@ -1269,4 +1269,24 @@ class AppLocalizationsFr extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Preset : $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Démarre dans $minutes min';
}
@override
String get eqDeviceEditTitle => 'Modifier l\'appareil';
@override
String get eqDeviceNameLabel => 'Nom de l\'appareil';
@override
String get eqDeviceNameHint => 'ex. : Enceinte salon';
@override
String get eqDeviceNameConfirm => 'Enregistrer';
@override
String get eqDeviceConnected => 'Connecté';
}
+20
View File
@@ -1253,4 +1253,24 @@ class AppLocalizationsHi extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'प्रीसेट: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return '$minutes मिनट में शुरू होगा';
}
@override
String get eqDeviceEditTitle => 'डिवाइस संपादित करें';
@override
String get eqDeviceNameLabel => 'डिवाइस का नाम';
@override
String get eqDeviceNameHint => 'उदा. लिविंग रूम स्पीकर';
@override
String get eqDeviceNameConfirm => 'सहेजें';
@override
String get eqDeviceConnected => 'कनेक्टेड';
}
+20
View File
@@ -1258,4 +1258,24 @@ class AppLocalizationsId extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Preset: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Mulai dalam $minutes menit';
}
@override
String get eqDeviceEditTitle => 'Edit perangkat';
@override
String get eqDeviceNameLabel => 'Nama perangkat';
@override
String get eqDeviceNameHint => 'Mis: Speaker ruang tamu';
@override
String get eqDeviceNameConfirm => 'Simpan';
@override
String get eqDeviceConnected => 'Terhubung';
}
+20
View File
@@ -1264,4 +1264,24 @@ class AppLocalizationsIt extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Preset: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Inizia tra $minutes min';
}
@override
String get eqDeviceEditTitle => 'Modifica dispositivo';
@override
String get eqDeviceNameLabel => 'Nome del dispositivo';
@override
String get eqDeviceNameHint => 'Es: Cassa del salotto';
@override
String get eqDeviceNameConfirm => 'Salva';
@override
String get eqDeviceConnected => 'Connesso';
}
+20
View File
@@ -1214,4 +1214,24 @@ class AppLocalizationsJa extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'プリセット: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return '$minutes分後に開始';
}
@override
String get eqDeviceEditTitle => 'デバイスを編集';
@override
String get eqDeviceNameLabel => 'デバイス名';
@override
String get eqDeviceNameHint => '例:リビングのスピーカー';
@override
String get eqDeviceNameConfirm => '保存';
@override
String get eqDeviceConnected => '接続中';
}
+20
View File
@@ -1256,4 +1256,24 @@ class AppLocalizationsPt extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Preset: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Começa em $minutes min';
}
@override
String get eqDeviceEditTitle => 'Editar dispositivo';
@override
String get eqDeviceNameLabel => 'Nome do dispositivo';
@override
String get eqDeviceNameHint => 'Ex: Caixa da sala';
@override
String get eqDeviceNameConfirm => 'Salvar';
@override
String get eqDeviceConnected => 'Conectado';
}
+20
View File
@@ -1260,4 +1260,24 @@ class AppLocalizationsRu extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return 'Пресет: $presetName';
}
@override
String preNoticeCountdown(int minutes) {
return 'Начнётся через $minutes мин';
}
@override
String get eqDeviceEditTitle => 'Изменить устройство';
@override
String get eqDeviceNameLabel => 'Название устройства';
@override
String get eqDeviceNameHint => 'Напр.: Колонка в гостиной';
@override
String get eqDeviceNameConfirm => 'Сохранить';
@override
String get eqDeviceConnected => 'Подключено';
}
+20
View File
@@ -1207,4 +1207,24 @@ class AppLocalizationsZh extends AppLocalizations {
String advancedEqDevicePresetLabel(Object presetName) {
return '预设:$presetName';
}
@override
String preNoticeCountdown(int minutes) {
return '$minutes分钟后开始';
}
@override
String get eqDeviceEditTitle => '编辑设备';
@override
String get eqDeviceNameLabel => '设备名称';
@override
String get eqDeviceNameHint => '例:客厅音箱';
@override
String get eqDeviceNameConfirm => '保存';
@override
String get eqDeviceConnected => '已连接';
}