Repository navigation
Feat/echo player - #62
Conversation
…lo :echo (WIP) - Vendoriza app/src/main de itsmechinmoy/echo-nightly en apk/android/echo (231 .kt + res) como modulo libreria namespace dev.brahmkshatriya.echo. - Manifiesto adaptado: sin application@name ni LAUNCHER (la app sigue siendo launcher de CodeHub). - Arranque Koin: CodeHubApp implementa KoinStartup y devuelve EchoBoot.config (misma config del MainApplication de Echo, con workManagerFactory). - Deps: common:1.0.0 (AAR, mismo que CodeHub), Koin 4.1.0, Room 2.7.2 (KSP 2.3.12), media3 1.8.0, coil3 3.3.0, material 1.14.0-alpha04; JitPack. - openMusic lanza dev.brahmkshatriya.echo.MainActivity (fallback al slide). - Workflow echo-build.yml para compilar :echo y :app en la rama.
- El fallo de :app era que CodeHubApp (Java) implementaba KoinStartup / KoinConfiguration, tipos que son dependencias 'implementation' de :echo y por tanto invisibles al classpath de :app. - Nuevo EchoBoot.start(context)/isReady(): arranca Koin+WorkManager de forma idempotente y capturable; CodeHubApp lo invoca en try/catch y openMusic cae al reproductor nativo si no esta listo. Un fallo del reproductor ya no tumba CodeHub (koin-androidx-startup abortaba el proceso si la Application no implementaba KoinStartup). - MainApplication deja de implementar KoinStartup (se mantiene por sus utils). - Workflow: los errores de compilacion se publican como anotaciones de check (leibles por API sin admin) para diagnosticar sin acceso al log.
KSP 2.3.12 (KSP2, unico esquema que publica la serie 2.3.x, necesario para Room con Kotlin 2.3.21) exige AGP >= 8.12.0. AGP 8.12.x exige Gradle 8.13 (confirmado en las notas de AGP 8.12: Gradle 8.13, JDK 17, Build Tools 35.0.0). - apk/android/build.gradle: com.android.application/library 8.9.2 -> 8.12.2. - workflows build-apk.yml y echo-build.yml: gradle-version 8.11.1 -> 8.13. - echo-build.yml: quitar continue-on-error del paso :echo (enmascaraba los fallos reales como 'success').
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
🚀 Preview desplegado URL: https://code-em6ijwhwf-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
Con AGP 8.12 el script ya se evalua y fallaba en 'Unresolved reference: coreLibraryDesugaringEnabled'. En Kotlin DSL la propiedad es isCoreLibraryDesugaringEnabled (getter isXxx del setter Java).
|
🚀 Preview desplegado URL: https://code-cwipp6a6n-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
- 'onKoinStartup' quedo con 'override' tras quitar la interfaz KoinStartup
('overrides nothing'). Se elimina el modificador.
- BuildConfig.VERSION_NAME / VERSION_CODE no los genera AGP en modulos
libreria (solo en aplicaciones), pero el codigo de Echo los usa en
ContextUtils.appVersion() y en la version de las extensiones built-in
(OfflineExtension / UnifiedExtension). Se declaran en defaultConfig.
|
🚀 Preview desplegado URL: https://code-b5s1a68gb-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
…diagnostico CI - :echo declaraba okhttp (JVM) mientras :app/common traen okhttp-android; eso duplica las clases okhttp3/* y hace fallar :app en checkDebugDuplicateClasses (documentado en el propio comentario de :app/build.gradle). Se alinea a la misma variante android. - echo-build.yml: la extraccion de errores ahora prioriza app-build.log, ignora warnings (^w:) y anade 1 linea de contexto, para que el fallo real de :app quede publicado como anotacion en vez de taparse con warnings de :echo.
|
🚀 Preview desplegado URL: https://code-ihkdl9elx-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
El manifest merger fusiona <provider> por android:name. :app ya declara androidx.core.content.FileProvider (authority .fileprovider, @xml/file_paths) y :echo declaraba la MISMA clase con authority .provider y @xml/provider_paths -> conflicto duro de atributos (authorities + FILE_PROVIDER_PATHS) y ':app:processDebugMainManifest' fallaba con 'multiple errors'. Se anade dev.brahmkshatriya.echo.EchoFileProvider (subclase) y se usa en el manifiesto de :echo. La authority sigue siendo \.provider, asi que InstallationUtils.getUriForFile no cambia (resuelve por authority). Ademas echo-build.yml ahora captura los errores del manifest merger (Error:/is also present at/Suggestion:) y vuelca manifest-merger-debug-report.txt.
|
🚀 Preview desplegado URL: https://code-99qov2u8f-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
Al no ser MainApplication la Application real, se perdia su SingletonImageLoader.Factory y Coil usaba el loader por defecto con hardware bitmaps (rompe palette/GIF de Echo). Se extrae la config a EchoImageLoader.build (unica fuente de verdad; MainApplication delega) y EchoBoot la registra con SingletonImageLoader.setSafe, ademas de aplicar el idioma persistido de Echo (mismo applyLocale de MainApplication.onCreate). Ambas son best-effort. echo-build.yml sube el app-debug.apk como artefacto para probar en dispositivo antes de tocar main.
|
🚀 Preview desplegado URL: https://code-2jz0z0y1z-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
Theme.CodeHub hereda de android:Theme.Material.NoActionBar (framework, no AppCompat/Material3). Las activities de Echo son AppCompatActivity y usan widgets Material3, asi que al abrir el reproductor super.onCreate() lanzaba 'You need to use a Theme.AppCompat theme (or descendant) with this activity'. Se fija android:theme=@style/Default (== Base.Theme.Echo, Theme.Material3Expressive.DynamicColors.DayNight.NoActionBar) en .MainActivity y .MainActivity\ (las dos AppCompatActivity). Echo luego ajusta la variante con setTheme(getAppTheme()). Las otras activities de Echo son Activity planas y solo abren MainActivity, no necesitan tema. @style/Default no colisiona: :app solo define Theme.CodeHub y MusicSlideAnimation.
|
🚀 Preview desplegado URL: https://code-a8dwb6xk0-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
…el reproductor - Manifiesto: se habian perdido los 3 widgets de Echo (WidgetVertical, WidgetCircle, WidgetHorizontal). Se restauran (nombres/recursos propios, sin conflicto con los widgets de CodeHub). - MainActivity vuelve a declarar enableOnBackInvokedCallback="false" (su variante Back lo tiene en true); es el mecanismo del ajuste "back animation". - EchoBoot.mainActivity(context): devuelve la activity de entrada vigente. Echo alterna MainActivity y MainActivity$Back con setComponentEnabledSetting (SettingsLookFragment); si el usuario activa BACK_ANIM, MainActivity queda DESHABILITADA y el openMusic anterior (componente fijo) fallaba, cayendo al reproductor nativo. Ahora CodeHubBridge lanza la activity habilitada.
|
🚀 Preview desplegado URL: https://code-71elgtdqh-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
…ir el reproductor)
Sintoma: la app se cerraba al abrir el reproductor de musica:
RuntimeException: Unable to create service ....playback.PlayerService
Caused by: IllegalStateException: Expected 1 broadcast receiver that handles
android.intent.action.MEDIA_BUTTON, found 2
Causa: al injertar Echo conviven DOS reproductores media3 (el nativo
:app/MusicPlaybackService y el de Echo :echo/PlayerService) y media3 asume uno
solo por app:
- MediaSessionLegacyStub (al crear la MediaSession) exige exactamente un
receptor ACTION_MEDIA_BUTTON; habia dos (androidx.media3.session.MediaButtonReceiver
declarado en :app y PlayerCallback$ButtonReceiver en :echo).
- Ademas, al pulsar un boton de medios, MediaButtonReceiver resuelve el
servicio por la accion androidx.media3.session.MediaLibraryService y lanza
"Expected 1 service that handles ..., found 2" si hay dos.
Echo pasa a ser el reproductor principal, asi que:
- se elimina el receptor de :app (el de Echo ademas trae el guard
shouldStartForegroundService, que evita ForegroundServiceDidNotStartInTime
cuando no hay nada que reanudar);
- se quita la accion MediaLibraryService del servicio nativo de :app. No lo
rompe: MusicPlayer lo arranca de forma explicita con Intent(componente) y no
depende de la accion para descubrimiento (CodeHub tampoco declara el
meta-data de Android Auto).
echo-build.yml valida sobre el manifiesto fusionado que quede exactamente 1
receptor MEDIA_BUTTON y 1 servicio MediaLibraryService, para que esta clase de
fallo no vuelva sin depender de probar en dispositivo.
|
🚀 Preview desplegado URL: https://code-f08xex4o1-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
- Elimina AppodealManager y referencias. Añade UnityAdsManager (4.20.0) - Reapunta MainActivity/CodeHubBridge a Unity Ads (contrato JS intacto) - Ajusta build.gradle/settings.gradle, network_security_config y app-ads.txt - Añade módulo backend/rewards (verificación S2S de postback + nonces + saldo) - Actualiza js/rewarded-ad.js con cliente server-verified y documenta (docs/REWARDED-ADS.md) - Actualiza docs/ADS-COMPLIANCE.md y AGENTS.md (reglas Unity Ads direct)
|
🚀 Preview desplegado URL: https://code-oehpherme-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
|
🚀 Preview desplegado URL: https://code-l7ret2aj6-wilson360-labs-697c8519.vercel.app Este preview se genera automáticamente con el commit |
Integración de reproductor streaming universal 👨🏻💻