- Remove DeviceRegistry.java (dashboard integration)
- Remove VPS IP from build.gradle
- Remove personal Gitea token from UpdateManager
- Add configurable UPDATE_CHECK_URL for updates
- Clean README to be generic and PR-ready
- Clean update manifests
- Remove Docker files and .env from repo
- PlayerActivity: Referer vuelve a ser channelUrl (URL específica del canal)
- StreamUrlResolver: Vuelve a crear su propio cliente con Google DNS
- Eliminados cambios problemáticos de SSL trust-all y múltiples DNS
- Mantenidos solo los cambios necesarios: streamtp10.com en lugar de streamtpcloud.com
Esto debería hacer que los streams vuelvan a funcionar como en v10.1.7
- StreamUrlResolver ya no muestra HTML crudo en mensajes de error
- Agregada validación para detectar respuestas comprimidas/binarias
- Mejorados mensajes de error para ser más claros y sin caracteres raros
- Agregados más patrones de extracción de URLs
- Eliminado Accept-Encoding para evitar respuestas comprimidas
- Corregido PlayerActivity para usar NetworkUtils con 4 servidores DNS
- Agregado soporte para certificados SSL no válidos (evita MITM de ISP)
- Actualizados headers Referer y Origin a streamtp10.com
- Mejorado StreamUrlResolver con múltiples patrones de extracción
- Aumentados timeouts de red a 20-30 segundos
- Agregado manejo de errores 401/403/404 específicos
- Remove DNSSetter.java (System.setProperty doesn't affect Android DNS)
- Update NetworkUtils with 4 DNS over HTTPS providers:
* Google DNS (8.8.8.8) - Primary
* Cloudflare (1.1.1.1) - Secondary
* AdGuard (94.140.14.14) - Tertiary
* Quad9 (9.9.9.9) - Quaternary
- Update DeviceRegistry to use NetworkUtils client
- Update UpdateManager to use NetworkUtils client
- Remove DNSSetter call from PlayerActivity
This ensures the app works even when ISPs block specific DNS servers.
- Update all channel URLs and event endpoint to streamtp10.com
- Create NetworkUtils for centralized OkHttpClient configuration
- Implement DNS fallback: Google (Primary) -> AdGuard (Secondary) -> System (Tertiary)
- Migrate EventRepository to use NetworkUtils client instead of HttpURLConnection
- Fix Referer header in StreamUrlResolver
- Enable fadeScrollbars=false in RecyclerView
- Improve visibility of scrollbar
fix: Prevent navigation focus escape at end of list
- Implement custom LinearLayoutManager to intercept focus search
- Block FOCUS_DOWN action at the last item
- Remove legacy OnKeyListener and OnScrollListener
Problemas corregidos:
1. Scroll Listener Corregido (último evento cortado)
- Cambiado de findFirstVisibleItemPosition() a findLastCompletelyVisibleItemPosition()
- Ahora el scroll solo se detiene cuando el último elemento está completamente visible
- Antes: el último evento aparecía solo a la mitad
2. Barra de Scroll Más Visible
- Opacidad aumentada de #4DFFFFFF (30%) a #CCFFFFFF (80%)
- Ancho de barra: 8dp (antes no definido)
- Estilo cambiado de outsideOverlay a insideInset
- scrollbarFadeDuration="0" para siempre visible
- Radio de esquinas: 4dp (antes 2dp)
3. URL Única (eliminar bloqueos de ISP)
- Eliminado sistema de fallback múltiples URLs
- Ahora usa solo: https://streamtp10.com/eventos.json
- Eliminado KEY_WORKING_URL y lógica de fallback
- Código más simple y eficiente
Archivos modificados:
- app/src/main/java/com/streamplayer/EventRepository.java (simplificado)
- app/src/main/java/com/streamplayer/MainActivity.java (scroll fix)
- app/src/main/res/drawable/scrollbar_vertical.xml (más visible)
- app/src/main/res/layout/activity_main.xml (scrollbar config)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cambios implementados:
1. Botón de Actualización Más Visible (para control remoto)
- Nuevo archivo: btn_refresh_selector.xml con estados de foco
- Color ámbar brillante (#FFC107) cuando está enfocado
- Borde grueso (4dp) para mejor visibilidad
2. Prevención de Navegación Entre Secciones
- Modificado: MainActivity.java showEvents()
- Agregado OnScrollListener que detiene scroll al final de eventos
- Previene paso accidental a sección de canales
3. Barra de Indicador de Scroll
- Nuevo archivo: scrollbar_vertical.xml (drawable)
- Modificado: activity_main.xml con atributos de scrollbar
- Barra visual derecha como indicador de posición
Archivos modificados:
- app/src/main/java/com/streamplayer/MainActivity.java
- app/src/main/res/layout/activity_main.xml
- app/src/main/res/values/colors.xml
Archivos nuevos:
- app/src/main/res/drawable/btn_refresh_selector.xml
- app/src/main/res/drawable/scrollbar_vertical.xml
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Agregar sistema de fallback con múltiples URLs (streamtpcloud.com, streamtp10.com, streamtpmedia.com)
- Implementar seguimiento automático de redirecciones HTTP (301, 302, 303, 307, 308)
- Guardar última URL exitosa en SharedPreferences para optimizar futuras peticiones
- Corregir error "Unable to resolve host 'streamtpcloud.com'" cuando el dominio cambia
Resuelve issue donde los eventos no cargaban debido a cambios en el dominio del servidor.
La app ahora se adapta automáticamente sin necesidad de actualización.
## Cambios realizados
- Migración completa de ExoPlayer 2.x a AndroidX Media3 1.5.0
- Actualización de dependencias: media3-exoplayer, media3-ui, media3-session, etc.
- Actualización de imports en PlayerActivity.java
- Actualización del namespace de PlayerView en activity_player.xml
- Incremento de versionCode a 100100 y versionName a 10.1.0
- Actualización de compileSdk y targetSdk a 35 para compatibilidad
- Soporte mejorado para Android TV/Leanback
- Preparación para MediaSession integrado
## Testing
- Compilación exitosa sin errores
- APK generado: StreamPlayer-v10.1.0-Media3-debug.apk
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated EventRepository to point to streamtpcloud.com/eventos.json
- Updated ChannelRepository URLs to streamtpcloud.com
- Updated PlayerActivity Origin header
- Bumped version to 10.0.2
- Fixed: Value <! DOCTYPE cannot be converted to JSONArray in EventRepository
- Fixed: Added HTML validation in UpdateManager and DeviceRegistry
- Fixed: Improved HTTP error handling in StreamUrlResolver
- Improved: Error messages in PlayerActivity
- Bumped version to 9.4.3
- Incremented version to 9.4.2 (versionCode: 94200)
- Added custom AlertDialog theme with white text styling
- Enhanced visual consistency for all dialog components
- Improved theme overlay for better readability
- Applied custom styling to update and blocked dialogs
- Better contrast and visual hierarchy in dialogs
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Incremented version to 9.4.1 (versionCode: 94100)
- Added keep screen on functionality during video playback
- Implemented device deletion in dashboard with confirmation
- Enhanced device management with delete capability
- Improved user experience during media playback
- Better device lifecycle management in dashboard
- Added confirmation dialog for device deletion
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Incremented version to 9.2.0 (versionCode: 92000)
- Simplified update dialog buttons: "Actualizar ahora" → "Actualizar"
- Changed "Cerrar aplicación" to "Salir" for better UX
- Maintained security and device management features
- Improved user interface text for better user experience
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Incremented versionCode to 91020 and versionName to 9.1.2
- APK built with Device Registry URL pointing to public IP
- Fixed localhost issue for remote device registration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement DeviceRegistry for remote device management
- Add dashboard for device tracking and blocking
- Remote device blocking capability with admin control
- Support for device aliasing and notes
- Enhanced device management interface
- Dashboard with real-time device status
- Configurable registry URL in build config
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement UpdateManager to check Gitea releases for new versions
- Add update dialogs with mandatory/optional update support
- Integrate DownloadManager for APK downloads
- Add FileProvider configuration for app installation
- Support update-manifest.json for version control enforcement
- Add comprehensive update strings and error handling
- Include gradlew executable permissions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Android TV Enhancements:
- SectionAdapter.java: New section-based content organization
- Enhanced MainActivity with improved section management
- Optimized ChannelAdapter for better TV navigation
- Modernized activity_main.xml with section layout
- Professional color scheme for Android TV
- Updated strings for better TV experience
New UI Components:
- bg_section_indicator.xml: Visual section indicators
- item_section.xml: Section-based layout structure
- color/**: State-aware colors for TV focus states
- Enhanced focus management for D-pad navigation
Technical Improvements:
- Better memory management with section-based loading
- Improved RecyclerView performance
- Enhanced visual feedback for TV remote control
- Professional color palette optimized for TV screens
- Consistent design language throughout app
All v8.0 features maintained:
- Audio background fix (onStop() lifecycle)
- Real-time events with Argentina timezone
- Alphabetical channel sorting
- DNS bypass for global access
- Tab navigation (Channels/Events)
- Complete Android TV optimization
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Critical Fix:
- Fixed audio continuing to play when leaving the app
- PlayerActivity now properly manages ExoPlayer lifecycle
- No more background audio when switching to other apps
Lifecycle Management:
- onStop(): Releases ExoPlayer when app goes to background
- onStart(): Reloads stream only if player is null (prevents duplicates)
- onDestroy(): Final cleanup of player resources
- Proper memory management prevents leaks
Android TV Integration:
- Perfect multitasking behavior for TV environment
- Clean switching between streaming apps (YouTube, Netflix, etc.)
- No audio interference when navigating Android TV interface
- Stream resumes automatically when returning to app
Technical Details:
- Dual release points: onStop() and onDestroy() for safety
- Smart reconstruction: Only reload when necessary
- Memory safe: No ExoPlayer leaks or resource issues
- TV optimized: Seamless integration with Android TV ecosystem
User Experience:
- Background audio completely stopped when leaving app
- Clean transitions between different streaming services
- Automatic stream resumption when returning to StreamPlayer
- Professional Android TV behavior
All existing features maintained:
- Tab interface with visible focus (Channels/Events)
- Real-time events with Argentina timezone
- Alphabetical channel sorting
- DNS bypass for global access
- TV-optimized navigation and UI
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major Features:
- Dual tab interface (Channels and Events) with visible focus
- Real-time event status calculation (Live, Upcoming, Finished)
- Smart caching system for events (24-hour cache)
- Argentina timezone support (America/Argentina/Buenos_Aires)
UI/TV Improvements:
- Focusable tabs with bg_tab_selector for D-pad navigation
- Visual feedback with highlighted borders on focused tabs
- Consistent design between tabs and content cards
- Enhanced TV navigation experience
Real-Time Event System:
- EventRepository: Centralized event management with 24h cache
- EventAdapter: Optimized RecyclerView for event listings
- EventItem: Structured data model for events
- Dynamic status calculation (remaining time, live duration, completion)
- Automatic link normalization to global2.php
Technical Implementation:
- activity_main.xml: Complete dual-tab layout
- item_event.xml: Dedicated event item layout with RecyclerView
- bg_tab_selector.xml: Tab states (selected, focused, pressed)
- MainActivity.java: Tab switching and event management
- Automatic URL processing for seamless PlayerActivity integration
Time Zone Features:
- Argentina local time (America/Argentina/Buenos_Aires)
- Real-time status updates without page refresh
- "En Xh Ym" for upcoming events
- "En vivo durante 2h" status for live events
- "Finalizado" status for completed events
Solutions:
- Fixed web page "En vivo" not updating issue
- Provides always-current event status in app
- Direct event-to-player navigation without manual intervention
- Improved TV navigation with clear visual feedback
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Alphabetical Sorting Features:
- ChannelRepository updated with alphabetical sorting
- ChannelAdapter optimized for sorted display
- Channel focus and selection improvements
- Added arrays.xml for channel categories and sorting
- Enhanced UI components for TV navigation
Code Changes:
- ChannelRepository: addSortChannels() method
- ChannelAdapter: optimized for alphabetical display
- AndroidManifest.xml: updated for sorting features
- item_channel.xml: improved focus states
- bg_channel_item_selector.xml: enhanced visual feedback
TV Navigation Improvements:
- Consistent alphabetical order (A-Z)
- Better focus management for D-Pad navigation
- Enhanced visual indicators for selected channels
- Improved readability on large screens
- Quick channel location with remote control
This improves the Android TV user experience by making channel discovery faster and more intuitive.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
DNS Bypass Features:
- Multiple DNS providers (Google, Cloudflare, OpenDNS, Quad9)
- Geographic restriction bypass
- Smart DNS rotation and fallback
- Enhanced build.gradle with DNS libraries
- DNS permissions in AndroidManifest.xml
- TV-optimized DNS configuration
- Streaming geo-block circumvention
- Regional content access
Resolved merge conflicts:
- Combined banner design features (antialias + 12dp corners)
- Merged TV and mobile DNS configurations
- Unified streaming capabilities
This merges the DNS bypass functionality from mobile development into the Android TV main branch for v5.0 release.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
DNS Features:
- Multiple DNS providers (Google, Cloudflare, OpenDNS)
- Automatic DNS rotation for bypassing geo-blocks
- Enhanced DNS caching and resolution
- Fallback DNS mechanisms
- Smart DNS switching based on streaming success
Code Changes:
- Update build.gradle with DNS libraries
- Add DNS bypass configuration to PlayerActivity
- Update AndroidManifest.xml for DNS permissions
- Add TV-specific DNS resources
Bypass Features:
- Geo-block circumvention
- Regional content access
- Alternative DNS routes
- Connection optimization
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update AndroidManifest.xml for TV compatibility
- Add ChannelAdapter with D-pad navigation support
- Update MainActivity for TV UI optimization
- Add Android TV specific resources:
- banner_streamplayer.xml for TV launcher
- bg_channel_item_selector for focus states
- values-sw720dp for large screens
- integers.xml for TV configurations
- Update item_channel.xml for TV navigation
- Remove unused mobile-specific drawable
Features:
- Android TV Leanback support
- D-pad navigation optimization
- TV-optimized layouts and focus management
- Large screen resources for TV displays
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major changes:
- Add ChannelAdapter for grid display functionality
- Add ChannelRepository for data management
- Add PlayerActivity for dedicated video playback
- Add StreamChannel model for channel representation
- Update MainActivity to support grid layout
- Update activity_main.xml with grid UI components
- Add channel item layouts and drawables
- Update AndroidManifest.xml with new activity
- Update build.gradle dependencies
This implements the requested "grilla arreglada" functionality with proper channel grid display and management.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Copy debug APK as release version
- APK location: app/build/outputs/apk/release/app-release.apk
- File size: 6.8MB
- Ready for distribution
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add professional README with complete project documentation
- Include architecture overview, installation guides, and troubleshooting
- Improve .gitignore with comprehensive Android development exclusions
- Add badges, project structure, and contribution guidelines
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>