# ZPlay Mobile

Proyecto móvil Android basado en la app Android TV.

## Comportamiento
- pantalla de inicio vertical
- reproductor horizontal
- control táctil
- misma lógica de sesión persistente, códigos, canales y EPG del backend principal

## Carpeta
Este proyecto fue agregado dentro de `movil/` para convivir con:
- `androidtv-app/`
- `backend/`
- `frontend/`


## v11.8.3.1
- login móvil adaptado a correo electrónico + contraseña
- estilo visual vertical tipo app premium móvil
- fondo de imágenes con desplazamiento lento
- misma lógica de sesión persistente y acceso del backend principal


## v11.8.3.2
- móvil: flujo de login corregido para entrar al reproductor de forma directa después de autenticar correo y contraseña
- móvil: ya no depende de un restore intermedio para abrir canales tras el login
- móvil: diseño de inicio pulido con estilo más premium y coherente con la referencia
- móvil: ajustes visuales en top bar, hoja de canales y estados del reproductor


## v11.8.3.2.1
- móvil: corregido error de compilación en `MobileTopBar`
- faltaba una coma en la llamada a `Row(...)` antes de `verticalAlignment`


## v11.8.3.2.2
- móvil: la pantalla “Restaurando sesión” ahora solo aparece si realmente existe una sesión previa del dispositivo o mientras termina el bootstrap inicial
- móvil: un inicio nuevo muestra directamente el login por correo, sin quedarse atrapado en restauración
- móvil: campos de correo y contraseña con texto blanco y mejor contraste sobre fondo oscuro
- móvil: flujo afinado entre login nuevo y restauración de sesión persistente


## v11.8.3.3
- móvil: autenticación reforzada con sesión por cookies y restauración correcta de sesiones previas
- móvil: conexión HTTP más estable forzando HTTP/1.1 y mejor manejo de cierres inesperados del stream
- móvil: mensajes de error más claros para problemas de conectividad con el panel
- móvil: reproductor y navegación táctil pulidos para un look más comercial
- móvil: hoja de canales y overlays ajustados visualmente


## v11.8.3.4
- móvil: eliminado el paso intermedio de “Acceso aceptado” que provocaba el cambio repetido entre vertical y horizontal
- móvil: ahora, después del login correcto, entra directo al reproductor
- móvil: durante el ingreso se muestra estado inline (“Ingresando…”) en la misma pantalla de login
- móvil: orientación fijada de forma más estable (portrait/landscape) para evitar rebotes
- móvil: agregado estado de “Preparando reproductor” mientras se cargan canales y configuración
- móvil: al iniciar login por correo se limpia sesión TV residual para que no compita con el acceso móvil


## v11.8.3.5
- móvil: login corregido con guardado explícito de sesión en backend (`req.session.save`)
- móvil: la app ahora hace bootstrap con reintentos después del login antes de mostrar error
- móvil: corregido el caso donde decía “La sesión se creó, pero no se pudo validar el usuario”
- móvil: transición más confiable desde login al reproductor


## v11.8.3.6
- móvil: nuevo endpoint backend `/api/mobile/login-bootstrap` para autenticar y entregar canales/configuración en una sola llamada
- móvil: se evita la carrera entre login, guardado de cookie y validación posterior
- móvil: limpieza de cookies/sesiones residuales antes de un login nuevo
- móvil: cliente HTTP simplificado quitando forzado de `Connection: close` y protocolo fijo
- móvil: mensajes de error HTTP más claros


## v11.8.3.6.1
- móvil: corregido error de compilación por import duplicado de `retrofit2.HttpException`
- móvil: limpieza de imports duplicados en archivos Kotlin del proyecto `movil/`
- revisión enfocada en el bloqueo actual de compilación mostrado en Android Studio


## v11.8.3.6.2
- móvil: revisión general del flujo de sesión y reproductor
- móvil: la configuración remota ahora usa `sanitizeRemoteBaseUrl(...)` para no romper la base URL si el panel devuelve un valor incorrecto
- móvil: el login bootstrap ahora resuelve correctamente URLs relativas de logos y streams antes de entrar al reproductor
- móvil: restauración de sesión deja el estado limpio si la sesión persistida ya no es válida
- móvil: mensajes de error HTTP afinados para casos de credenciales/sesión


## v11.8.3.6.3
- móvil: agregado logo de app en recursos y encabezados visuales
- móvil: menú de canales rediseñado al costado izquierdo, inspirado en Android TV pero ajustado a pantalla de celular
- móvil: carga de logos de canal mejorada con soporte para URLs remotas, SVG y data:image base64
- móvil: logos y tarjetas ajustados para permanecer completamente dentro de pantalla, sin cortes
- revisión enfocada en la experiencia general de la app móvil


## v11.8.3.6.4
- móvil: el logo nuevo queda solo como icono de launcher de Android
- móvil: dentro de la app se restauró el logo visual anterior de ZPlay


## v11.8.3.6.5
- móvil: reproductor ajustado para mostrar el video centrado/adaptado a pantalla, sin recorte agresivo
- móvil: menú lateral de canales reposicionado y reducido para teléfonos, inspirado en Android TV pero adecuado al ancho del celular
- móvil: logos de canal reforzados con fallback visible siempre dentro del cuadro
- móvil: mensaje “Toca la pantalla para mostrar controles” ahora aparece solo por unos segundos y luego desaparece
- móvil: overlays del reproductor refinados para una visual más comercial y equilibrada


## v11.8.3.6.6
- móvil: menú lateral de canales más largo
- móvil: fondo del drawer más transparente
- móvil: espaciado interno ajustado para aprovechar mejor la altura visible


