id, title, status, priority, created, related_flows, related_issues, dependencies, tags
id
title
status
priority
created
related_flows
related_issues
dependencies
tags
0158
matrix-client-android calls LiveKit nativo: mic/cam/screen + PiP
pendiente
alta
2026-05-24
matrix
android
livekit
calls
webrtc
pip
audio-focus
Objetivo
Llamadas nativas via io.livekit:livekit-android SDK oficial. Codecs HW (H.264/VP9 hardware decoder), audio focus + AEC/NS nativos, MediaSession para controls en lockscreen, Picture-in-Picture mode Android nativo. Soporta 1:1 + grupales (limite 16 del LiveKit config actual).
Tareas
Backend (compartido con cliente PC):
Reusar livekit_token_gen_go_infra que esta en flow 0010.
Cliente Android pide token al mismo endpoint /api/call/token que el cliente PC.
ViewModel:
CallViewModel(matrixClient, roomId):
joinCall() — pide token + conecta Room.connect().
toggleMic(), toggleCamera(), toggleScreenShare().
hangup().
Flow<CallState> con participants, tracks, connection state.
Compose:
CallScreen fullscreen:
Grid tiles participantes (Flow layout responsive 1/2/4/9/16).
Tile principal: active speaker (track audio level del SDK).
Controles bottom: mic, cam, screen, raise hand, hangup.
IncomingCallScreen fullscreen con accept/decline (system overlay activity).
CallTile composable con VideoView (SurfaceViewRenderer del SDK).
PiP (Picture-in-Picture):
Activity con setPictureInPictureParams().
Auto-enter PiP al minimizar la app durante call.
PiP tile: video remoto + boton hangup.
Audio routing:
AudioFocusRequest (Android 8+) — focus exclusivo durante call.
Switch speaker/earpiece/bluetooth via AudioManager.setSpeakerphoneOn() + connection state listeners para audifonos BT.
Echo cancellation + noise suppression: SDK los habilita por defecto, verificar.
ICE/TURN: igual que cliente PC, depende del LiveKit config server-side.
Tests:
Instrumented Call1to1Test con emulator + segundo cliente (PC) — connect, video, hangup.
Manual ScreenShareTest con device fisico.
Manual 4ParticipantsTest.
Manual PiPTest — call activa + Home button -> PiP aparece.
Funciones del registry a crear
livekit_call_kotlin_infra — wrapper Room SDK + permission helpers.
audio_routing_kotlin_infra — speaker/earpiece/BT switching.
CallScreen_kotlin_ui — fullscreen call UI.
CallTile_kotlin_ui — tile con VideoView.
IncomingCallScreen_kotlin_ui — accept/decline overlay activity.
Acceptance
Notas
Permissions runtime: RECORD_AUDIO, CAMERA, POST_NOTIFICATIONS (Android 13+), FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PROJECTION (Android 14+).
Foreground service requerido para mantener call con app en background (issue 0161).
E2EE en call (insertable streams): TBD post-DoD, igual que en cliente PC.
Connection service Android (sistema): TBD, opcional. Permite integracion con dialer system + Bluetooth Car. Valorar coste/beneficio.