Make conference info and toolbar appear on top of the filmstrip
After a breakpoint, filmstrip pushes over the stage view instead of appearing on top
On user resize make tiles wider; after a breakpoint show grid view in the filmstrip
On filmstrip visibility toggle animate stage view resize
Added config for filmstrip with disableResizableFilmstrip
This applies to android only, where we don't separate the local
thumbnail.
In portrait mode the local thumbnail needs to be on the right, aka the
last one. In landscape mode it needs to be on top, aka the first.
This "feature" has been dead (and most likely buggy) for years. The
recommended way is for apps to implement their own incoming call
handling and then call into the JitsiMeetActivity. We did not have those
APIs back then.
* feat: Handles hidden-from-recorder from jwt.
Hides the participant that has this flag in jwt from the recorder. A hidden meeting moderator.
Makes sure follows me works and no tracks are being added.
* squash: Skips showing notification when disabling
local audio and video.
* squash: Fixes comments.
* squash: Updates with ljm changes.
They don't render the toolbar so there is more space available.
The reason this commit does that is because getToolboxHeight will now
always be 0 for recorders.
* fix(facial-expressions): set window screen size from worker with the value from main thread
* fix(facial-expressions): refactor worker and add constants for message types
Workaround for the issue when the mouse enter event is not triggered in
the use case where the layout changes and the mouse appears onn top of the
thumbnail. Example: Closing the participant pane.
Added config to choose between recording and always mode
Created function to check if feature should be used
Removed check from stop feature as it now checks if the feature was previously on
Only get video track on feature start
The CONFERENCE_WILL_LEAVE reducer in base/conference wipes the state so
we cannot rely on the old room value.
We may want to revisit this in the future.
In addition, replace the from with a div because they shouldn't be
nested.
Since we are no longer in a form, manually validate the password. This
was necessary regardless, because it was possible to bypass the digits
rule by pressing "add".
[0] introduced sorted language keys, but we had the assumption that the
first one meant to indicate the default language.
Break that assumption and be explicit about English being the default
language.
[0]: 7fe319d965
Joining a room while hand is raised caused the local raised hand total to be wrong.
This is because when the local participant id changes, the old id is not cleared from the raisedHandQueue.
Only display Picture-in-Picture button when feature is available
Moved conference timer before title
Created new always-on container for labels
Moved recording labels to always-on
Updated expanded label to support new always-on labels
Added raised hands counter label
Added speaker - earpiece toggle button
Lifted state up
I'm updating to RN 0.63 instead of the latest (0.66 at the time of this writing)
so we can update the navigation related libraries to their latest versions, and
then proceed with the larger leap towards the latest RN.
- add possibility to allow execution of the button's routine besides triggering
`toolbarButtonClicked` API event
- keep backwards compatibility
- get rid of `ToolbarButton`
disableTileEnlargement config now uses old behaviour (small tiles, not just small video in the tiles)
Update Firefox scrollbar style to match webkit
Show more rows when height allows it instead of stretching a fixed number of rows, but make sure we always try to fill the whole viewport
Added constraints for how narrow portrait tiles can be and how wide landscape tiles can be
Video should cover whole tile in tile view unless disableTileEnlargement is set or video is portrait
Added min height in px for tiles
* feat: Use source name based receiver constraints
* add sourceNameSignaling feature flag to config
* move source name specific variables into if block
* ensure sourceName is defined in constraints
* use source name for selectedSources
* use selector to find video track by participant id
* add selector to encapsulate logic to get track source name
* refactor getTrackSourceNameByMediaTypeAndParticipant selector
* rename variable
* move flags config into Feature Flags section
* do not set constraints for local large video
* rename prioritizedSources to onStageSources
* fix flow error
* refactor visibleRemoteTrackSourceNames to a constant
* use selector to get feature flags
* rename selector function
* fix flow error
* add selector for sourceNameSignaling feature flag
* feat: Drops hide self-view setting from profile tab.
* feat: Moves function for disableSelfView value in base/settings.
* squash: Drops notification.
* feat: Move hide self view option in more tab.
* feat: Move hide self view option in more tab.
* feat: Adds option to disable self view UI settings.
* squash: Disable settings when controlled from config.
Moving to breakout room and back in main room do not fire videoConferenceLeft events.
And the videoConferenceJoined was reporting wrong conference name on join.
Update video thumbnail design
Update design of indicators
In filmstrip view move Screen Sharing indicator to the top
Removed dominant speaker indicator
Use ContextMenu component for the connection stats popover
Combine Remove video menu and Meeting participant context menu into one component
Moved some styles from SCSS to JSS
Fix mobile avatars too big
Fix mobile horizontal scroll
Created button for Send to breakout room action
* fix: Fixes disable moderation sounds in meeting.
Moderators in the meeting were sending presence update after one moderator turn it on, which even my result a inconsistent state and flipping the state between moderators several times.
* squash: Adds option to disable reaction moderation.
* fix(speaker-stats): prevent search from closing when enter pressed and from keeping previous state
* fix(speaker-stats): remove unnecessary blank lines
* fix(speaker-stats): add empty dependencies to prevent dismiss callback
* add(speaker-stats): reset search criteria action
* feat(tracks) Clean up the track if a source addition is rejected.
When jicofo rejects a source-add because of sendder limits, dispose and remove the local track from the conference.
* chore(deps) update LJM to latest.
Added config option disableSelfView. This disables it on web and native
Added button on local video menu and toggle in settings on web to change the setting
Close the menu after sending a participant to a breakout room, that will detach
the context menu from the current participant and it will work properly when
they join back.
* fix(screenshot-capture) Update screenshot capture feature
Add participants jid list to request
Enable screenshot capture only when recording is also on
Updated interval
* feat(conference) Impl audio/video mute disable when sender limit is reached.
Jicofo sends a presence when the audio/video sender limit is reached in the conference. The client can then proceed to disable the audio and video mute buttons when this occurs.
* squash: use a different action type and show notification.
Don't show more menu on the main room
Fix join room on mobile web
When moving to room reset breakout rooms state to avoid showing incorrect data before response from prosody is received
This event is the event host applications need to listen to for knowing when to
dispose the SDK from now on.
Since the introduction of breakout rooms it's possible that we navigate from one
meeting to another, so there will be several conference join / terminations.
In addition, local track destruction is now moved to SET_ROOM when there is no
room, aka, we are going back to the welcome page or to the black page.
- implement breakout-rooms
- integrated into the participants panel
- managed by moderators
- moderators can send participants to breakout-rooms
- participants can join breakout rooms by themselve
- participants can leave breakout rooms anytime
Co-authored-by: Robert Pintilii <robert.pin9@gmail.com>
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
* Initial implementation; Happy flow
* Maybe revert this
* Functional prototype
* feat(facial-expressions): get stream when changing background effect and use presenter effect with camera
* add(facial-expressions): array that stores the expressions durin the meeting
* refactor(facial-expressions): capture imagebitmap from stream with imagecapture api
* add(speaker-stats): expression label
* fix(facial-expression): expression store
* revert: expression leabel on speaker stats
* add(facial-expressions): broadcast of expression when it changes
* feat: facial expression handling on prosody
* fix(facial-expressions): get the right track when opening and closing camera
* add(speaker-stats): facial expression column
* fix(facial-expressions): allow to start facial recognition only after joining conference
* fix(mod_speakerstats_component): storing last emotion in speaker stats component and sending it
* chore(facial-expressions): change detection from 2000ms to 1000ms
* add(facial-expressions): send expression to server when there is only one participant
* feat(facial-expressions): store expresions as a timeline
* feat(mod_speakerstats_component): store facial expresions as a timeline
* fix(facial-expressions): stop facial recognition only when muting video track
* fix(facial-expressions): presenter mode get right track to detect face
* add: polyfils for image capture for firefox and safari
* refactor(facial-expressions): store expressions by counting them in a map
* chore(facial-expressions): remove manually assigning the backend for tenserflowjs
* feat(facial-expressions): move face-api from main thread to web worker
* fix(facial-expressions): make feature work on firefox and safari
* feat(facial-expressions): camera time tracker
* feat(facial-expressions): camera time tracker in prosody
* add(facial-expressions): expressions time as TimeElapsed object in speaker stats
* fix(facial-expresions): lower the frequency of detection when tf uses cpu backend
* add(facial-expressions): duration to the expression and send it with durantion when it is done
* fix(facial-expressions): prosody speaker stats covert fro string to number and bool values set by xmpp
* refactor(facial-expressions): change expressions labels from text to emoji
* refactor(facial-expressions): remove camera time tracker
* add(facial-expressions): detection time interval
* chore(facial-expressions): add docs and minor refactor of the code
* refactor(facial-expressions): put timeout in worker and remove set interval in main thread
* feat(facial-expressions): disable feature in the config
* add(facial-expressions): tooltips of labels in speaker stats
* refactor(facial-expressions): send facial expressions function and remove some unused functions and console logs
* refactor(facial-expressions): rename action type when a change is done to the track by the virtual backgrounds to be used in facial expressions middleware
* chore(facial-expressions): order imports and format some code
* fix(facial-expressions): rebase issues with newer master
* fix(facial-expressions): package-lock.json
* fix(facial-expression): add commented default value of disableFacialRecognition flag and short description
* fix(facial-expressions): change disableFacialRecognition to enableFacialRecognition flag in config
* fix: resources load-test package-lock.json
* fix(facial-expressions): set and get facial expressions only if facial recognition enabled
* add: facial recognition resources folder in .eslintignore
* chore: package-lock update
* fix: package-lock.json
* fix(facial-expressions): gpu memory leak in the web worker
* fix(facial-expressions): set cpu time interval for detection to 6000ms
* chore(speaker-stats): fix indentation
* chore(facial-expressions): remove empty lines between comments and type declarations
* fix(facial-expressions): remove camera timetracker
* fix(facial-expressions): remove facialRecognitionAllowed flag
* fix(facial-expressions): remove sending interval time to worker
* refactor(facial-expression): middleware
* fix(facial-expression): end tensor scope after setting backend
* fix(facial-expressions): sending info back to worker only on facial expression message
* fix: lint errors
* refactor(facial-expressions): bundle web worker using webpack
* fix: deploy-facial-expressions command in makefile
* chore: fix load test package-lock.json and package.json
* chore: sync package-lock.json
Co-authored-by: Mihai-Andrei Uscat <mihai.uscat@8x8.com>
Fixed analytics where event names had duplicated words (eg. calendar.calendar.selected.selected)
Group reaction buttons analytics into one event
Removed unused code
Clicking on an item when the popup drawer is displayed would keep it open.
Now clicking on any item should automatically close the drawer.
Popup was also refactored and no longer uses refs.
Created Reusable components for:
- ListItem - used by participants list and lobby participants list
- ContextMenu - used by participant context menu and advanced moderation context menu
- Quick action button - used by quick action buttons on participant list items
Moved participants custom theme to base/components/themes
Created reusable button component for all participants pane buttons (Invite, Mute All, More)
Moved web components to web folder
Moved all styles from Styled Components to JSS
Fixed accessibility labels for some buttons
Removed unused code
Updated all styles to use theme tokens
Don't cleanup URL params when jitsi is in iframe
Fixes an issue where the user right-clicks on the iframe and Reload frame. This causes a refresh of the iframe, not the whole page, but without the parameters (jwt, configOverwrite etc are all lost). The parameters are part of the URL, so by not cleaning them up we make sure that on reload we still have all params