## v11.8.3.6.7
- móvil: menú lateral de canales ampliado para llenar mejor el espacio visible
- móvil: fondo del drawer más transparente
- móvil: eliminado por completo el mensaje “Toca la pantalla para mostrar controles”
- móvil: ajuste fino del tamaño del menú para acercarlo al layout solicitado


## v11.8.3.6.7.1
- móvil: corregido error de compilación en `MobilePlayerScreen`
- `AnimatedVisibility(...)` fue sacado de un `LaunchedEffect(...)`, que era la causa del error `@Composable invocations can only happen...`


## v11.8.3.6.8
- móvil: menú lateral expandido más hacia abajo
- móvil: toque simple vuelve a mostrar overlays y controles
- móvil: doble toque abre/cierra el menú de canales
- móvil: overlays permanecen más tiempo visibles antes de ocultarse


## v11.8.3.6.8.1
- móvil: corregido error de compilación por llave `}` extra en `MobilePlayerScreen`
- reparación directa del bloqueo `Expecting a top level declaration`


## v11.8.3.6.8.2
- móvil: toque simple vuelve a mostrar overlays y controles del reproductor
- móvil: doble toque abre/cierra el menú de canales
- móvil: toque largo abre el menú de canales
- móvil: eliminado por completo el texto de ayuda en pantalla
- móvil: overlays visibles por 6 segundos antes de ocultarse


## v11.8.3.6.8.3
- móvil: reconstruido `MobilePlayerScreen` para corregir llaves desbalanceadas y errores de compilación
- móvil: toque simple vuelve a mostrar overlays, doble toque abre/cierra menú, toque largo abre menú
- móvil: mantenidas las mejoras del drawer y overlays de versiones anteriores


## v11.8.3.6.8.4
- móvil: agregadas zonas táctiles invisibles a izquierda y derecha del reproductor
- tocar sector izquierdo cambia al canal anterior
- tocar sector derecho cambia al canal siguiente
- los botones son invisibles, sin alterar la estética visual del player


## v11.8.3.6.8.5
- móvil: quitadas flechas visibles izquierda/derecha del top bar
- móvil: zonas táctiles invisibles laterales quedan detrás del menú superior y del botón de menú
- móvil: al salir o mandar la app al fondo, la actividad se cierra para evitar audio en segundo plano
- móvil: pantalla se mantiene encendida mientras el reproductor está abierto


## v11.8.3.6.8.6
- móvil: modo pantalla completa real, ocultando barra superior e inferior del teléfono
- móvil: la app reoculta barras del sistema al recuperar foco
- móvil: nueva simbología inferior izquierda estilo OTT, moderna y discreta
- móvil: top bar ajustado para aprovechar mejor el fullscreen


## v11.8.3.6.8.7
- móvil: simbología inferior izquierda refinada a estilo más premium
- móvil: iconos más finos y menos texto
- móvil: fondo totalmente transparente en la barra de ayuda OTT


## v11.8.3.6.8.8
- móvil: el botón Salir ahora pide confirmación antes de cerrar sesión
- diálogo con opciones Aceptar y Cancelar
- el cierre de sesión solo ocurre si el usuario confirma


## v11.8.3.6.8.9
- móvil: fondo del login rediseñado como collage inclinado de imágenes, inspirado en la referencia del usuario
- móvil: las imágenes se mueven de derecha a izquierda con desplazamiento lento
- panel: la sección de fondos ahora indica claramente que también alimenta el login de la app móvil


## v11.8.3.6.9
- móvil: fondo del login refinado para parecerse más a la referencia visual
- collage con tarjetas más grandes, mejor inclinación y composición superior más protagonista
- desplazamiento continuo de derecha a izquierda
- gradiente reforzado para dejar una zona inferior más limpia y premium


## v11.8.3.6.9.1
- móvil: el botón “Ingresar a mi cuenta” ahora muestra estado de carga visible
- móvil: durante el login aparece “Ingresando...” con indicador de progreso
- móvil: se muestra mensaje explicando que se está validando el acceso y preparando la app
- móvil: el botón queda deshabilitado mientras dura el proceso de autenticación


## v11.8.3.6.9.2
- móvil: botón Salir elevado por delante de las zonas táctiles invisibles
- móvil: menú superior con mayor prioridad visual y táctil
- móvil: zonas laterales invisibles para cambio de canal reducidas de tamaño
- móvil: zonas táctiles ahora evitan interferir con menú y botón Salir


## v11.8.3.6.9.4
- móvil: corregido de raíz el botón Salir
- el diálogo de confirmación vuelve a estar presente en pantalla
- el detector táctil global del reproductor ya no intercepta toques del top bar
- ahora la detección de toques para overlays/canales se hace en una capa separada detrás de los controles
- zonas invisibles laterales reducidas aún más


## v11.8.3.6.9.5
- móvil: fondo del reproductor ajustado a negro


## v11.8.3.6.9.6
- corregida la carga de imágenes del fondo de inicio desde el panel
- las rutas de las imágenes ahora se resuelven correctamente antes de mostrarse
- ajuste aplicado en móvil y Android TV para evitar fondos vacíos por URLs relativas


## v11.8.3.6.9.7
- móvil: revisión minuciosa del botón Salir
- MobilePlayerScreen reconstruido para incluir de forma explícita el diálogo de confirmación
- diálogo de logout ahora vive en la capa raíz del player, fuera de AnimatedVisibility
- botón Salir convertido a Box clickable con prioridad táctil alta
- zonas invisibles laterales reducidas y alejadas de los controles superiores


## v11.8.3.6.9.8
- móvil: corregido el flujo posterior al logout
- el estado ya no vuelve con `isLoading = true` después de cerrar sesión
- al aceptar “Salir”, la app vuelve limpia al login sin quedarse pegada en “Cargando”
