OpenTune
com.Arturo254.opentune
Zapstore _@zapstore.dev Republished from GitHub / F-Droid by the Zapstore main account.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Aug 30, 2026 3.0.7# 🚀 Release 3.0.7 *Versión centrada en **estabilización de la carga de álbumes, sistema global de logging con visor en tiempo real, gestión avanzada de colas, caché de catálogo para Canvas y modernización de ajustes con Material 3 Expressive**.* --- ## ✨ Nuevas Funciones ### 🪵 Sistema Global de Logging con Visor en Tiempo Real
More…
**Nuevo sistema centralizado de logs accesible desde la propia aplicación, sin necesidad de Logcat.** **Características:** - `GlobalLog` como singleton con `StateFlow` de hasta 500 entradas - `GlobalLogTree` (Timber Tree) plantado en `onCreate()` de la aplicación - Captura automática de todos los eventos de logging - Visor interactivo en `DebugSettings` con: - Filtros por nivel (Verbose/Debug/Info/Warning/Error) - Filtros por tag (Discord / All) - Expansión/colapso de entradas al hacer clic - Copiado al portapapeles en long press - Badges de nivel con código de colores - Botones "Clear" y "Share" (compartir logs formateados) - Auto-scroll al último elemento - Timestamp con formato `HH:mm:ss.SSS` - Manejo seguro con `try/catch` para evitar que un fallo en logging rompa la app **Módulos instrumentados:** - `CustomCanvasProvider` (búsquedas, caché, descargas, errores HTTP, validación JSON) - `BetterLyricsProvider` (logger interno redirigido a GlobalLog) - `LyricsHelper` (cache hits, fetch de letras, estado de red) - `DiscordRPC` (errores de refreshActivity con stack trace completo) **Beneficios:** - Depuración en tiempo real desde el dispositivo - Sin necesidad de conectar a PC o usar Logcat - Ideal para testing y reporte de bugs --- ### 📋 Gestión Avanzada de Cola de Reproducción **Nuevas capacidades para manipular la cola de reproducción desde la interfaz.** **Características:** - `removeSongFromQueue` - Eliminar una canción específica de la cola - `removeSongFromQueueByIndex` - Eliminar por índice - `clearQueue` - Vaciar toda la cola - Persistencia en disco al eliminar o restaurar mediante "Undo" - Refactor de `writePersistentObject` para manejo robusto de archivos - Eliminación de llamadas `Sync` redundantes **Beneficios:** - Mayor control sobre tu lista de reproducción - Limpieza rápida de la cola - Persistencia confiable entre sesiones --- ### 🖼️ Caché de Catálogo para Custom Canvas Provider **Nuevo sistema de caché para el catálogo de canales personalizados.** **Características:** - Almacenamiento local en archivo JSON (`canvas_catalog.json`) - Reducción de peticiones de red al cargar el catálogo - Método `init` para manejo de contexto y carga inicial - Integración con el sistema de caché de videos existente **Beneficios:** - Menor consumo de datos - Carga más rápida del catálogo - Funciona offline una vez descargado --- ### 🎨 Modernización de Ajustes de Cuenta con Material 3 Expressive **Migración completa de `AccountSettings` y diálogos relacionados a Material 3 Expressive.** **Cambios Principales:** - `AccountSettings` migrado de `Column` a `ModalBottomSheet` - `PlaylistSelectionDialog` migrado a `ModalBottomSheet` - Componentes actualizados: `AccountCard`, `SettingsClickableItem`, `SettingsToggleItem`, `UpdateAvailableItem` - Uso de `MaterialShapes` (Cookie, Pill, Circle) - `MotionScheme` para animaciones fluidas - Tipografía "Emphasized" (`bodyLargeEmphasized`, `titleMediumEmphasized`) - `CircularWavyProgressIndicator` en lugar de indicadores estándar - FAB en `FloatingNavigationToolbar` con `CircleShape` **Beneficios:** - Experiencia más moderna y consistente - Navegación mejorada con bottom sheets - Animaciones más suaves y expresivas --- ## 🎬 Mejoras de Estabilidad y Rendimiento ### 🗂️ Estabilización de Carga de Álbumes **Refactorización completa del flujo de carga de álbumes para evitar estados bloqueados.** **Cambios Principales:** - **Manejo explícito de estados:** `Loading`, `Content`, `Empty`, `Error` en `AlbumScreen` - **Continuación robusta:** Mejora en `albumSongs` para evitar loops infinitos - **Manejo de respuestas vacías:** Mayor gracia ante respuestas vacías del servidor - **Caché local como fallback:** Transición a `Content` si hay datos locales aunque falle la red - **Timber logging extensivo:** Facilita debugging de transiciones de UI **Base de Datos:** - `DatabaseDao.insert(AlbumPage)` ahora hace `update` si el álbum ya existe - Nuevo campo `lastUpdateTime` en registros de álbumes **Beneficio:** La pantalla de álbum ya no se queda atascada mostrando shimmer o estados incorrectos. --- ### 🔧 Bypass de Desofuscación de Firma de NewPipe **Desactivación temporal del sistema de desofuscación de NewPipe debido a incompatibilidades.** **Cambios:** - Desactivado `YoutubeJavaScriptPlayerManager` para manejo de throttling - Logging mejorado en `NewPipeUtils` y objeto `YouTube` - Seguimiento detallado de resolución de URLs y parseo de álbumes **Beneficio:** Mayor estabilidad en la reproducción mientras se busca una solución permanente. --- ## 🔧 Mejoras Internas ### UI y Experiencia de Usuario **Correcciones y mejoras visuales:** - **Search bar:** Preservación del carácter '+' en consultas de búsqueda (Merge #745) - **Fullscreen player:** Ocultación correcta de status y navigation bars cuando el reproductor está en pantalla completa - **System bars:** Lógica de visibilidad mejorada en `MainActivity` - **Fuente Linotte:** Cambio de formato TTF a OTF para mejor compatibilidad - **Limpieza:** Eliminación de imports no utilizados y corrección de indentación --- ### Nuevas Preferencias y Recursos **Recursos de string añadidos para Debug Settings:** ```xml show_canvas_debug, description_show_canvas_debug, canvas_debug_section, canvas_cache_stats, canvas_logs, refresh_catalog, debug_logs, filter_levels, log_level_{verbose,debug,info,warning,error}, reset_to_default_levels, filter_discord_only, filter_all_logs, no_logs, logs_empty_message, copied_to_clipboard, share_logs, clear ``` --- ### Refactorización Interna - **Cola de reproducción:** Eliminación de llamadas `Sync` redundantes en `MusicService` - **CustomCanvasProvider:** Método `init` para gestión de contexto y catálogo - **MainActivity:** Simplificación del decodeo de queries de búsqueda - **Manejo de System Bars:** Comportamiento consistente en modo fullscreen --- ## 📦 Versionado ``` versionCode: 133 → 134 versionName: 3.0.6 → 3.0.7 ``` --- ## 🎯 Resumen de Impacto | Área | Cambio | Impacto | |------|--------|---------| | 🪵 Sistema de Logging | **NUEVO** | Alta - Depuración en tiempo real | | 📋 Gestión de Cola | **NUEVO** | Media - Mayor control | | 🗂️ Carga de Álbumes | **Mejora** | Alta - Estabilidad crítica | | 🖼️ Caché de Catálogo Canvas | **NUEVO** | Media - Rendimiento | | 🎨 UI Ajustes de Cuenta | **Mejora** | Media - Experiencia moderna | | 🔧 Bypass de NewPipe | **Fix** | Alta - Estabilidad de reproducción | | 📱 Fullscreen Player | **Fix** | Media - Inmersión visual | --- **¿Necesitas algún ajuste o cambio en la estructura?** 🚀 - Aug 2, 2026 3.0.6## 🚀 Release 3.0.6 *Versión centrada en **reproducción de música local en el dispositivo, sistema de caché persistente para canvases, actualizaciones in-app, mejoras en la biblioteca y diseño Material 3 Expressive**.* ### ⚠️ _**es posible que la aplicacion no se sobre instale debido al cambio de firma. si es asi descargala desde este enlace:**_ [OpenTune](https://github.com/Arturo254/OpenTune/releases/download/3.0.6/app-universal-release.apk) --- ## ✨ Nuevas Funciones
More…
### 📱 Reproducción de Música Local en el Dispositivo **¡Llega el soporte completo para audio local!** Ahora OpenTune puede escanear, indexar y reproducir archivos de música almacenados en tu dispositivo. **Características:** - Escaneo automático de archivos de audio (MP3, FLAC, OGG, WAV, etc.) a través de MediaStore - Indexación persistente en base de datos (Schema v28-v29) - Soporte para extracción robusta de metadatos usando `MediaMetadataRetriever` - Reproducción directa desde URI `content://` sin pasar por YouTube - Compatibilidad con "Abrir con" desde gestores de archivos (intent `VIEW`/`SEND`) - Filtrado por carpetas con selección persistente en `DataStore` - Integración completa con el sistema de favoritos (likes locales) - Acceso rápido desde "On device" en la pantalla de biblioteca **Beneficios:** - Escucha tu música sin conexión a Internet - Integración perfecta con tu biblioteca existente - Misma experiencia de reproducción que el contenido de YouTube Music --- ### 📥 Actualizaciones In-App **Nuevo sistema de actualizaciones directas desde la aplicación.** **Componentes:** - `Updater` con `downloadApk` e `installApk` usando Ktor y `FileProvider` - `UpdateDetailsBottomSheet` con indicador de progreso ondulante - Visor de notas de lanzamiento en formato Markdown - Permiso `REQUEST_INSTALL_PACKAGES` para instalación automática **Beneficios:** - Actualizaciones más rápidas y cómodas - Sin necesidad de descargar manualmente desde GitHub - Experiencia más profesional y pulida --- ### 🎨 Filtrado por Carpetas para Música Local **Nuevo sistema para organizar tu biblioteca local por directorios.** **Características:** - `FolderFilterBottomSheet` para seleccionar carpetas específicas - Persistencia de selección mediante `stringSetPreferencesKey` (`SelectedLocalFoldersKey`) - Extracción inteligente de nombres de directorio desde rutas `localPath` - Chips interactivos de selección en `LocalSongsScreen` - Estado de escaneo con diálogo informativo `searching_for_media` **Beneficios:** - Organiza tu música por carpetas (ej: "Descargas", "Música", "Podcasts") - Mejor control sobre qué contenido aparece en tu biblioteca --- ## 🎬 Mejoras de Biblioteca y Reproductor ### 🗂️ Parser de Biblioteca InnerTube Mejorado **Refactorización completa del parseo de `LibraryPage` para manejar mejor respuestas complejas.** **Cambios Principales:** - **Manejo de IDs faltantes:** Ahora soporta elementos sin `browseId` (ej: canciones subidas/local) - **Mejor mapeo:** Extracción mejorada de álbumes y playlists - **Tokens de like:** Implementada extracción correcta de tokens de añadir/eliminar de la biblioteca - **Logging robusto:** Facilita debugging de respuestas de YouTube Music - **Extracción de autores:** Fix para autores de playlists **Beneficio:** Menos errores al sincronizar tu biblioteca de YouTube Music. --- ### 🖼️ Sistema de Caché Persistente para Canvases **Nuevo sistema de caché en disco para videos de Spotify y canales personalizados.** **Características:** - `CanvasCacheManager` con almacenamiento persistente via JSON - Estrategia "cache-first" para reducir uso de datos - Descarga asíncrona y almacenamiento de videos - Integración con `CustomCanvasProvider` y `CanvasArtworkPlayer` - Inicialización en `MainActivity.onStart` - Visualización de uso real en bytes en ajustes de almacenamiento **Beneficios:** - Reproducción más rápida de canvases - Menor consumo de datos móviles - Experiencia sin interrupciones en reproducción --- ### 🎵 Mejoras en el Reproductor Local **Optimizaciones para una experiencia fluida con música local.** **Mejoras:** - `Song.toMediaItem()` usa URI `content://` directamente para canciones locales - `MusicService` omite resolución de YouTube para URI `content://` - `toggleLike()` delegado a `localToggleLike()` para canciones locales - Ocultación inteligente de acciones solo-YouTube en `SongMenu`, `PlayerMenu` y barra de acciones - Soporte para extractores adicionales de audio local **Acciones ocultas para contenido local:** - Iniciar radio - Compartir / Copiar enlace - Descargar / Eliminar caché - Ver artista / álbum - Refrescar metadatos - Detalles de formato **Beneficio:** Interfaz limpia y relevante según el tipo de contenido. --- ## 🔧 Mejoras Internas ### Base de Datos y Escaneo **Actualizaciones Schema:** ```kotlin // SongEntity - Schema v28-v29 + localPath: String? // Ruta completa del archivo + isLocal: Boolean (flags) // Para artistas, álbumes y playlists ``` **Mejoras en `LocalMediaScanner`:** - Extracción de `albumart` vía URI de MediaStore - Fallback a `ALBUM_ARTIST` y etiquetas ID3/Vorbis - Reesolución de mapeo de artistas en rescan (no solo en inserción inicial) - Agrupación de medios por directorio con `getAvailableFolders` --- ### UI y Componentes Material 3 Expressive **Modernización de pantallas:** - `LocalSongsScreen` con cabecera sticky y chips de selección - `StorageSettings` con `MD3ExpressiveCacheCard` y diseño más espacioso - `BackupAndRestore` y `AboutScreen` con APIs Material 3 Expressive - Nuevo indicador de advertencia "⚠️ Casi lleno" en caché (+80%) **Iconos vectoriales actualizados:** - `folder.xml` - `share.xml` --- ### Nuevas Preferencias ```kotlin // Almacenamiento persistente en DataStore val SelectedLocalFoldersKey = stringSetPreferencesKey("selectedLocalFolders") // Nuevos recursos de string - searching_for_media // Estado de escaneo - folder_management // Gestión de carpetas - filter_by_folder // Filtrado por carpeta - no_media_in_folder // Sin medios en carpeta - scanning_media // Escaneando medios ``` --- ### Dependencias y Mantenimiento **Actualizaciones:** - `newpipe-extractor`: `v0.25.2` → `v0.26.3` - Estandarización del módulo en `libs.versions.toml` - `gradle-daemon-jvm.properties` para Java 21 en todos los sistemas - Eliminación de configuraciones alternativas obsoletas **Efecto Visual Liquid Glass:** - Efecto de desenfoque "Liquid Glass" en Navigation Bar y MiniPlayer (Merge #705) **Correcciones:** - Fix para `UnrecognizedInputFormatException` en reproducción local - Mejor manejo de `content://` URIs en pipeline de caché --- ### 📦 Versionado ``` versionCode: 132 → 133 versionName: 3.0.5 → 3.0.6 ``` --- ## 🎯 Resumen de Impacto | Área | Cambio | Impacto | |------|--------|---------| | 🎵 Reproducción Local | **NUEVO** | Alta - Experiencia offline | | 📥 Actualizaciones In-App | **NUEVO** | Alta - Mayor comodidad | | 🖼️ Caché de Canvases | **NUEVO** | Media - Rendimiento y datos | | 🗂️ Filtrado por Carpetas | **NUEVO** | Media - Mejor organización | | 🎨 UI Material 3 | **Mejora** | Media - Diseño moderno | | 🔧 Parser de Biblioteca | **Mejora** | Media - Estabilidad | | 🚀 Dependencias | **Actualización** | Baja - Mantenimiento | - Jul 14, 2026 3.0.5## 🚀 Release 3.0.5 *Versión centrada en **mejoras de interfaz Material 3 Expressive, haptic feedback, drag & drop para proveedores de letras, optimizaciones de reproductor con zoom immersivo y experiencia de usuario avanzada**.* --- ## ✨ Nuevas Funciones ### 🎛️ Sistema de Haptic Feedback Completo
More…
Se introduce un nuevo sistema de feedback háptico con compatibilidad automática entre versiones de Android. **Características:** - `HapticManager` con 10+ tipos de vibración - Fallbacks automáticos para Android 5.0+ - Control global mediante `EnableHapticFeedbackKey` - Compatibilidad: Click, Toggle, Confirm, Reject, Keyboard, DragStart, GestureEnd - Integración en MiniPlayer y componentes interactivos --- ### 📱 Top App Bar Flexible Material 3 Nueva navegación expresiva con `LargeFlexibleTopAppBar` en pantallas de configuración. **Beneficios:** - Diseño moderno y responsivo - Animaciones suaves al desplazar - Mejor aprovechamiento de espacio - Consistencia en toda la app --- ### 🎵 Reordenamiento Drag & Drop para Proveedores de Letras Nuevo diálogo para reorganizar el orden de búsqueda de proveedores de letras. **Componente:** `DragDropLyricsProviderDialog` - Soporte para LrcLib, Kugou, BetterLyrics, SimpMusic - Persistencia automática en DataStore - Animations suaves con Spring - Hit-testing mejorado para evitar saltos --- ### 🎨 LanguageSelector Bottom Sheet Expresivo Nueva interfaz Material 3 para seleccionar idiomas con búsqueda integrada. **Características:** - `LanguageSelectorBottomSheet` reutilizable - Sistema de default "System Default" - Búsqueda en tiempo real - Animaciones de selección - Soporte para Android 13+ --- ## 🎬 Mejoras de Canvas y Reproductor ### 🖼️ Custom Canvas Provider - Lógica de Matching Mejorada Se refactoriza completamente el algoritmo de coincidencia del `CustomCanvasProvider` para manejar mejor casos con metadatos faltantes. **Cambios Principales:** - **Flujo de Matching Optimizado:** - Prioriza coincidencias por artista primero - Seguidas de filtros específicos por álbum o canción - Fallback mejorado: cuando el álbum no está disponible, intenta matching por título de canción - Si falla, utiliza entradas de artista disponibles como último recurso - **Helper `createArtwork`:** - Estandariza la creación de objetos `CanvasArtwork` - Reduce código duplicado - **Debug Logging Mejorado:** - Clarifica tipos de coincidencia: "song (without album)", "exact song", "album (without specific song)" - Facilita troubleshooting en desarrollo --- ### 🎥 CanvasArtworkPlayer - Zoom Immersivo **Actualización de ResizeMode:** - **Cambio:** `RESIZE_MODE_FIT` → `RESIZE_MODE_ZOOM` - **Beneficio:** Experiencia visual más moderna y edge-to-edge - **Comportamiento:** Mantiene aspect ratio mientras llena toda la pantalla **Integración Consistente:** - `PlayerComponents.kt` y `Thumbnail.kt` ahora usan `RESIZE_MODE_ZOOM` en todas partes - Reemplaza `RESIZE_MODE_FILL` y `RESIZE_MODE_FIT` - Proporciona visual coherente en diferentes vistas del reproductor --- ### Canvas Multi-Proveedor Mejorado **Cambios:** - Nuevo `CanvasArtworkResolver` más robusto - Soporte para splits de artistas (colabs, feat.) - Fix: búsqueda individual por artista secundario - Mejor manejo de casos edge ### Reproductor V8 Avanzado **Novedades:** - Integración de Canvas en `V8PlayerBackdrop` - Fullscreen opcional mediante `PlayerFullscreenKey` - Motion Scheme expresivo - Mejor sincronización de Insets --- ## 🔧 Mejoras Internas ### Material 3 Expressive Masivo - `CircularWavyProgressIndicator` en lugar de `CircularProgressIndicator` - `LargeFlexibleTopAppBar` en configuración - `ToggleButton` con `ButtonGroupDefaults` - Animaciones con `spring()` y damping ratios - `ButtonGroupDefaults.connectedShapes()` para botones unidos ### Refactor de Componentes **Dialog.kt:** - Parámetro `confirmButton` personalizable - Mejor separación de responsabilidades **PlayerMenu.kt:** - Nuevo `SleepTimerDialog` expresivo - Visualización mejorada de tiempos **Player Components Cleanup:** - Eliminado whitespace redundante - Limpieza de imports no utilizados - Mejor mantenibilidad del código ### Nuevas Preferencias ```kotlin val EnableHapticFeedbackKey = booleanPreferencesKey("enableHapticFeedback") val PlayerFullscreenKey = booleanPreferencesKey("player_fullscreen") val ProviderOrderKey = stringPreferencesKey("lyrics_provider_order") val CustomCanvasEnabledKey = booleanPreferencesKey("custom_canvas_enabled") val CustomCanvasApiUrlKey = stringPreferencesKey("custom_canvas_api_url") - Jun 20, 2026 3.0.4## 🚀 Release 3.0.4 *Versión centrada en **Canvas dinámico multi-proveedor, nuevo diseño del reproductor estilo Apple Music, widgets de pantalla de inicio y mejoras visuales inmersivas**.* --- ## ✨ Nuevas Funciones ### 🎨 Sistema Canvas Multi-Proveedor
More…
Se reemplaza el antiguo sistema de Canvas por una arquitectura modular capaz de obtener fondos animados desde múltiples proveedores. **Nuevos proveedores soportados:** | Proveedor | Tecnología | Descripción | |-----------|-------------|-------------| | **Apple Music** | HLS | Extracción de vídeos animados mediante streams HLS | | **Tidal** | MP4 | Obtención de vídeos mediante API pública | | **API interna** | Fallback | Compatibilidad con fuentes existentes | --- ### 🖼️ Nueva arquitectura Canvas El sistema Canvas ahora utiliza un modelo unificado y un resolvedor inteligente. **Archivos nuevos:** - `CanvasArtwork.kt` - Nuevo modelo estándar para artwork animado horizontal/vertical. - `CanvasArtworkResolver.kt` - Sistema encargado de seleccionar automáticamente la mejor fuente. - `AppleMusicCanvasProvider.kt` - Extracción de Canvas desde Apple Music. - `AppleMusicArtistBackgroundProvider.kt` - Obtención de fondos animados para artistas. - `TidalCanvasProvider.kt` - Integración con vídeos MP4 de Tidal. --- ### ⚙️ Características del nuevo sistema Canvas | Característica | Detalle | |----------------|---------| | **Multi-provider** | Selección automática entre Apple Music, API y Tidal | | **Prioridad configurable** | Orden inteligente de búsqueda | | **Validación avanzada** | Comprueba artista, álbum y título antes de aceptar resultados | | **Normalización metadata** | Limpieza de `feat.`, "Official Video" y caracteres innecesarios | | **Cache LRU** | Reduce consultas repetidas mediante memoria y disco | | **Soporte horizontal/vertical** | Adaptación para distintos formatos de vídeo | --- ## 🎬 Fondos dinámicos para artistas `ArtistScreen` ahora puede mostrar vídeos personalizados relacionados con el artista. **Características:** - Fondos animados detrás del contenido. - Reproducción mediante `CanvasArtworkPlayer`. - Zoom dinámico. - Overlay translúcido para mantener legibilidad. - Obtención automática basada en nombre del artista. --- # 🎵 Nuevo diseño del reproductor V8 (Apple Music Style) Se introduce una nueva variante del reproductor inspirada en Apple Music con diseño glassmorphism. --- ## 🌈 Player Design Style V8 Nuevo estilo disponible dentro de las preferencias de apariencia. **Características:** | Elemento | Descripción | |----------|-------------| | **Glass UI** | Componentes translúcidos con blur y bordes | | **Backdrop dinámico** | Fondo personalizado con degradados | | **Progress Track** | Barra de progreso estilo vidrio | | **Volume Slider** | Control integrado dentro del diseño | | **Next Up Preview** | Vista previa de siguiente canción | | **Footer Apple Music Style** | Controles inferiores renovados | --- ### 🆕 Nuevos componentes del reproductor **Archivos añadidos:** - `AppleDeviceSelector.kt` - Selector de dispositivos de audio. - `V8PlayerBackdrop` - Fondo dinámico con blur y gradientes. - `V8PlayerControlsContent` - Controles principales del reproductor. - `QueueCollapsedContentV8` - Controles inferiores cuando la cola está colapsada. - `GlassTrack` - Componente reutilizable para barras con efecto vidrio. --- ## 🔊 Selector de dispositivos de audio Nuevo selector para cambiar rápidamente la salida de audio. **Compatible con:** - Bluetooth. - Altavoces internos. - Dispositivos cableados. Incluye: - BottomSheet personalizado. - Lista dinámica de dispositivos. - Integración con AudioManager. --- # 🏠 Widget de pantalla de inicio Se añade un nuevo widget de reproducción usando Jetpack Glance. --- ## 📱 OpenTune Player Widget Nuevo widget interactivo para controlar la reproducción directamente desde el launcher. **Funciones:** - Play/Pause. - Siguiente canción. - Canción anterior. - Información del tema actual. - Barra de progreso. - Artwork dinámico. --- ## 🎨 Personalización del Widget Nueva pantalla de configuración con vista previa en tiempo real. **Opciones disponibles:** | Opción | Descripción | |--------|-------------| | **Modo Blur** | Fondo desenfocado usando RenderEffect (Android 12+) | | **Color dominante** | Extrae color desde artwork usando Palette API | | **Color sólido** | Fondo personalizado simple | | **Scrim** | Ajuste de opacidad del overlay | | **Corner Radius** | Personalización de esquinas | | **Progress Bar** | Mostrar u ocultar progreso | --- ## ⚙️ Arquitectura del Widget **Nuevos archivos:** - `OpenTunePlayerWidget.kt` - Implementación del widget Jetpack Glance. - `OpenTunePlayerWidgetReceiver.kt` - Receiver del widget. - `PlayerWidgetUpdater.kt` - Sincronización con reproducción. - `PlayerWidgetState.kt` - Estado y procesamiento de metadata. - `WidgetSettings.kt` - Configuración visual. - `WidgetPreferences.kt` - DataStore independiente del widget. --- ## 🔄 Integración con MusicService El servicio de música ahora actualiza automáticamente el widget. **Actualizaciones al cambiar:** - Canción. - Estado Play/Pause. - Artwork. - Progreso. --- # ✨ Mejoras de Animaciones Se agregan animaciones más naturales en controles del reproductor. **Mejoras:** - Spring animations. - Escalado al interactuar. - Mejor feedback táctil. - Seguimiento mediante `interactionSource`. Aplicado a estilos existentes: - V1 - V2 - V3 - V4 - V5 - V6 - V8 --- # 🎨 Recursos y Assets Nuevos iconos y mejoras visuales: **Añadidos:** - `airplay.xml` - `speaker.xml` - `favorite_filled.xml` - `favorite_outline.xml` **Actualizados:** - `queue_music.xml` - `lyrics.xml` --- # 🔧 Correcciones y Mantenimiento | Área | Mejora | |------|--------| | Canvas | Sustitución del sistema antiguo por arquitectura modular | | Player | Mejor manejo de fondos animados | | Metadata | Normalización mejorada para búsquedas | | Cache | Reducción de llamadas repetidas mediante LRU | | UI | Limpieza de imports y comentarios redundantes | | Apple Music Provider | Tokens actualizados para mantener compatibilidad | --- # 📦 Dependencias | Dependencia | Uso | |-------------|-----| | `androidx.glance:glance-appwidget` | Widgets de pantalla de inicio | | `androidx.glance:glance-material3` | Componentes Material 3 para widgets | --- # 🌍 Localización Nuevos textos añadidos: - Configuración del widget. - Modos de fondo. - Opciones visuales. - Selector de dispositivos. - Apple Music style. Idiomas afectados: - Inglés. - Español. --- # 🧠 Refactor Interno ## Canvas Migración de: ``` OpenTuneCanvas ``` a: ``` CanvasArtwork | ├── AppleMusicCanvasProvider ├── TidalCanvasProvider └── API Provider ``` --- ## Estado del reproductor Nuevo flujo: ``` MusicService ↓ PlayerWidgetUpdater ↓ PlayerWidgetState ↓ Jetpack Glance Widget ``` --- # 🔢 Versión - **versionCode:** `131` - **versionName:** `3.0.4` --- > 💡 Una release enfocada en convertir OpenTune en una experiencia más cercana a un reproductor premium moderno: **Canvas animado desde múltiples servicios, reproductor estilo Apple Music, widgets personalizados y una interfaz más inmersiva.** --- 🔗 **Full Changelog:** https://github.com/Arturo254/OpenTune/compare/3.0.3...3.0.4 - Jun 9, 2026 3.0.3## 🚀 Release 3.0.3 *Versión centrada en **Material 3 Expressive, mejoras de reproducción, sistema de descargas, autenticación InnerTube y optimizaciones visuales**.* --- ### ✨ Nuevas Funciones #### 🎵 MiniPlayer completamente rediseñado
More…
El MiniPlayer recibe una renovación completa utilizando Material 3 Expressive para ofrecer una experiencia más moderna, compacta e interactiva. **Características principales:** | Característica | Detalle | |----------------|---------| | **Nuevo diseño tipo píldora** | Contenedor compacto de 64dp usando `surfaceContainer` | | **Acceso rápido al artista** | Nuevo botón para abrir directamente el perfil del artista actual | | **Botón Favoritos** | Animaciones spring, escalado dinámico y estados visuales mejorados | | **Play/Pause expresivo** | Uso de `Cookie9Sided` y transiciones avanzadas con `AnimatedContent` | | **Indicador de carga** | Nuevo `CircularProgressIndicator` integrado | | **Animaciones fluidas** | Escalado, crossfade y cambios de estado más naturales | --- #### 🎶 Nueva experiencia para "New Releases" La pantalla de lanzamientos recientes evoluciona hacia una experiencia totalmente categorizada y visual. **Características:** - Clasificación automática de: - Álbumes - Singles - EPs - Hero card con estadísticas. - Carruseles horizontales independientes. - Headers expresivos con badges dinámicos. - Nuevos placeholders shimmer. - Estados Empty/Error completamente rediseñados. - Mejor relevancia para artistas favoritos. --- #### 🎤 Reconocimiento Musical Modernizado Se rediseña completamente la experiencia de reconocimiento musical. **Mejoras:** - Nuevo diseño Material 3 Expressive. - Layout adaptable para tablets y escritorio. - Mejor manejo de permisos y errores de grabación. - Nuevo flujo de resultados enriquecidos. - Botón de cancelación durante escucha. - Soporte para lanzamiento automático mediante intents. --- #### 📜 Letras más avanzadas y personalizables Se agregan nuevas capacidades de sincronización y efectos visuales. **Nuevas funciones:** | Función | Descripción | |----------|-------------| | **Lyrics Sync Offset** | Ajuste manual del tiempo de sincronización | | **Blur dinámico** | Desenfoque configurable para líneas inactivas | | **Karaoke mejorado** | Nuevos gradientes animados y efectos visuales | | **Romanización mejorada** | Gestión centralizada para japonés y coreano | | **Tipografía refinada** | Mejor legibilidad y jerarquía visual | --- #### 🎨 About Screen renovado La pantalla Acerca de adopta Material 3 Expressive y obtiene datos dinámicos desde GitHub. **Características:** - Carga automática de contribuidores desde GitHub API. - Estados de carga con shimmer. - Sistema de fallback offline. - Nuevas tarjetas de contribuidores. - Diseño visual expresivo con animaciones. --- ### 🔐 InnerTube y Reproducción #### Nuevo sistema PlaybackAuthState Se introduce un sistema avanzado para gestionar autenticación y reproducción. **Incluye:** - Cookies centralizadas. - VisitorData. - DataSyncId. - PoToken. - Reintentos automáticos ante errores de autenticación. - Mejor compatibilidad con clientes Web y TV. --- #### 🌐 Sistema de proxies rotativos Nueva infraestructura para mejorar confiabilidad y disponibilidad. **Características:** - Rotación automática de proxies. - Failover inteligente. - Cooldowns automáticos. - Soporte DNS-over-HTTPS. - Configuración manual de proxies. - Compatibilidad con listas públicas. --- ### 🎵 Mejoras de Audio #### Crossfade completamente optimizado Se reescribe gran parte del procesamiento de crossfade. **Mejoras técnicas:** - Buffers circulares optimizados. - Menor uso de memoria. - Curvas de transición más naturales: - Fade-In cuadrático. - Fade-Out exponencial/cosenoidal. - Sistema anti-clipping Soft Knee. - Calidad adaptativa según duración. --- ### 📥 Sistema de Descargas #### Nueva Download Queue Se añade una pantalla dedicada para la gestión de descargas. **Funciones disponibles:** - Ver descargas activas. - Pausar/Reanudar todas. - Cancelar individualmente. - Cancelar toda la cola. - Orden FIFO. - Estado reactivo en tiempo real. --- #### Notificaciones avanzadas Las descargas ahora ofrecen controles completos desde la notificación. **Acciones disponibles:** - Pause - Resume - Cancel - Cancel All **Mejoras:** - Muestra el nombre de la canción descargada. - Persistencia al pausar. - Navegación directa a Download Queue. --- ### 🎤 Letras Multi-Fuente Se amplían las fuentes disponibles para obtener letras. **Novedades:** - Integración de Kugou. - Mejor sistema de búsqueda multi-fuente. - Mayor tasa de coincidencias. - Mejor soporte para idiomas CJK. --- ### ⚙️ Sistema de Build y Versionado #### Integración avanzada con Git **Mejoras:** - `versionName` incluye hash Git. - Nuevo campo `BuildConfig.GIT_COMMIT`. - Fallback automático mediante GitHub API cuando Git local no está disponible. - Mejor trazabilidad de builds Nightly. --- ### 🔧 Correcciones | Área | Corrección | |--------|------------| | Related Songs | Consultas SQL ahora son determinísticas | | Quick Picks | Solucionadas desapariciones aleatorias | | Download Notifications | Persistencia y acciones corregidas | | Download Queue | Manejo seguro de valores nulos | | AOD | Corrección de fullscreen e immersive mode | | Lyrics | Corrección de espacios extra en idiomas CJK | | Changelog | Mejor manejo de Stable y Nightly | | BetterLyrics | Limpieza de formato y mantenimiento | --- ### 🧠 Refactor Interno #### Material 3 Expressive Migración masiva hacia componentes expresivos: - `HorizontalMultiBrowseCarousel` - `SquigglySlider` - `Cookie9Sided` - `AnimatedContent` - Nuevas Shapes expresivas - Spring Animations --- #### InnerTube Refactor profundo de: - Parsing de álbumes. - Parsing de búsquedas. - Playlists. - New Releases. - Modelos de thumbnails. - Gestión de autenticación. --- ### 🎨 UI/UX Mejoras | Componente | Mejora | |------------|--------| | MiniPlayer | Nuevo diseño tipo píldora | | FloatingNavigationToolbar | Indicador animado deslizante | | Crossfade Settings | Nuevo diálogo moderno | | NumberPicker | Mejor presentación visual | | New Releases | Hero card + carruseles | | Music Recognition | Diseño adaptativo y expresivo | | About Screen | Contribuidores dinámicos | | Lyrics | Blur, escalado y karaoke avanzado | --- ### 🌍 Localización **Nuevos strings añadidos:** - Descripciones de Crossfade. - Tooltips de Crossfade. - Categorías de New Releases. - Estados Empty/Error. - Download Queue. - Nightly Builds. - Nuevas preferencias AOD. --- ### 🤝 Pull Requests Integrados | PR | Autor | Descripción | |----|--------|-------------| | #644 | thankz173 | Corrección de consultas relacionadas y Quick Picks | | #632 | CiroZDP | Integración de Kugou para letras multi-fuente | | #631 | RajnishKMehta | Correcciones de notificaciones de descargas | | #624 | RajnishKMehta | Optimización de metadata y descargas | | #622 | RajnishKMehta | Corrección de texto LICENSE | | #618 | RajnishKMehta | Workflow CI/CD para APKs Debug | | #613 | RajnishKMehta | Mejoras en documentación y CI | --- ### 🔢 Versión - **versionCode:** `130` - **versionName:** `3.0.3` --- > 💡 Una release enfocada en **Material 3 Expressive, experiencia visual moderna, descargas avanzadas, autenticación robusta de YouTube Music y una reproducción más estable y fluida.** --- 🔗 **Full Changelog:** https://github.com/Arturo254/OpenTune/compare/3.0.2...3.0.3 - May 24, 2026 3.0.2## 🚀 Release 3.0.2 *Versión centrada en **Always On Display (AOD) completo, caché de thumbnails y estabilidad del reproductor**.* --- ### ✨ Nuevas Funciones #### 📱 Always On Display (AOD) – Sistema completo
More…
Se introduce una pantalla "Always On Display" que mantiene la pantalla encendida mientras el reproductor está activo, ideal para montar el dispositivo en el auto o usar como reloj musical. **Archivos nuevos:** - `AlwaysOnDisplayScreen.kt` – Pantalla principal AOD con 5 estilos visuales - `AlwaysOnDisplaySettings.kt` – Pantalla de configuración completa - `fullscreen.xml` – Icono vectorial para modo inmersivo **Archivos modificados:** - `PlayerMenu.kt` – Nuevo entry point para AOD en el bottom sheet - `NavigationBuilder.kt` – Nuevo route `always_on_display` como Dialog fullscreen - `AppearanceSettings.kt` – Preferencias de estilo, forma, oscuridad y tamaño - `PreferenceKeys.kt` – Nuevas keys: `AodStyleKey`, `AodShapeKey`, `AodDarknessKey`, `AodArtworkSizeKey`, `AodFullscreenKey`, `AodAutoActivationKey` **Características del AOD:** | Característica | Detalle | |----------------|---------| | **5 estilos** | `CLASSIC` (clásico), `BACKGROUND` (fondo con blur), `MINIMAL` (mínimo), `LARGE` (artwork grande), `SPOTLIGHT` (destacado) | | **8 formas de artwork** | Rounded, Circle, Squircle, Diamond, Hexagon, Star, Arch, Petal (usando `GenericShape`) | | **Efecto Cloudy** | Blur + viñeta dual (exterior e interior) para fondos artísticos | | **Activación automática** | Timer por inactividad: Never, 15s, 30s, 1m, 2m (integración con `Player.kt`) | | **Modo inmersivo** | Oculta status bar y navigation bar usando `WindowInsetsControllerCompat` | | **Soporte landscape** | Layouts separados para orientación horizontal en todos los estilos | | **Controles animados** | `MinimalAnimatedButton` y `AnimatedButton` con feedback visual al presionar | | **Marquee text** | Título y artista con scroll automático si exceden ancho | --- #### 🖼️ Sistema de Thumbnails de alta calidad Se implementa un sistema de caché dual (memoria + disco) para thumbnails de YouTube, mejorando drásticamente la experiencia visual. **Archivos modificados:** - `YouTubeUtils.kt` – Nueva función `getHighQualityThumbnail()` y `resize()` mejorado - `Thumbnail.kt` – Integración del preloading de thumbnails de alta resolución - `App.kt` – Inicialización de `ThumbnailCache` al arrancar la app **Nuevo archivo:** - `ThumbnailCache.kt` – Objeto con caché LruCache en memoria y caché persistente en disco (50MB límite) **Detalles técnicos:** - Soporte de calidades: `maxres` (1080px), `sd` (640px), `hq` (480px), `mq` (320px), `default` (120px) - Redimensionamiento automático según resolución solicitada - Limpieza automática del disco cuando se supera el límite - Preloading en `CanvasArtworkPlayer` para animaciones fluidas --- #### 🎨 Canvas Artwork refactorizado El sistema de Canvas Artwork se rediseña completamente para ser más modular, cacheable y eficiente. **Archivos nuevos:** - `CanvasArtworkResolver.kt` – Lógica de resolución de artwork por título/artista - `CanvasArtworkPlayer.kt` – Reproductor de canvas extraído y modularizado - `CanvasArtwork.kt` – Data model para URLs estáticas, animadas o de video **Archivos modificados:** - `CanvasArtworkPlaybackCache.kt` – Convertido a LRU cache con persistencia JSON y trimming automático - `Player.kt` – Integración del nuevo sistema de canvas **Mejoras:** - Normalización inteligente de strings (eliminación de caracteres especiales, limpieza de feat., etc.) - Persistencia en disco para no re-descargar artwork entre sesiones - Soporte para artwork estático, GIF animado y video --- ### 🔧 Correcciones | Archivo | Corrección | |---------|-------------| | `UpdateScreen.kt` | URL de nightly builds actualizada de GitHub releases a Cloudflare R2 (`pub-2218e6bbd5b948e1b5d882cf4d92086d.r2.dev`) | | `Player.kt` | Queue sheet ahora tappable y visible cuando está colapsado | | `PlayerMenu.kt` | Bottom sheet ahora soporta scrolling + layout unificado | | `DiscordLoginScreen.kt` | `setWebContentsDebuggingEnabled` restringido solo a `BuildConfig.DEBUG` | | `AlwaysOnDisplayScreen.kt` | Supresión de lint `ConfigurationScreenWidthHeight` + mejor manejo de duración `C.TIME_UNSET` | | `makeTimeString` (utils) | Manejo correcto de `C.TIME_UNSET` y duraciones negativas | --- ### 🧠 Refactor Interno #### Validación de duración simplificada Se reemplazan comprobaciones redundantes de `C.TIME_UNSET` por una lógica más limpia basada en `duration > 0L`. **Archivos afectados:** - `AlwaysOnDisplayScreen.kt` - `Player.kt` - `PlayerMenu.kt` #### Importaciones y código muerto - Limpieza de imports no utilizados - Eliminación de código comentado y boilerplate - Estandarización de indentación en `NavigationBuilder.kt` #### Anotaciones experimentales - `@OptIn(ExperimentalMaterial3Api::class)` – Para `SquigglySlider` - `@file:OptIn(ExperimentalMaterial3ExpressiveApi::class)` – Para nuevas shapes M3 --- ### 🎨 UI/UX Mejoras | Componente | Mejora | |------------|--------| | `PlayerMenu.kt` | Card de volumen con mute/unmute toggle + slider sincronizado | | `AlwaysOnDisplayScreen.kt` | Reemplazo de `Slider` estándar por `SquigglySlider` (expresivo) | | `Thumbnail.kt` | Icono por defecto cambiado a `opentune_monochrome` | --- ### 🌍 Localización **Archivos modificados:** - `values/strings.xml` – Strings en inglés para AOD (estilos, formas, tiempos, modo inmersivo) - `values-es/strings.xml` – Traducción completa al español - `values-hi/strings.xml` – Traducción expandida al hindi (contribución @Gorupa) **Nuevos strings incluidos:** - `aod_style_*` (5 estilos) - `aod_shape_*` (8 formas) - `aod_auto_activation_*` (Never, 15s, 30s, 1m, 2m) - `aod_immersive_mode` y descripción - `aod_background_darkness` y `aod_artwork_size` --- ### ⚙️ Dependencias | Cambio | Detalle | |--------|---------| | **Nueva dependencia** | `me.saket.squiggles:squiggles-slider` – SquigglySlider expresivo | | **Nota** | No se actualizaron AGP, Kotlin, Compose, Media3, Ktor en esta versión | --- ### 🔢 Versión - **versionCode:** `129` *(inferido de changelog 3.0.1 → 3.0.2)* - **versionName:** `3.0.2` --- > 💡 Una release centrada en **Always On Display premium**, rendimiento visual con caché de thumbnails y estabilidad general del reproductor. --- ### 📦 Pull Requests (What's Changed) | PR | Autor | Archivos afectados | Descripción | |----|-------|-------------------|--------------| | [#548](https://github.com/Arturo254/OpenTune/pull/548) | @Gorupa | `values-hi/strings.xml` | Hindi strings expandido | | [#540](https://github.com/Arturo254/OpenTune/pull/540) | @Gorupa | `Player.kt` | Fix: queue sheet no era tappable ni visible cuando colapsado | | [#588](https://github.com/Arturo254/OpenTune/pull/588) | @Aeshp | `PlayerMenu.kt` | Fix: scrolling habilitado y layout unificado en bottom sheet | | [#597](https://github.com/Arturo254/OpenTune/pull/597) | @jim-daf | `DiscordLoginScreen.kt` | Gate `setWebContentsDebuggingEnabled` a `BuildConfig.DEBUG` | ### 🎉 New Contributors - **@Aeshp** – primera contribución en [#588](https://github.com/Arturo254/OpenTune/pull/588) --- ### 📂 Listado completo de archivos modificados ``` app/src/main/java/com/arturo254/opentune/ ├── ui/screens/ │ ├── AlwaysOnDisplayScreen.kt (nuevo) │ ├── AlwaysOnDisplaySettings.kt (nuevo) │ ├── UpdateScreen.kt (modificado) │ └── DiscordLoginScreen.kt (modificado) ├── ui/components/ │ ├── PlayerMenu.kt (modificado) │ ├── Thumbnail.kt (modificado) │ └── Player.kt (modificado) ├── ui/navigation/ │ └── NavigationBuilder.kt (modificado) ├── ui/settings/ │ ├── AppearanceSettings.kt (modificado) │ └── PreferenceKeys.kt (modificado) ├── utils/ │ ├── YouTubeUtils.kt (modificado) │ ├── ThumbnailCache.kt (nuevo) │ └── makeTimeString (modificado) ├── canvas/ │ ├── CanvasArtworkResolver.kt (nuevo) │ ├── CanvasArtworkPlayer.kt (nuevo) │ ├── CanvasArtwork.kt (nuevo) │ └── CanvasArtworkPlaybackCache.kt (refactorizado) ├── App.kt (modificado) └── res/ ├── drawable/fullscreen.xml (nuevo) ├── values/strings.xml (modificado) ├── values-es/strings.xml (modificado) └── values-hi/strings.xml (modificado) ``` --- 🔗 [Full Changelog](https://github.com/Arturo254/OpenTune/compare/3.0.1...3.0.2) - Apr 19, 2026 3.0.1## 🚀 Release 3.0.1 --- ## ✨ Nuevas Funciones - 🎚️ Nuevo **PlayerSlider** completamente personalizado con renderizado en `Canvas`, soporte para RTL y ticks. - 🎤 Sistema de **letras avanzado** con múltiples estilos de animación: - Karaoke - Apple (palabra por palabra)
More…
- Fade, Glow y Slide - 📤 Función de **compartir letras** como texto o imagen con personalización avanzada. - 🌫️ Nuevo estilo visual **“Liquid Glass”** para la barra de navegación (Beta). - 🎨 Presets visuales y estilos tipo glass para imágenes de letras. - 🔤 Romanización automática para letras en japonés y coreano. - 📄 Soporte para formato **TTML** y sincronización por palabra. --- ## 🎧 Mejoras en el Reproductor - Reproductor con controles más precisos y visuales más expresivos. - Nuevo indicador `CircularWavyProgressIndicator`. - Mejor sincronización y centrado automático en letras. - Feedback visual al reactivar auto-scroll. --- ## 🧠 Mejoras Internas - Refactor completo del motor de letras para mejor rendimiento y escalabilidad. - Nueva lógica centralizada para resolución de clientes de streaming (YouTube). - Mejor manejo de headers (`User-Agent`, `Origin`, `Referer`) en requests. - Código más limpio, modular y mantenible. --- ## ⚙️ Dependencias Actualizadas - AGP → `9.1.1` - Kotlin → `2.3.20` - Compose → `1.11.0-beta02` - Material3 → `1.5.0-alpha17` - Media3 → `1.10.0` - Ktor → `3.4.2` - Actualización del extractor de YouTube --- ## 🌍 Localización - Nuevos strings añadidos (ej. *Liquid Glass Navbar*) - Mejoras en traducciones y consistencia general --- ## 🧹 Limpieza y Refactor - Limpieza menor de código y formateo - Eliminación de redundancias - Mejora de type-safety en múltiples componentes --- ## 🔧 Otros Cambios - Actualización de `FileProvider` a `${applicationId}.fileprovider` - Limpieza de `file_paths.xml` - Mejoras menores en ViewModels y recursos --- ## 🔢 Versión - `versionCode`: 128 - `versionName`: **3.0.1** --- 💿 Una actualización centrada en **potencia, personalización y experiencia visual avanzada**. ## What's Changed * Actions updated to Node.js 24 by @okibcn in https://github.com/Arturo254/OpenTune/pull/468 * values-hi/strings.xml by @Gorupa in https://github.com/Arturo254/OpenTune/pull/536 * Update NavigationTile.kt by @Gorupa in https://github.com/Arturo254/OpenTune/pull/535 * Update PlayerSlider.kt by @Gorupa in https://github.com/Arturo254/OpenTune/pull/534 * Update ThumbnailCornerRadiusSelector.kt by @Gorupa in https://github.com/Arturo254/OpenTune/pull/533 * Update Items.kt by @Gorupa in https://github.com/Arturo254/OpenTune/pull/532 * Update AboutScreen.kt by @Gorupa in https://github.com/Arturo254/OpenTune/pull/531 * Update Lyrics.kt by @Gorupa in https://github.com/Arturo254/OpenTune/pull/530 ## New Contributors * @Gorupa made their first contribution in https://github.com/Arturo254/OpenTune/pull/536 **Full Changelog**: https://github.com/Arturo254/OpenTune/compare/3.0.0...3.0.1 - Mar 30, 2026 3.0.03.0.0 feat: rediseño masivo de la interfaz y adición de múltiples nuevas funciones Este commit introduce una actualización a gran escala en toda la aplicación, centrada en ampliar significativamente la funcionalidad y mejorar la experiencia general del usuario. Se añadieron numerosas nuevas funciones, mejoras visuales y optimizaciones de comportamiento en distintas áreas del proyecto. La actualización incluye la incorporación de nuevas capacidades del reproductor, mejoras en la interacción con letras sincronizadas, opciones avanzadas de personalización, patrones de navegación modernizados, ampliación de ajustes de apariencia y múltiples componentes de interfaz completamente nuevos diseñados para ofrecer una experiencia más dinámica y expresiva. Además de las nuevas funciones, varias pantallas y flujos existentes fueron rediseñados para adaptarse a las nuevas características, logrando una mejor usabilidad, layouts más claros y un comportamiento más consistente en toda la aplicación. Muchos componentes internos fueron refactorizados o reemplazados para facilitar la escalabilidad futura y simplificar el mantenimiento del código.
More…
En conjunto, este commit representa una evolución importante del proyecto, incorporando una gran cantidad de nuevas funciones y estableciendo una base sólida para futuras mejoras y desarrollo continuo. - # OpenTune 2.0.12 <div align="center"> <img src="https://github.com/user-attachments/assets/44f9d391-2615-4c43-87e6-59702586e0fd" alt="Logo de OpenTune" width="200"> </div> <div align="center"> <a href="https://github.com/Arturo254/OpenTune/releases/latest"> <img src="https://img.shields.io/github/v/release/Arturo254/OpenTune?label=Version&color=blue" alt="Última Versión"> </a>
More…
<a href="https://github.com/Arturo254/OpenTune/blob/main/LICENSE"> <img src="https://img.shields.io/github/license/Arturo254/OpenTune?color=green" alt="Licencia"> </a> <a href="https://github.com/Arturo254/OpenTune/pulls"> <img src="https://img.shields.io/badge/PRs-Welcome-brightgreen.svg" alt="PRs Welcome"> </a> <a href="https://github.com/Arturo254/OpenTune/stargazers"> <img src="https://img.shields.io/github/stars/Arturo254/OpenTune?style=social" alt="GitHub Stars"> </a> <a href="https://github.com/Arturo254/OpenTune/network/members"> <img src="https://img.shields.io/github/forks/Arturo254/OpenTune?style=social" alt="GitHub Forks"> </a> <a href="https://github.com/Arturo254/OpenTune/issues"> <img src="https://img.shields.io/github/issues/Arturo254/OpenTune" alt="Issues"> </a> </div> ## 📌 Notas de la Versión 2.0.12 --- ## 🆕 New ### 🎶 Apple Music–style lyrics blur * Nuevo efecto de **desenfoque dinámico** para letras sincronizadas, inspirado en Apple Music. * Preferencia dedicada `apple_music_lyrics_blur` para activar/desactivar el efecto. * El blur se aplica solo a líneas **no activas**, manteniendo el foco visual en la línea actual. * El efecto se desactiva automáticamente durante: * Modo selección de letras. * Auto-scroll deshabilitado. * Transiciones suaves de blur, alpha y escala mediante animaciones reactivas. --- ### 🎨 Nuevo estilo de fondo Apple Music para el reproductor * Fondo dinámico con **thumbnail difuminado** y máscara de gradiente vertical. * Mejora la legibilidad del contenido sin depender de blobs de color. * Integración completa con el sistema de estilos del reproductor. --- ### ⏱️ Sleep Timer integrado directamente en el reproductor * El temporizador de apagado ahora forma parte del **menú del reproductor**. * Nuevo diálogo de configuración: * Duraciones predefinidas. * Opción *Final de la canción*. * Estado activo visible en el menú con: * Cuenta regresiva en tiempo real. * Indicador *End of song* cuando aplica. --- ## ✨ Improved ### 📝 Refactor completo del renderizado de letras * Extracción de la lógica de cada línea a un nuevo componente **`LyricsLine`**. * Código más limpio, reutilizable y fácil de mantener. * Animaciones de línea activa refinadas: * Glow más eficiente. * Pulso más estable y menos costoso. * Espaciado, alineación y jerarquía visual estandarizados. --- ### ⏳ Mejor feedback visual del Sleep Timer * Indicador circular de progreso alrededor del icono cuando está activo. * Animaciones suaves de: * Progreso. * Color. * Pulso al acercarse al final. * Cambio dinámico de color según el tiempo restante: * Primary → Secondary → Tertiary → Error. * Texto porcentual y etiqueta *“¡Pronto!”* en estados críticos. * Al tocar el icono con el temporizador activo, ahora se **cancela directamente**. --- ### 🖼️ Manejo optimizado de thumbnails * `Thumbnail.kt` refactorizado para: * Mejor rendimiento. * Consistencia entre estilos de fondo. * El radio de esquina ahora se obtiene desde preferencias del usuario. * Carga reactiva del valor guardado al inicializar el componente. --- ## 🔄 Changed ### 🧩 Simplificación del diseño del reproductor * Eliminada la lógica del **Extra Button configurable**. * El temporizador sustituye completamente este comportamiento. * Layout de botones secundarios reorganizado para mejor centrado y claridad visual. --- ### 🌐 Actualización y mejora de traducciones * Nuevas y refinadas cadenas en múltiples idiomas: * Francés, Turco, Árabe, Chino, Checo, Español y Portugués. * Soporte textual para: * Sleep Timer avanzado. * Advertencias de compatibilidad con streams en vivo. * Herramientas de diagnóstico (reset de VISITOR_DATA). * Ajustes contextuales en francés: * “Humeur” → “Ambiance” * “Aimés” → “Favoris” --- ### 🖌️ Modernización de selectores visuales * El selector de radio de esquina del thumbnail ahora usa **ModalBottomSheet**. * Diseño Material 3 Expressive: * Drag handle. * Jerarquía tipográfica mejorada. * Fondo `surfaceContainerLow`. * Vista previa dinámica con el artwork actual. --- ## 🛠️ Technical ### 🔐 Refactor profundo de la desencriptación de streams * Migración completa a **MetroExtractor**. * Lógica más robusta para: * `signatureCipher` * Parámetro `n` en URLs. * Soporte para desencriptación por lotes. * Caché thread-safe de información del reproductor. * Mejor tracking de reproducción y compatibilidad con historial de YouTube. * Reordenamiento de clientes fallback para mayor estabilidad. --- ### 🔄 Reset de Visitor Data más seguro * El reset de `VISITOR_DATA` ahora fuerza un **reinicio completo de la app**. * Garantiza consistencia total tras el cambio de identidad. * Logging mejorado para detectar fallos. --- ## 📦 Dependencies * `material3` actualizado (alpha12 → alpha13 según commit). * Migración completa del extractor a **MetroExtractor**. * Nuevas reglas Proguard para Netty, Reactor, Wire y dependencias relacionadas. * Exclusiones de recursos `META-INF` para evitar conflictos de build. --- ## 🧹 Removed ### ❌ Limpieza de código y preferencias * Eliminadas claves de preferencias no usadas: * Extra buttons. * URLs de foto de cuenta. * Corrección de escapes incorrectos en strings (`\'`). --- ## 🔄 Changed ### 📂 Actualización del FileProvider * Se cambió la autoridad del `FileProvider` a **`${applicationId}.fileprovider`**, alineándose con la convención estándar de Android. * Evita inconsistencias al construir URIs y posibles errores al compartir archivos. * Cualquier referencia previa a la autoridad antigua fue ajustada para mantener compatibilidad. Archivos afectados: ``` AndroidManifest.xml ``` --- ## 🧹 Improved ### 🧾 Limpieza de `file_paths.xml` * Eliminados comentarios y líneas en blanco innecesarias. * Se mantiene intacta la configuración funcional de rutas: * `downloads` * `external_files` * `cache` * `files` * El archivo queda más claro y fácil de mantener sin cambios de comportamiento. Archivo afectado: ``` app/src/main/res/xml/file_paths.xml ``` --- ### 📊 **Estadísticas de la Versión:** - 🔄 Lanzada:  - 📦 Descargas:  - 🛠️ Commits:  --- ## 🤝 **Colaboración de Código Abierto** OpenTune es un proyecto de código abierto y siempre estamos buscando colaboradores para mejorar el proyecto. ¡Tu contribución es bienvenida! ### 🛠️ **Cómo Contribuir:** 1. **Haz un fork del repositorio**: Clona el repositorio para trabajar en mejoras. 2. **Envía pull requests**: Una vez que hayas realizado tus cambios, envía un pull request para que podamos revisar y fusionar tus contribuciones. 3. **Explora y mejora el código fuente**: Si encuentras algún error o tienes una idea para mejorar el proyecto, ¡no dudes en compartirla! --- ## 📄 **Licencia** Este proyecto está bajo la licencia MIT y GPL 3 --- ## 📝 **Registro de Cambios** **Full Changelog**: https://github.com/Arturo254/OpenTune/compare/2.0.11...2.0.12 --- <div align="center"> <img src="https://img.shields.io/badge/Hecho%20con-%E2%9D%A4%EF%B8%8F-red.svg" alt="Hecho con amor"> <br> <em>OpenTune: Tu música. Tu ritmo. Tu control.</em> </div>