Skip to content

Feat/echo player - #62

Merged
wilson360-labs merged 13 commits into
mainfrom
feat/echo-player
Oct 14, 2026
Merged

wilson360-labs merged 13 commits into
mainfrom
feat/echo-player

Conversation

@wilson360-labs

@wilson360-labs wilson360-labs commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Integración de reproductor streaming universal 👨🏻‍💻

wilson360-labs added 3 commits October 13, 2026 13:15
…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').
@vercel

vercel Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
code-hub Ready Ready Preview Oct 14, 2026 4:35am UTC

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-em6ijwhwf-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit 85dc0c0.

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).
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Deploying codehub with  Cloudflare Pages  Cloudflare Pages

Latest commit: 78b4816
Status:⚡️  Build in progress...

View logs

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-cwipp6a6n-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit 57cabd7.

- '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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-b5s1a68gb-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit e05e2d2.

…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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-ihkdl9elx-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit 3e8914d.

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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-99qov2u8f-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit f6615d4.

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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-2jz0z0y1z-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit cd8991b.

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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-a8dwb6xk0-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit b7d87ff.

…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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-71elgtdqh-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit aa66016.

…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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-f08xex4o1-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit c784451.

- 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)
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-oehpherme-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit 922c85b.

@wilson360-labs
wilson360-labs merged commit 0d8d73b into main Oct 14, 2026
9 of 11 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Preview desplegado

URL: https://code-l7ret2aj6-wilson360-labs-697c8519.vercel.app

Este preview se genera automáticamente con el commit db2a433.

This branch was successfully deployed

1 active deployment
Preview — 78b4816c Deployed Oct 14, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant