Native video: name + mute labels on the native video tiles

The native video covers the web tile's name/mute badges, so redraw those
natively. syncVideoTiles now also carries each tile's name + muted state;
each tile VideoView gets a bottom-left name label (with shadow for
legibility) and a bottom-right mic-slash badge shown when that participant
is muted. Kept above the video renderer via bringSubviewToFront. Web sends
name/muted from meetNames/meetMuted (and ME.name/!meetMic for __local).

Front/back camera switch + screen-share rendering still deferred.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-06 14:10:54 +05:30
parent 4415225407
commit 34bdd8ea16
2 changed files with 64 additions and 13 deletions
+4 -3
View File
@@ -5376,10 +5376,11 @@ function bzNativeSyncTiles(){
document.querySelectorAll('#meetGrid .meet-tile').forEach(el=>{
const id=el.id ? el.id.replace('meet-tile-','') : ''; if(!id || id==='__waiting') return;
const r=el.getBoundingClientRect(); if(r.width<2||r.height<2) return;
let uid, local=false;
if(id==='__local'){ uid=(ME&&ME.id)||''; local=true; } else { uid=meetPeerUids.get(id)||''; }
let uid, local=false, name='', muted=false;
if(id==='__local'){ uid=(ME&&ME.id)||''; local=true; name=(ME&&ME.name)||'You'; muted=!meetMic; }
else { uid=meetPeerUids.get(id)||''; name=meetNames.get(id)||'Guest'; muted=!!meetMuted.get(id); }
if(!uid) return;
tiles.push({ uid, local, x:r.left, y:r.top, w:r.width, h:r.height });
tiles.push({ uid, local, name, muted, x:r.left, y:r.top, w:r.width, h:r.height });
});
try{ NC.syncVideoTiles({ tiles }); }catch(_){}
}