From c6e84cb5dafa9ddc0b9d447330e7fc9c362e60f9 Mon Sep 17 00:00:00 2001 From: csantosm <4a.santos@gmail.com> Date: Mon, 7 Mar 2022 15:50:27 +0100 Subject: [PATCH] openvidu-components: Allowed meeting customization Added attribute directives for allowing the app customization --- .../components/layout/layout.component.html | 4 +- .../lib/components/layout/layout.component.ts | 2 +- .../lib/components/panel/panel.component.ts | 2 +- .../participants-panel.component.ts | 2 +- .../pre-join/pre-join.component.html | 2 +- .../components/session/session.component.html | 2 +- .../components/stream/stream.component.html | 6 +- .../lib/components/stream/stream.component.ts | 55 +++- .../components/toolbar/toolbar.component.css | 3 + .../components/toolbar/toolbar.component.html | 24 +- .../components/toolbar/toolbar.component.ts | 129 +++++--- .../videoconference.component.ts | 30 +- .../directives/api/api.directive.module.ts | 50 +++ .../lib/directives/api/stream.directive.ts | 131 ++++++++ .../lib/directives/api/toolbar.directive.ts | 300 ++++++++++++++++++ .../api/videoconference.directive.ts | 32 ++ .../openvidu-angular.directive.spec.ts | 8 - .../directives/openvidu-angular.directive.ts | 50 --- .../openvidu-angular.directive.module.ts | 35 ++ .../template/openvidu-angular.directive.ts | 65 ++++ .../src/lib/openvidu-angular.module.ts | 33 +- .../config/openvidu-angular.config.service.ts | 51 ++- .../src/lib/services/device/device.service.ts | 17 +- .../openvidu-angular/src/public-api.ts | 8 +- 24 files changed, 876 insertions(+), 165 deletions(-) create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/api/api.directive.module.ts create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/api/stream.directive.ts create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/api/toolbar.directive.ts create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/api/videoconference.directive.ts delete mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/openvidu-angular.directive.spec.ts delete mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/openvidu-angular.directive.ts create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/template/openvidu-angular.directive.module.ts create mode 100644 openvidu-components-angular/projects/openvidu-angular/src/lib/directives/template/openvidu-angular.directive.ts diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.html index 1a7e39a5..2d6121e0 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.html +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.html @@ -1,6 +1,6 @@
@@ -9,7 +9,7 @@
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.ts index e1e421c2..9d29702e 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.ts +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/layout/layout.component.ts @@ -3,7 +3,7 @@ import { Subscription } from 'rxjs'; import { ParticipantService } from '../../services/participant/participant.service'; import { ParticipantAbstractModel } from '../../models/participant.model'; import { LayoutService } from '../../services/layout/layout.service'; -import { StreamDirective } from '../../directives/openvidu-angular.directive'; +import { StreamDirective } from '../../directives/template/openvidu-angular.directive'; @Component({ selector: 'ov-layout', diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/panel.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/panel.component.ts index bdb79501..14950363 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/panel.component.ts +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/panel.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, OnInit, TemplateRef } from '@angular/core'; import { skip, Subscription } from 'rxjs'; -import { ChatPanelDirective, ParticipantsPanelDirective } from '../../directives/openvidu-angular.directive'; +import { ChatPanelDirective, ParticipantsPanelDirective } from '../../directives/template/openvidu-angular.directive'; import { MenuType } from '../../models/menu.model'; import { SidenavMenuService } from '../../services/sidenav-menu/sidenav-menu.service'; diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/participants-panel/participants-panel/participants-panel.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/participants-panel/participants-panel/participants-panel.component.ts index 50822f64..096652f1 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/participants-panel/participants-panel/participants-panel.component.ts +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/panel/participants-panel/participants-panel/participants-panel.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, On import { ParticipantAbstractModel } from '../../../../models/participant.model'; import { ParticipantService } from '../../../../services/participant/participant.service'; import { SidenavMenuService } from '../../../..//services/sidenav-menu/sidenav-menu.service'; -import { ParticipantPanelItemDirective } from '../../../../directives/openvidu-angular.directive'; +import { ParticipantPanelItemDirective } from '../../../../directives/template/openvidu-angular.directive'; import { Subscription } from 'rxjs'; @Component({ diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/pre-join/pre-join.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/pre-join/pre-join.component.html index 8f034cde..31c1ab99 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/pre-join/pre-join.component.html +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/pre-join/pre-join.component.html @@ -2,7 +2,7 @@
- +
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.html index 16ed92b0..2f1ec71a 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.html +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/session/session.component.html @@ -19,7 +19,7 @@ - diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.html index f4e081f2..9ea55f22 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.html +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.html @@ -4,7 +4,7 @@ [id]="'container-' + this._stream.streamManager?.stream?.streamId" #streamContainer > -
+
{{ this._stream.participant.nickname }} {{ this._stream.participant.nickname }}_SCREEN @@ -22,7 +22,7 @@
-
+
@@ -44,7 +44,7 @@
-
+
diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.ts b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.ts index 9d65609d..51479af1 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.ts +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/stream/stream.component.ts @@ -1,4 +1,5 @@ import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; +import { Subscription } from 'rxjs'; import { MatMenuPanel, MatMenuTrigger } from '@angular/material/menu'; import { VideoSizeIcon } from '../../models/icon.model'; import { ScreenType, VideoType } from '../../models/video-type.model'; @@ -11,6 +12,7 @@ import { Signal } from '../../models/signal.model'; import { PublisherProperties } from 'openvidu-browser'; import { StreamModel } from '../../models/participant.model'; import { ParticipantService } from '../../services/participant/participant.service'; +import { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service'; @Component({ selector: 'ov-stream', @@ -18,19 +20,27 @@ import { ParticipantService } from '../../services/participant/participant.servi styleUrls: ['./stream.component.css'] }) export class StreamComponent implements OnInit { + @ViewChild(MatMenuTrigger) public menuTrigger: MatMenuTrigger; + @ViewChild('menu') menu: MatMenuPanel; + videoSizeIconEnum = VideoSizeIcon; videoTypeEnum = VideoType; videoSizeIcon: VideoSizeIcon = VideoSizeIcon.BIG; toggleNickname: boolean; _stream: StreamModel; nickname: string; - private _streamContainer: ElementRef; - @ViewChild(MatMenuTrigger) public menuTrigger: MatMenuTrigger; - @ViewChild('menu') menu: MatMenuPanel; - @Input() showNickname: boolean = true; - @Input() showAudioDetection: boolean = true; - @Input() showSettings: boolean = true; + isMinimal: boolean = false; + showNickname: boolean = true; + showAudioDetection: boolean = true; + showSettingsButton: boolean = true; + + private _streamContainer: ElementRef; + + private minimalSub: Subscription; + private displayParticipantNameSub: Subscription; + private displayAudioDetectionSub: Subscription; + private settingsButtonSub: Subscription; constructor( protected documentService: DocumentService, @@ -38,7 +48,8 @@ export class StreamComponent implements OnInit { protected layoutService: LayoutService, protected participantService: ParticipantService, protected storageService: StorageService, - protected cdkSrv: CdkOverlayService + protected cdkSrv: CdkOverlayService, + private libService: OpenViduAngularConfigService ) {} @ViewChild('streamContainer', { static: false, read: ElementRef }) @@ -57,7 +68,7 @@ export class StreamComponent implements OnInit { set stream(stream: StreamModel) { this._stream = stream; this.checkVideoEnlarged(); - if(this._stream.participant) { + if (this._stream.participant) { this.nickname = this._stream.participant.nickname; } } @@ -70,10 +81,14 @@ export class StreamComponent implements OnInit { } ngOnInit() { + this.subscribeToStreamDirectives(); } ngOnDestroy() { this.cdkSrv.setSelector('body'); + if (this.settingsButtonSub) this.settingsButtonSub.unsubscribe(); + if (this.displayAudioDetectionSub) this.displayAudioDetectionSub.unsubscribe(); + if (this.displayParticipantNameSub) this.displayParticipantNameSub.unsubscribe(); } toggleVideoEnlarged() { @@ -98,7 +113,6 @@ export class StreamComponent implements OnInit { toggleSound() { this._stream.participant.setMutedForcibly(!this._stream.participant.isMutedForcibly); - } toggleNicknameForm() { @@ -109,7 +123,7 @@ export class StreamComponent implements OnInit { updateNickname(event) { if (event?.keyCode === 13 || event?.type === 'focusout') { - if(!!this.nickname){ + if (!!this.nickname) { this.participantService.setMyNickname(this.nickname); this.storageService.setNickname(this.nickname); this.openviduService.sendSignal(Signal.NICKNAME_CHANGED, undefined, { clientData: this.nickname }); @@ -128,7 +142,26 @@ export class StreamComponent implements OnInit { await this.openviduService.replaceTrack(VideoType.SCREEN, properties); } - protected checkVideoEnlarged() { + private checkVideoEnlarged() { this.videoSizeIcon = this._stream.videoEnlarged ? VideoSizeIcon.NORMAL : VideoSizeIcon.BIG; } + + private subscribeToStreamDirectives() { + + this.minimalSub = this.libService.minimalObs.subscribe((value: boolean) => { + this.isMinimal = value; + }); + this.displayParticipantNameSub = this.libService.displayParticipantNameObs.subscribe((value: boolean) => { + this.showNickname = value; + // this.cd.markForCheck(); + }); + this.displayAudioDetectionSub = this.libService.displayAudioDetectionObs.subscribe((value: boolean) => { + this.showAudioDetection = value; + // this.cd.markForCheck(); + }); + this.settingsButtonSub = this.libService.settingsButtonObs.subscribe((value: boolean) => { + this.showSettingsButton = value; + // this.cd.markForCheck(); + }); + } } diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css index f63c818a..de639455 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.css @@ -14,6 +14,9 @@ display: flex; align-items: center; } +#media-buttons-container { + max-height: 100%; +} #media-buttons-container > *, ::ng-deep #media-buttons-container > * { width: 40px; diff --git a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html index f2d09adc..ab277cdd 100644 --- a/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html +++ b/openvidu-components-angular/projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html @@ -1,8 +1,8 @@
- - {{ session.sessionId }} + + {{ session.sessionId }}
@@ -32,8 +32,9 @@ @@ -52,7 +59,7 @@ -
@@ -60,6 +67,7 @@ -
- -
-