Skip to content

fix: HPB partial updates no longer drop the call when a participant joins#6087

Open
alauzon wants to merge 6 commits intonextcloud:masterfrom
alauzon:fix/hpb-partial-update-drops-call
Open

fix: HPB partial updates no longer drop the call when a participant joins#6087
alauzon wants to merge 6 commits intonextcloud:masterfrom
alauzon:fix/hpb-partial-update-drops-call

Conversation

@alauzon
Copy link
Copy Markdown

@alauzon alauzon commented Apr 16, 2026

Fixes #5452

Problem

With external signaling (HPB), onParticipantsUpdate delivers partial updates containing only changed participants. The previous code treated both onUsersInRoom (full list) and onParticipantsUpdate (partial update) identically: any participant absent from the list was moved to the left collection.

When a new participant joined via HPB, the local user was not included in the partial update (because the local user didn't change). This caused the local participant to appear in left, which made CallActivity.handleCallParticipantsChanged conclude:

isSelfInCall = false
// → "Most probably a moderator ended the call for all."
hangup(shutDownView = true, endCallForAll = false)

The call was dropped by the Android client as soon as another participant joined.

Fix

processParticipantList now takes a boolean fullList parameter:

  • onUsersInRoom passes fullList=true — absent participants have left (original behaviour)
  • onParticipantsUpdate passes fullList=false — absent participants are still in the call and are moved to unchanged instead of left

handleCallParticipantsChanged builds participantsInCall from joined + updated + unchanged, so the local user stays present, isSelfInCall remains true, and the call is not dropped.

@mahibi
Copy link
Copy Markdown
Collaborator

mahibi commented Apr 17, 2026

thank you @alauzon we will have a closer look soon

@alauzon alauzon force-pushed the fix/hpb-partial-update-drops-call branch from 17cb72d to db74191 Compare April 17, 2026 13:57
…oins

With external signaling (HPB), onParticipantsUpdate delivers partial updates
containing only changed participants. The previous code treated both full lists
(onUsersInRoom) and partial updates (onParticipantsUpdate) identically: any
participant absent from the list was moved to the "left" collection.

When a new participant joined via HPB, the local user was not included in the
partial update. This caused the local participant to appear in "left", which
made CallActivity think a moderator had ended the call for everyone and trigger
hangup().

Fix: processParticipantList now takes a boolean fullList parameter.
- onUsersInRoom passes fullList=true: absent participants have left (unchanged)
- onParticipantsUpdate passes fullList=false: absent participants are still in
  the call and are moved to "unchanged" instead of "left"

Fixes nextcloud#5452

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Alain Lauzon <alauzon@alainlauzon.com>
@alauzon alauzon force-pushed the fix/hpb-partial-update-drops-call branch from db74191 to 481ed68 Compare April 17, 2026 14:01
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.

Call started from talk android gets dropped when a participant joins

2 participants