feat(auto): surface favorite groups as Android Auto sub-folders

Favoritos now renders non-empty custom groups as grupo:<id>
sub-folders (hidden when empty) with ungrouped stations left as
direct leaves, reusing the existing hijos() path so the zero-groups
case stays byte-identical to today's flat list.
This commit is contained in:
2026-07-19 13:42:25 +02:00
parent f9003436ea
commit f368bcc777
11 changed files with 812 additions and 1 deletions
+11
View File
@@ -5,6 +5,7 @@ import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:pluriwave/estado/estado_radio.dart';
import 'package:pluriwave/modelos/emisora.dart';
import 'package:pluriwave/modelos/grupo_favoritos.dart';
import 'package:pluriwave/modelos/preset_ecualizador.dart';
import 'package:pluriwave/servicios/navegacion_auto.dart';
import 'package:pluriwave/servicios/servicio_audio.dart';
@@ -584,6 +585,10 @@ void main() {
fuenteAuto.ultimoTodas?.map((e) => e.uuid),
contains('pop-auto-1'),
);
expect(
fuenteAuto.ultimoGrupos?.map((g) => g.id),
contains(GrupoFavoritos.sinAsignarId),
);
await estado.toggleFavorito(emisoraFav);
@@ -631,15 +636,18 @@ class _FuenteEmisorasAutoEspia implements FuenteEmisorasAuto {
List<Emisora>? ultimoFavoritos;
List<Emisora>? ultimoMisEmisoras;
List<Emisora>? ultimoTodas;
List<GrupoFavoritos>? ultimoGrupos;
void actualizarSnapshot({
List<Emisora>? favoritos,
List<Emisora>? misEmisoras,
List<Emisora>? todas,
List<GrupoFavoritos>? grupos,
}) {
if (favoritos != null) ultimoFavoritos = favoritos;
if (misEmisoras != null) ultimoMisEmisoras = misEmisoras;
if (todas != null) ultimoTodas = todas;
if (grupos != null) ultimoGrupos = grupos;
}
@override
@@ -651,6 +659,9 @@ class _FuenteEmisorasAutoEspia implements FuenteEmisorasAuto {
@override
Future<List<Emisora>> todas() async => ultimoTodas ?? const [];
@override
Future<List<GrupoFavoritos>> grupos() async => ultimoGrupos ?? const [];
@override
Future<Emisora?> porUuid(String uuid) async => null;
}