Show speaking indicators in spotlight during screen sharing

This commit is contained in:
Robin 2024-10-28 14:45:06 -04:00
parent 7edc8af9a0
commit 3a706ea3e0
2 changed files with 22 additions and 1 deletions

View File

@ -221,6 +221,9 @@ test("screen sharing activates spotlight layout", () => {
// sharing, then return to grid, then manually go into spotlight, and
// remain in spotlight until we manually go back to grid
const laytMarbles = "ab(cc)(dd)ae(bb)(ee)a 59979ms a";
// Speaking indicators should always be shown except for when the active
// speaker is present in the spotlight
const showMarbles = "y----------ny---n---y";
withCallViewModel(
helpers,
@ -270,6 +273,10 @@ test("screen sharing activates spotlight layout", () => {
},
},
);
expectObservable(vm.showSpeakingIndicators).toBe(showMarbles, {
y: true,
n: false,
});
},
);
});

View File

@ -714,7 +714,21 @@ export class CallViewModel extends ViewModel {
}
public showSpeakingIndicators: Observable<boolean> = this.layout.pipe(
map((l) => l.type !== "one-on-one" && !l.type.startsWith("spotlight-")),
map((l) => {
switch (l.type) {
case "spotlight-landscape":
case "spotlight-portrait":
// If the spotlight is showing the active speaker, we can do without
// speaking indicators as they're a redundant visual cue. But if
// screen sharing feeds are in the spotlight we still need them.
return l.spotlight[0] instanceof ScreenShareViewModel;
case "spotlight-expanded":
case "one-on-one":
return false;
default:
return true;
}
}),
this.scope.state(),
);