Commit Graph

1138 Commits

Author SHA1 Message Date
Leonard Kim 979b773c3c ref(notifications): move join notification firing to notifications feature 2019-06-27 17:29:02 -07:00
Leonard Kim 59a9c2d947 fix(notifications): show notifications after reducers update to get name
Otherwise the participant will not have been added yet
to state so the participant name will not display in
the notification.
2019-06-24 10:51:17 -07:00
Saúl Ibarra Corretgé b2e840636a sounds: lower log severity
When native SDK users end a meeting the view gets disposed and detached from
React, and then the entire app gets destroyed and these errors get printed at
the error level, throwing some people off.
2019-06-21 21:48:46 +02:00
Leonard Kim 1e39c12963 fix(suboptimal): allow checks for chromium based browsers 2019-06-21 09:55:43 -07:00
Leonard Kim d5e0dea469 fix(suboptimal): ignore mobile browsers in whitelists/blacklists 2019-06-21 11:01:40 +01:00
paweldomas 033aa0dd6e fix(base/conference/reducer): check if room is defined
This was hit on a corner case when ConnectionService will deny
the request to start the call. I am not sure, but it could have been
that the conference object has been disposed or closed or something
else, but the fact is that 'conference.room' was not defined and things
crashed. It is not safe to access conference's private field 'room'. It
is true JitsiConference doesn't follow the practice of marking this
field as private with the underscore '_', but it is not a public field.
2019-06-20 13:19:04 -05:00
virtuacoplenny bf67a4a675 Configurable (sub)optimal and unsupported browsers (#4351)
* Configurable (sub)optimal and unsupported browsers

* maybe this helps somehow
2019-06-20 14:02:15 +01:00
Hristo Terezov a91b49c2c1 feat(reload): on offer / answer error. 2019-06-19 05:25:43 -07:00
Saúl Ibarra Corretgé 186ba70cb7 participants: skip local participant join notification
Also, use the helper function to get the display name for a participant.
2019-06-19 13:15:17 +02:00
Leonard Kim 2f7f9f24c4 fix(display-name): dismiss prompt if name gets set 2019-06-17 15:10:53 +01:00
Дамян Минков 6eb66b639e
Notify for kick and mute (#4328)
* Updates kick showing who kicked us.

* Notify participants that someone was kicked.

* Shows notification to user who is remotely muted.

* Updates the notification type.

* Muted by notification for mobile.

* Moves code to react and adds the kick notifications to mobile.

* Updates lib-jitsi-meet.
2019-06-17 16:00:09 +02:00
Hristo Terezov 2861198251 ref(no-data-from-source): logic. 2019-06-13 09:52:10 -07:00
Hristo Terezov 226c0bb084 ref(track-error): Remove NO_DATA_FROM_SOURCE 2019-06-13 09:52:10 -07:00
Saúl Ibarra Corretgé 30c0bfc108 rn: disable vertical scrollbars on bottom sheets 2019-06-13 10:07:55 +02:00
Saúl Ibarra Corretgé 97e0303065 feature-flags: add flag for enabling calendar integration 2019-06-11 13:37:50 +00:00
Saúl Ibarra Corretgé 35ffbe1720 feature-flags: add flag for enabling chat 2019-06-11 13:37:50 +00:00
Saúl Ibarra Corretgé f7b92f65ca ios: add feature flag to enable recording on iOS 2019-06-11 13:37:50 +00:00
Saúl Ibarra Corretgé cf7b10d53d feature-flags: initial implementation
The welcomePageEnabled and pictureInPictureEnabled props on mobile have been
converted to feature flags.
2019-06-11 13:37:50 +00:00
Leonard Kim cf23045f8d feat(unsupported): provide custom blacklist for branding 2019-06-07 07:36:20 -07:00
damencho faee1c139e Adds a config param startSilent to disable audio output. 2019-06-05 18:01:18 +01:00
virtuacoplenny eb644987ce
fix(settings): do not use non-set localStorage values (#4299)
If a value is not set in localStorage then null is
returned. null should not be converted to an empty
string (via _.escape) because that will then be
stored in localStorage as the user set preference
and will keep overriding any other values set
in localStorage for the displayname.
2019-06-04 17:42:48 -07:00
Leonard Kim c7954c284d ref(large-video): move layout update on stream removal to layout middleware 2019-05-30 09:46:35 -07:00
virtuacoplenny 251da1861a
feat(api): notify api of mic and camera errors (#4289)
- Use actions to notify the rest of the app that
  a mic or camera error has occurred
- Use middleware to respond to those notifications
  of errors by showing in-app notifications and
  notifying the external api
2019-05-29 14:17:07 -07:00
Saúl Ibarra Corretgé 579d291bca config: add ability to pass the subject as a URL parameter 2019-05-29 14:48:02 +02:00
Saúl Ibarra Corretgé 871026f4ba conference: clear the pending subject after it has been set 2019-05-29 14:48:02 +02:00
Saúl Ibarra Corretgé 9a8a070c62 rn: show conference subject if set 2019-05-29 14:48:02 +02:00
Hristo Terezov 72a1def571 feat(config): whitelist config.analytics 2019-05-24 13:42:12 -07:00
damencho 0dad99c3b7 Enables local video flip menu by default. 2019-05-24 23:09:24 +03:00
Bettenbuk Zoltan 54fdb7066f feat: scrollable bottom sheet 2019-05-24 14:06:17 +02:00
Bettenbuk Zoltan d387cbe5bd fix: iOS 10 bottom sheet style 2019-05-24 11:28:28 +02:00
Saúl Ibarra Corretgé a4cf79c161 rn: fix losing audio if call is hangup too quickly
This PR changes the logic for connecting / disconnecting conferences. Instead of
doing it in mount / unmount events from the Conference component, it moves the
logic to the appNavigatee action.

This fixes a regression introduced in 774c5ecd when trying to make sure the
conference terminated event is always sent.

By moving the logic to appNavigate we no longer depend on side-effects for
connecting / disconnecting, and the code should be more maintainable moving
forward.

An improvement to this is the concept of sessions, which, while not tackled
here, was taken into consideration.
2019-05-23 15:16:31 +02:00
Bettenbuk Zoltan 5101f69e4e feat: don’t render moderator icon if everyone is moderator 2019-05-22 14:08:52 +02:00
Дамян Минков d16e10baec room-lock: adds ability to allow only digits for room locking 2019-05-22 09:43:17 +02:00
Дамян Минков a14fead0f3
Groups devices notifications by type audio/video. (#4238)
* Groups devices notifications by type audio/video.

* Fixes passing correct device array.
2019-05-20 21:35:42 +01:00
Leonard Kim d7e0aa3f61 fix(api): enable the external api before the first redux update
For the external api to fire update events out of the iframe, it
must first be initialized within the jitsi app. Any invocations
by the app to send updates events before initialization will
cause the api to swallow the events. The chosen fix is to
initialize the api earlier so the first update of app's redux
store fires update events that the api will also fire out of
the iframe.

This change will affect current behavior in that right now
the update event of the initial set of the avatar url is
blocked, but the change will make that event fire out of the
iframe.
2019-05-20 11:56:08 +02:00
Leonard Kim 149485905c fix(api): store passed in devices as user selected
Currently devices set through the api are stored
as ids, and not user selected. This can cause
other existing user selected devices to take
precedence over the devices passed into the api.
2019-05-17 10:47:31 +01:00
Дамян Минков f5ac18da18 Add option to allow guest(moderators) to add a room password 2019-05-09 13:30:38 +02:00
Saúl Ibarra Corretgé b45a5da6e2 rn: use new AsyncStorage package
It was extracted from the RN core to a community maintained package.
2019-05-08 16:03:09 +02:00
Bettenbuk Zoltan 86d0d4fc22 rn: add DialInSummary 2019-05-07 18:02:14 +02:00
Bettenbuk Zoltan 7e9df74e60 rn: add generic alert dialog 2019-05-07 18:02:14 +02:00
Bettenbuk Zoltan 3eca67e1ad rn: add HeaderWithNavigation component 2019-05-07 18:02:14 +02:00
Дамян Минков c040b3a7dd
Fall back to using label for preferred devices (#4171)
* Skips setting undefined device id to sink in audio preview.

* Fallbacks to use labels for user selected devices.

* Fixes comment.
2019-05-07 09:53:01 +01:00
paweldomas e4af5ddbe9 feat(base/connection): throw error and add isInviteURLReady 2019-05-03 19:29:30 +02:00
Дамян Минков 768cff48a4
Notify for new device (#4165)
* Fix detecting preferred audio output.

Fixes detecting when a new output device is found and we have stored user preference of using that device.

* Does not store which is the currently open device on save.

Does not save the currently opened device when saving settings dialog, this will be done once we successfully replace the tracks to use the new devices.

* Saves opened audio device after successfully changing it.

If we do it earlier _updateAudioDeviceId is using localAudio and can store wrong value.

* Adds notification for new non preferred devices.

A notification is shown which gives an option to the user to select and use the newly plugged devices.
Adding custom button and handler for the action to the notifications.

* Changes logic to search and handle all newly added devices from array.

* Moves some utility methods to features/base/devices.
2019-05-03 18:25:33 +01:00
damencho 740c1eb84f Adds new persistent state for devices user selection.
The state about currently opened devices is filtered and not stored, where we only store when user selects a device preferences.
Also allow changing input devices for Firefox when we are not in a conference.
2019-05-02 11:55:46 +01:00
Saúl Ibarra Corretgé 2d45709a6a android: add the ability to make a "libre" build
A libre build will exclude the following:

- Analytics modules
- Google Play services GMS
- Crashlytics
- Firebase
2019-05-02 09:26:20 +02:00
Saúl Ibarra Corretgé bf7b1c5cfc rn: add support for alpha.jitsi.net 2019-05-01 23:23:24 +02:00
Saúl Ibarra Corretgé 34dcbd991e rn: wait for animation before hiding SlidingView 2019-04-30 12:45:53 +02:00
Saúl Ibarra Corretgé 70dc22c107 rn: refactor BottomSheet
Avoid using a Modal since those create trouble with the view hierarchy.
2019-04-30 12:45:53 +02:00
Bettenbuk Zoltan 31638133b7 Safeguard Container style when used cross-platform 2019-04-29 13:37:30 +02:00
Дамян Минков a6555c5d24
Singleton follow me (#4144)
* Prints errors in case of wrong initialization.

Not printing can masks some errors in the code.

* Allow only one Follow Me moderator in a meeting.

* Sends Follow Me state with all presences of the moderator.

This fixes an issue where the moderator sends the Follow Me state and then for example mute or unmute video (this will produce a presence without Follow Me state) and the new comers will not reflect current Follow Me state till a change of it comes.

* Changes fixing comments.

* Changes fixing comments.
2019-04-26 18:11:53 +00:00
Saúl Ibarra Corretgé 774c5ecd18 rn: ensure the conference terminated event is always sent
Dear reader, I'm not proud at all of what you are about to read, but sometimes
life just gives you lemons, so enjoy some lemonade!

Joining a conference implies first creating the XMPP connection and then joining
the MUC. It's very possible the XMPP connection was made but there was no chance
for the conference to be created.

This patch fixes this case by artificially genrating a conference terminated
event in such case. In order to have all the necessary knowledge for this event
to be sent the connection now keeps track of the conference that runs it.

In addition, there is an even more obscure corner case: it's not impossible to
try to disconnect when there is not even a connection. This was fixed by
creating a fake disconnect event. Alas the location URL is lost at this point,
but it's better than nothing I guess.
2019-04-25 14:04:26 +02:00
Saúl Ibarra Corretgé 32a81b0be5 rn: add our benevolent employer to the list of known domains 2019-04-24 17:36:41 +02:00
Bettenbuk Zoltan b7198ba4b3 Add recording file sharing switch 2019-04-23 20:32:10 +00:00
virtuacoplenny c7013f5c4b
ref(follow-me): hook into redux (#3991)
Use subscribers to detect state change and emit those
out to other participants. Use middleware to register
the command listener.
2019-04-17 08:05:32 -07:00
Bettenbuk Zoltan 2b4ace75ae [RN] Add connection indicator 2019-04-16 17:33:23 +02:00
Bettenbuk Zoltan 8bb56be317 [RN] Add conference connecting overlay 2019-04-10 15:47:36 +02:00
Bettenbuk Zoltan 18d908ce84 Fix flow errors from base/connection 2019-04-10 15:47:36 +02:00
Bettenbuk Zoltan 3987655f2a Refactor config loading 2019-04-10 15:47:36 +02:00
virtuacoplenny e7812c7d84
fix(device-selection): search for device by label and kind (#4064)
Searching for a device (id) by label alone can result in
false results when devices share labels, such as a mic
and speaker having the same label. To prevent such,
specify the device kind to be found instead of iterating
over all device kinds.
2019-04-08 10:03:45 -07:00
virtuacoplenny ec09085a50
fix(device-selection): set audio output device on initial configuration
When the iFrame api is used to set a preferred audio output using
options passed into the JitsiMeetExternalAPI constructor, no logic
fires to actually change the audio output destination.
2019-04-04 08:10:01 -07:00
Bettenbuk Zoltan b1a70240fc Clear raise hand status on confidence leave 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 50d7c1521f Remove legacy web raise hand code 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 5d9762b429 Extract notification timeout to a constant 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 6ff733dae0 Platform generic notification for raised hand 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan ce9744b9c3 Move participant event handler to a platform generic location 2019-04-01 21:03:36 +02:00
Hristo Terezov 829e5597d5 fix(iframe-api-devices): Misc small issues. 2019-03-29 15:42:02 +00:00
Hristo Terezov a7aaf31c79 feat(iframe-api): Add deviceListChanged event. 2019-03-29 15:42:02 +00:00
Hristo Terezov 4967488e56 ref(iframe-api-devices): Use labels instead of IDs 2019-03-29 15:42:02 +00:00
Hristo Terezov ed1d3d3df5 fix(api-devices): Initial device function calls 2019-03-29 15:42:02 +00:00
paweldomas e839684ae9 fix(base/conference): tracks not added to the conference
If tracks are created while the conference is in the 'joining' state
they will never be added.
2019-03-27 10:06:59 +01:00
Bettenbuk Zoltan 13212a5980 [RN] Replace chat modal with SlidingView 2019-03-25 14:52:43 +01:00
Bettenbuk Zoltan 2a5adfc601 Remove some Flow annotations 2019-03-25 13:53:08 +01:00
paweldomas f3f8dc2072 ref: move participant joined notification to the middleware 2019-03-21 15:47:14 +01:00
Saúl Ibarra Corretgé c025c7e132 flow: tame the beast
🔥🔥🔥
2019-03-21 14:47:55 +01:00
Saúl Ibarra Corretgé 0e92e73789 chore: use strings as action types
Using anything non-serializable for action types is discouraged:
https://redux.js.org/faq/actions#actions

In fact, this is the Flow definition for dispatching actions:

declare export type DispatchAPI<A> = (action: A) => A;
declare export type Dispatch<A: { type: $Subtype<string> }> = DispatchAPI<A>;

Note how the `type` field is defined as a subtype of string, which Symbol isn’t.
2019-03-21 14:47:55 +01:00
virtuacoplenny a667c9bff2
ref: js-utils for random and room name generator (#3975) 2019-03-19 10:35:36 -07:00
Hristo Terezov cb8e9eed5e feat(subject): UI 2019-03-12 23:03:58 +00:00
Saúl Ibarra Corretgé 975ff9c83d rn: support passing serverURL and room to URL object
That's what the SDK passes now, if the room URL is not absolute.
2019-03-12 16:55:28 +01:00
Hristo Terezov 59fc3642a6 feat(amplitude): add mobile implementation 2019-03-12 16:48:08 +01:00
Bettenbuk Zoltan 8400d01d75 [RN] Add color scheme support to dialog buttons 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan d04068344a [RN] Make header button same size as header label 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan 55a971c0fd [RN] Add color scheme support to header 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan 20c1b1cfae [RN] Wrap PagedList navigator with SafeAreaView 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan ecb44b6ab4 [RN] Make the header more compact 2019-03-12 12:36:15 +01:00
Дамян Минков 12d0aef686 Updates recording dialog. (#3953)
* Updates recording dialog.

* Update config.js doc.

* Adds comment and make a check more intuitive.

* Changes of using enum for recording types.
2019-03-11 09:17:21 -07:00
Bettenbuk Zoltan 98c7430b6f [RN] Replace red screen with dialog 2019-03-07 01:09:03 +01:00
Bettenbuk Zoltan ebdcbe122a Change dialog button property keys 2019-03-07 01:09:03 +01:00
Hristo Terezov a9d82a79ea fix(toolbar): Move buttons to overflow menu when the space isn't enough 2019-03-06 17:51:31 +00:00
Bettenbuk Zoltan b6e2701991 [RN] Add invite screen 2019-02-27 13:26:21 +01:00
Bettenbuk Zoltan 38b1be1291 [RN] Extract AvatarListItem 2019-02-27 13:26:21 +01:00
Дамян Минков ea4d49f2a0
Adds new format of phoneList service and re-design dial in numbers page. (#3903)
* Adds new format of phoneList service and re-design dial in numbers page.

Adds flags and country names (with translations) for the numbers if using the new format.

* Fixes tests and fixes get default number.

* Updates swagger with new format.

* Moves html back yo table.

Fixes displaying on mobile and also the tel: URI generation. The tel: URI is tested on Android and iOS and seems to work (Android was not interpreting 'p', but both seems to like ',').

* Fixes a wrong return statement.

* Small fixes.
2019-02-26 13:32:46 +00:00
Leonard Kim 03f8d8b51a fix(external_api): detect and skip params for hash routers 2019-02-22 10:34:49 -06:00
damencho fc129d9849 Adds setting subject and adding event on receiving such change. 2019-02-19 13:22:27 +00:00
Saúl Ibarra Corretgé 8ea693616d color-scheme: fix React warning
A reducer must always return a state or null to ignore it. When the color scheme
is undefined we should return the previous state.
2019-02-12 20:22:28 +01:00
Bettenbuk Zoltan e094b6516a [RN] Add color scheme support - Components 2019-02-08 11:43:21 +01:00
Bettenbuk Zoltan 2941f5dde4 [RN] Add color scheme support - JS 2019-02-08 11:43:21 +01:00
Saúl Ibarra Corretgé 6f95c50d6e Revert "misc: make URL protocol matching regexes non-greedy"
This reverts commit 7c911eca96.

I'm dumb. We need global mode because otherwise lastIndex is not updated in the
regex object, which we rely upon, so this is intentional.
2019-02-06 15:49:44 +01:00
Bettenbuk Zoltan 9f3ef43daa [RN] Add conference navigation bar 2019-02-06 14:27:25 +01:00
Saúl Ibarra Corretgé 7c911eca96 misc: make URL protocol matching regexes non-greedy 2019-02-02 21:21:21 +01:00
paweldomas 3b6e34e96b fix(JitsiMeetLogStorage): do not log whole message
The logMessage can be very long. Probably only it's length could be
important to why sendApplicationLog has failed. Stringify the error
though.
2019-02-01 10:34:03 +01:00
paweldomas 8fe5814831 ref(JitsiMeetLogStorage): move to base/logging 2019-02-01 10:34:03 +01:00
paweldomas 2305effa5c feat(RN): enable log collector on mobile
Stores the Logger.LogCollector instance in base/logging state instead of
global APP variable and enables it on mobile.
2019-02-01 10:34:03 +01:00
Saúl Ibarra Corretgé e729f0948c android: fix deep-linking from web
Looks like custom-scheme links no longer work in all browsers. They do on
Firefox, but the don't in Chrome and other default browsers.

So, switch to intent links on Android:
https://developer.chrome.com/multidevice/android/intents

Example:
```
<a href="intent://meet.jit.si/test123#Intent;scheme=org.jitsi.meet;package=org.jitsi.meet;end">Open Jitsi Meet</a>
```
2019-02-01 09:30:09 +01:00
virtuacoplenny 6f57d58dd9
fix(participant): update local name only on explicit update (#3849)
Dominant speaker events can trigger local participant updates
without a display name. Do not update the name unless there
is an explicit update in the action.
2019-01-31 15:46:34 -08:00
Saúl Ibarra Corretgé 5afb057387 rn: polyfill callstats
Instead of bundling it in lib-jitsi-meet, which unnecessarily increases
lib-jitsi-meet's bundle size, polyfill it here so it's available in the global
scope, just like the web does.
2019-01-31 13:50:51 -06:00
virtuacoplenny a1383bf730
fix(local-recording): allow config override to enable (#3615)
* fix(local-recording): allow config override to enable

Config overrides are not set until some time after
APP_WILL_MOUNT has completed and not in the same execution
context as when APP_WILL_MOUNT is called. So instead
choose recording controller initialization at a later time.
The time chosen is after conference join because the
controller needs the conference instance to work.

* remove redundant conditional check
2019-01-29 08:22:50 -08:00
Bettenbuk Zoltan f2b2cfda44 Extract shouldRenderParticipantVideo from ParticipantView 2019-01-28 18:34:12 +01:00
damencho 4d440f5f64 Fixes showing video after waiting for owner. Fixes #3671. 2019-01-20 14:17:50 -08:00
Bettenbuk Zoltan 79209535ea Centralise display name normalisation 2019-01-16 11:03:29 +01:00
virtuacoplenny 998db80db1
Merge pull request #3782 from virtuacoplenny/lenny/camera-as-ss
feat(screenshare): use camera as a screenshare source
2019-01-15 12:05:09 -08:00
Bettenbuk Zoltan 82f714b608 Move display name handling into redux 2019-01-15 10:15:02 +01:00
Leonard Kim 8c9ba325ca fix(pinning): send a participant id on unpin
Analytics is erroring when unpinning because the logged
event sends null for the objectId. The objectId should
be the id of the person getting unpinned.
2019-01-15 09:58:45 +01:00
Bettenbuk Zoltan eef31d05cf [RN] Add an abstraction layer to Modal 2019-01-12 15:51:50 +01:00
Bettenbuk Zoltan d7475a44e4 [RN] Extract header components for reuse 2019-01-12 15:51:50 +01:00
Leonard Kim 69dfa30142 feat(screenshare): use camera as a screenshare source
This feature is intended for spot. Spot can have an
HDMI -> usb adapter hooked up to it. In that case,
attempting to screenshare should use that adapter
as a screensharing source. Jitsi-Meet should pass
a configured screenshare source into lib-jitsi-meet
so it can be used as a source.
2019-01-11 09:52:53 -08:00
Bettenbuk Zoltan c503187dc1 [RN] Fix input dialog value bug 2019-01-10 16:10:07 +01:00
Bettenbuk Zoltan 5c0ae10ccb Remote video menu post-PR improvements 2019-01-09 12:13:30 +01:00
Hristo Terezov 5ad98dd058 ref(config): Create 'analytics' section. 2019-01-07 14:32:31 +00:00
Saúl Ibarra Corretgé 0b6496bf4d misc: drop dependency on prop-types and polyfill 2019-01-04 10:53:07 +01:00
Saúl Ibarra Corretgé 8ac701ab74 deps: drop @atlaskit/layer-manager dependency
We no longer need it since Rect 16 takes care of passing the context around.
It's also deprecated: https://atlaskit.atlassian.com/packages/core/layer-manager
2019-01-04 10:52:31 +01:00
Leonard Kim 9215b1e8b2 ref(app): move initialization into componentDidMount
componentWillMount is a deprecated lifecycle method;
componentDidMount should be used to kick off things
like ajax. In the case of the _App hierarchy, a promise
chain is used to perform initialization, and it is
first started in the constructor by initializing
storage. However, by the time storage is initialized,
resolving the first promise, _App has already mounted.
So, move it all to the componentDidMount lifecycle.
2019-01-02 10:02:04 +01:00
Leonard Kim 8b399e8caf chore(dep): bump @atlaskit/modal-dialog 6.0.12 to 7.1.2
The package now requires using a ModalTransition component
to handle animations. The existing DialogContainer component
has been split into native and web implementations to support
this change.
2018-12-20 20:05:49 -08:00
Bettenbuk Zoltan 6b68fba220 [RN] Add remote video menu 2018-12-20 17:23:07 +01:00
Saúl Ibarra Corretgé 342718f673 rn: drop support for no longer supported deployments 2018-12-18 16:18:08 +01:00
Bettenbuk Zoltan 80e8afa9c1 [RN] Remove react-native-prompt 2018-12-18 13:21:48 +01:00
Saúl Ibarra Corretgé 3212bde6e6 [RN] Recolor AudioRoutePickerDialog 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 506b15e3b5 [RN] Recolor BottomSheet 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 62e7fd7e8e [RN] Make feature dialogs branded: recording 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 22a602768c [RN] Add branded dialog component 2018-12-18 13:21:48 +01:00
Saúl Ibarra Corretgé 0a9333af02 rn: refactor Avatar to deal with FastImage changes
Updating react-native-fast-image brings a couple of interesting changes:

- onLoad is not called for cached images (reported and ignored upstream)
- load progress not working if component not displayed (on Android)

In order to fix this, a combination of 2 approaches was used:

- onLoadEnd / onError are used to detect if the image is loaded
- off-screen rendering is used on Android to get progress events

While implementing the above, yours truly noticed the complexity was increasing
way too much, so some extra refactoring was also performed:

- componentWillReceiveProps is dropped
- an auxiliary component (AvatarContent) is used for the actual content of the
  Avatar, with the former passing the key prop to the latter

Using the key prop ensures AvatarContent will be recreated if the URI changes,
which is not a bad idea anyway, since the new image needs to be downloaded.
2018-12-18 09:05:50 +01:00
Saúl Ibarra Corretgé 26ba974757 [RN] Drop react-native-locale-detector dependency
The upstream package has been unmaintained for 2 years now, and making the litle
changes needed as React Native needs them is getting old. The actual
funcionality is a couple of one-liners plus tons of boliterplate, which gets
reduced by quite a bit if we just embed it. So here it goes.
2018-12-03 11:48:44 +01:00
Leonard Kim 7614ceda68 ref(video): remove deprecated lifecycle methods from gesture handler 2018-12-03 11:45:09 +01:00
Saúl Ibarra Corretgé 10163274d3 [RN] Share font selections between web and native 2018-12-03 11:27:12 +01:00
Saúl Ibarra Corretgé e452867e12 feat(cleanup): remove no longer used FontAwesome 2018-12-03 11:27:12 +01:00
Leonard Kim f83d609f1a ref(video): calculate tint styles at render 2018-12-03 10:27:08 +01:00
Leonard Kim 822bc31d69 ref(video): use videoTrack from props
It doesn't seem like videoTrack needs to be set onto state
if it can be accessed directly from props. Removing the state
automatically removes the deprecated componentWillReceiveProps.
2018-12-03 10:10:24 +01:00
virtuacoplenny 957606b3f8
Merge pull request #3630 from virtuacoplenny/lenny/youtube-1-on-1
fix(filmstrip): show thumbnails in 1-on-1 with a fake participant
2018-11-27 14:36:43 -08:00
Leonard Kim 769a2c7c94 fix(filmstrip): show thumbnails in 1-on-1 with a fake participant
Filmstrip remote thumbnails display under certain conditions, as
defined in filmstrip/functions.web.js. Previously the raw
participant count was used, which included fake participants.
Using the selector getParticipantCount excludes fake participants,
causing YouTube thumbnails to remain hidden in a 1-on-1 call.
2018-11-27 12:31:27 -08:00
virtuacoplenny f349357d3c
Merge pull request #3584 from virtuacoplenny/lenny/update-lifecycles-1
Remove some usages of deprecated lifecycle methods
2018-11-27 09:02:05 -08:00
mmoanis b844a9f06b Abstract the DialogWithTabs title so it can be reused with other components 2018-11-24 12:50:09 +01:00
Leonard Kim f13cfe70f3 ref(sidebar): derive showOverlay state
- Derive the showOverlay state. When the sidebar should be hidden,
  the internal showOverlay state should remain true until the
  animation hides it. When the sidebar should show, the showOverlay
  state should become true immediately.
- Use PureComponent to prevent additional animation triggers
  instead of explicitly checking changes to the "show" prop.
2018-11-21 08:08:45 -08:00
Leonard Kim 5cb4bec633 ref(circular-label): animate after dom updates
Based on react-native docs, looks like animations should be
started after mount. Updating animation states I'm not certain
on so I moved it to componentDidUpdate and tested with the
live streaming label to ensure the component still animated fine.
2018-11-21 08:08:45 -08:00
Leonard Kim c4f1588bb0 ref(dialog): set mounted flag after mount 2018-11-21 08:08:45 -08:00
Leonard Kim 72c1fa38be ref(modal): simplify functional footer passing to remove componentWillUpdate 2018-11-21 08:08:45 -08:00
Leonard Kim 007d60eb6c ref(toolbox): getter for the recording/streaming disabled tooltip 2018-11-21 08:08:45 -08:00
Bettenbuk Zoltan 3fdf944763 Fix eslint/jsdoc warnings (doc change only!) 2018-11-08 15:52:34 +01:00
Leonard Kim 486e8e35d9 ref: move all prop type declaration to flow
For the most part the changes are taking the "static propTypes" declaration off
of components and declaring them as Flow types. Sometimes to support flow some
method signatures had to be added. There are some exceptions in which more had
to be done to tame the beast:
- AbstractVideoTrack: put in additional truthy checks for videoTrack.
- Video: add truthy checks for the _videoElement ref.
- shouldRenderVideoTrack function: Some component could pass null for the
  videoTrack argument and Flow wanted that called out explicitly.
- DisplayName: Add a truthy check for the input ref before acting on it.
- NumbersList: Move array checks inline for Flow to comprehend array methods
  could be called. Add type checks in the Object.entries loop as the value is
  assumed to be a mixed type by Flow.
- AbstractToolbarButton: add additional truthy check for passed in type.
2018-11-07 17:38:10 +01:00
Hristo Terezov b30008e3a5 feat(welcome-page): Redesign. (#3559)
* feat(welcome-page): Redesign.

* Style adjustments.
2018-10-22 13:49:18 -05:00
Saúl Ibarra Corretgé 9407f562f6 [iOS] Simplify dynamically loading fonts 2018-10-16 14:33:48 +02:00
Saúl Ibarra Corretgé 7162080d00 feat(flow): tame the beast 2018-10-10 18:07:36 +02:00
Saúl Ibarra Corretgé d290d28248 feat(Audio): fix react warning 2018-10-10 18:07:36 +02:00
Bettenbuk Zoltan d8c1f107da [RN] Add swipe to delete feature 2018-10-09 13:35:06 +02:00
Saúl Ibarra Corretgé 057b300074 feat(Participant): reuse avatar URL generation logic
It was moved to js-utils, so make use of it.
2018-10-05 17:15:00 +02:00
Bettenbuk Zoltan e164a23cf0 [RN] Fix start recording dialog after dropbox changes 2018-10-04 12:10:28 -05:00
Bettenbuk Zoltan e5cc732b72 [RN] Add ExpandedLabel 2018-10-02 20:47:41 +02:00
hristoterezov ae7a882188 feat(Switch): Implement 2018-09-27 01:42:59 -05:00
hristoterezov a49e590e7c feat(LoadingIndicator): Implementation for web. 2018-09-27 01:42:59 -05:00
hristoterezov 1928efda11 fix(web/Text): p->span 2018-09-27 01:42:59 -05:00
Pratik Shah b7b43e8d9c feat(chat): convert to use React
- Change "features/chat" to support listening for new chat messages
  and storing them, removing that logic from conference.js.
- Combine chat.scss and side_toolbar_container.css, and remove unused
  scss files. Chat is the only side panel so the two concepts have
  been merged.
- Remove direct access to the chat feature from non-react and non-redux
  flows.
- Modify the i18n translate function to take in an options object.
  By default the option "wait" is set to true, but that causes
  components to mount after the parent has been notified of
  an update, which means autoscrolling down to the latest rendered
  messages does not work. With "wait" set to false, the children
  will mount and then the parent will trigger componentDidUpdate.
- Create react components for chat. Chat is the side panel
  plus the entiren chat feature. ChatInput is a child of Chat and
  is used for composing messages. ChatMessage displays one message
  and extends PureComponent to limit re-renders.
- Fix a bug where the toolbar was not showing automatically when
  chat is closed and a new message is received.
- Import react-transition-group to time the animation of the
  side panel showing/hiding and unmounting the Chat component.
  This gets around the issue of having to control autofocus if the
  component were always mounted and visibility toggled, but
  introduces not being able to store previous scroll state
  (without additional work or re-work).
2018-09-26 14:48:10 -05:00
Leonard Kim 7c88de20fe feat(deps): update atlaskit/tabs to 8.0.8
There are (at least) two changes that are breaking:
- defaultTab is gone
- The re-rendering logic looks to have been re-written so that
  passing in a new array of tabs causes a re-render, which can
  reset the currently selected tab.

The fixes involved removing defaultTab from each tab configuration,
as it is no longer respected anyway. Also, instead of letting Tabs
be uncontrolled and allowing it to set its own selected, which
would result in the first tab automatically being selected on
Tabs re-render, use Tabs a controlled prop to dicate which
tab is selected; this is accomplished by specifying a selected
prop.
2018-09-14 14:50:08 -05:00
virtuacoplenny c25d6eb9a8 [RN] Implement tile view
* feat(tile-view): initial implementation for mobile

- Create a tile view component for displaying thumbnails in a
  two-dimensional grid.
- Update the existing TileViewButton so it shows a label in the
  overflow menu.
- Modify conference so it can display TileView while hiding
  Filmstrip.
- Modify Thumbnail so its width/height can be set and to prevent
  pinning while in tile view mode.

* use style array for thumbnail styles

* change ternary to math.min for expressiveness

* use dimensiondetector

* pass explicit disableTint prop

* use makeAspectRatioAware instead of aspectRatio prop

* update docs

* fix docs again (fix laziest copy/paste job I've ever done)

* large-video: rename onPress prop to onClick

* change forEach to for...of

* use truthy check fallthrough logic instead of explicit if

* put tile view button second to last in menu

* move spacer to a constant

* the magical incantation to make flow shut up
2018-09-13 17:20:22 +02:00
Bettenbuk Zoltan 2d87757aaa [RN] Add invite function to calendar 2018-09-11 23:27:11 +02:00
Bettenbuk Zoltan 126e2d6e14 Move DialogContainer to BaseApp to have dialogs on the welcome screen too 2018-09-11 23:27:11 +02:00
Lyubo Marinov 1d128e027a Coding style: utilize default values
Since they are a language feature, they make the source code more easily
comprehensible than `if (typeof XXX === 'undefined') { XXX = ...; }`.
2018-09-07 16:48:16 -05:00
paweldomas 26d906fa46 feat(RN): displays transcription subtitles 2018-09-05 18:43:49 -05:00
paweldomas 6dea107bcd ref(conference.js): unify "user joined/left" handling on web and RN
Extracts methods which share the common logic. There are still some
leftovers on the web side left which are not used on RN. But this can be
a first step.
2018-09-05 18:43:49 -05:00
Bettenbuk Zoltan d10d61fb7a [RN] Add Google Sign In to live streaming 2018-09-05 23:09:56 +02:00
Saúl Ibarra Corretgé a327a5d804 [RN] Drop the react-native-permissions dependency
It causes false positives when submitting the app to the Store. Use the new
permissions API in react-native-webrtc instead.
2018-09-05 14:56:00 -05:00
yanas 31cc63b757 Add join button to calendar events. (#3408)
* Add joing button to the calendar events.

* Add space between calendar lines.

* Adjust recent list name.

* Fixes test failure.

* Restyle mobile recent list message.

* Add analytics events.

* Addressing PR review comments.
2018-08-31 18:03:35 -07:00
Saúl Ibarra Corretgé 955e0a3382 [RN] Simplify RTCPeerConnection.setRemoteDescription override 2018-08-29 09:22:28 -05:00
Saúl Ibarra Corretgé 1354731fc5 [RN] Update WebRTC polyfills 2018-08-29 09:22:28 -05:00
Saúl Ibarra Corretgé 3ca704d81d [RN] Update react-native-webrtc and remove no longer needed polyfills 2018-08-29 09:22:28 -05:00
yanas 86caf52d08 Welcome page calendar ui improvements (#3405)
* Welcome page calendar ui improvements

* Addressing PR review comments.
2018-08-27 17:56:17 -07:00
yanas f2cb15ba44
[WiP] Calendar integration ui (#3395)
Calendar integration ui
2018-08-27 10:13:59 -05:00
Дамян Минков 7267f386dc Implements calendar entries edit. (#3382)
* Implements calendar entries edit.

Share text generation between calendar-sync and the share-room feature.

* Fixing comments.

* Clone the event element we modify on update.
2018-08-17 12:34:41 -07:00
Saúl Ibarra Corretgé dba7f2d429 [RN] Remove no longer needed polyfills (#3377)
- navigator.{platform,plugins} were needed by the no longer existing screenshare
  adapter
- document.implementation is already polyfilled by xmldom
2018-08-16 23:03:53 -05:00
Saúl Ibarra Corretgé a896d8f076 [RN] Fix normalizing BOSH URLs (#3376)
If a relative BOSH URL is found (as docker-jitsi-meet does) construct a full URL
based on the location URL and context root.

Also remove some default options since we need the config file anyway, so I see
no point in doing the extra work.
2018-08-16 23:03:15 -05:00
hristoterezov 2704b2f822 fix(dropbox): Address code review comments. 2018-08-16 13:53:43 -05:00
hristoterezov df0e107ea6 feat(recording): Implement dropbox integration 2018-08-16 13:53:43 -05:00
Дамян Минков 7eda31315f Google & Microsoft calendar API integration (#3340)
* Refactor calendar-sync feature to be loaded on web.

For the web part it just adds new property to enable/disable calendar web integration, disabled by default.

* Initial implementation of retrieving google calendar events.

* Initial implementation of retrieving microsoft calendar events.

* Fixes comments.

* Rework to use the promise part of microsoft-graph-client api.

* Moves dispatching some actions, fixing comments.

* Makes sure we do not initializeClient google-api client multiple times.

* Do not try to login when fetching calendar entries.

The case where there is a calendar type google selected, but not logged in, trying to login on loading welcome page will show a warning that it tried to open a popup, which was denied by browser.

* Updates profile display data on sign in.

* Propagate google-api state to calendar-sync only if we use google cal.

* Adds sign out action.

* Clears the event listener when the popup closes.

* Clears calendarIntegrationInstance on signOut.

* WIP: UI for calendar settings, refactor auth flows

* Clean up some unused constants, functions and exports.

* break circular dependency of function and constant

* Exports only isCalendarEnabled from functions.

* Checks isSignedIn when doing fetchCalendarEntries on web.

* address comments

List microsoftApiApplicationClientID in undocument config.

remove unused SET_CALENDAR_TYPE action

use helper for calendar enabled in bootstrap

reorder actions

reorder imports

change order of signin -> set type -> update profile

add logging for signout error

reword setting dialog desc to avoid redundancy

add jsdoc to microsoft button props

reorder calendar constants

move default state to reducer (not reused anywhere)

update comment about calendar-sync due to removal of getCalendarState

update comment for getCalendarIntegration

remove vague comment

alpha order reducer, return default state on reset

alpha order persistence registry

remove unnecessary getType from apis

update comments in microsoftCalendar

alpha order google-api exports, use api.get in loadGoogleAPI

set jsdoc for google signin props

alpha order googleapi methods

fix calendartab docs

* Moves fetching calendar from APP_WILL_MOUNT to SET_CONFIG.

The web part needs configuration in order to refresh tokens (Microsoft).

* Fixes storing token expire time and refreshing tokens in Microsoft impl.

* Address comments

updateProfile changed to getCurrentEmail

rename result to results

stop storing integration in redux, store if ready for use

use existing helpers to parse redirect url

* update jsdocs, get google app id from redux

* clear integration instead of actual sign out
2018-08-15 13:11:54 -07:00
Ritwik Heda 1d99abc4a4 removes need for `eslint-disable-next-line react/jsx-wrap-multilines` and `eslint-diable-line no extra-parens` 2018-08-12 17:06:35 -05:00
virtuacoplenny c353e9377f feat(tile-view): initial implementation for tile view (#3317)
* feat(tile-view): initial implementation for tile view

- Modify the classname on the app root so layout can adjust
  depending on the desired layout mode--vertical filmstrip,
  horizontal filmstrip, and tile view.
- Create a button for toggling tile view.
- Add a StateListenerRegistry to automatically update the
  selected participant and max receiver frame height on tile
  view toggle.
- Rezise thumbnails when switching in and out of tile view.
- Move the local video when switching in and out of tile view.
- Update reactified pieces of thumbnails when switching in and
  out of tile view.
- Cap the max receiver video quality in tile view based on tile
  size.
- Use CSS to hide UI components that should not display in tile
  view.
- Signal follow me changes.

* change local video id for tests

* change approach: leverage more css

* squash: fix some formatting

* squash: prevent pinning, hide pin border in tile view

* squash: change logic for maxReceiverQuality due to sidestepping resizing logic

* squash: fix typo, columns configurable, remove unused constants

* squash: resize with js again

* squash: use yana's math for calculating tile size
2018-08-08 13:48:23 -05:00
bgrozev 2ee1bf9351 feat: Displays the E2E RTT in the connection stats table. (#3344)
* feat: Displays the E2E RTT in the connection stats table.

* fix: Whitelists the ping config properties.

* ref: Addresses feedback.

* npm: Updates lib-jitsi-meet to e097a1189ed99838605d90b959e129155bc0e50a.

* ref: Moves the e2ertt and region to the existing stats object.
2018-08-07 11:31:51 -07:00
virtuacoplenny cac8888b37 feat(welcome-page): be able to open settings dialog (#3327)
* feat(welcome-page): be able to open settings dialog

- Create a getter for getting a settings tab's props so the device
  selection tab can get updated available devices.
- Be able to call a function from a tab after it has mounted. This is
  used for device selection to essentially call enumerateDevices on
  the welcome page so the device selectors are populated.
- Remove event UIEvents.AUDIO_OUTPUT_DEVICE_CHANGED. Instead directly call
  setAudioOutputDeviceId where possible.
- Fix initialization of the audioOutputDeviceId in settings by defaulting
  the audio output device to the one set in settings.

* squash: updateAvailableDevices -> getAvailableDevices, add comment for propsUpdateFunction
2018-08-06 10:24:59 -05:00
Lyubo Marinov b9c5ed3b03 Fixes typo, comment 2018-08-05 17:18:14 -05:00
Lyubo Marinov 0892e0b644 Remove duplication 2018-08-05 17:04:19 -05:00
Bettenbuk Zoltan b41bf22be7 Replace console with logger 2018-08-05 17:04:19 -05:00
Saúl Ibarra Corretgé a1cc9bce91 [RN] Drop no longer needed polyfills
They were required only on Android because of its old JSC version. With the JSC
version bump they are no longer required.
2018-08-05 17:04:19 -05:00
hristoterezov fb75180632 ref(RecentList): Improvements after review. 2018-08-03 11:25:03 -05:00
Ritwik Heda 046b06e436 added recent list 2018-08-03 11:25:03 -05:00
Saúl Ibarra Corretgé 27021ea271 [RN] Replace cached image implementation
Use react-native-fastimage, which uses 2 full-native image impleentations using
well known and mature (native) libraries.

This gets us rid of 2 libraries which were observerd as a source of bugs and
created trouble with dependencies: react-native-fetch-blob and
react-native-img-cache. They are also no longer well maintained.
2018-07-31 14:07:17 -05:00
Saúl Ibarra Corretgé f5a667ad9e feat(Avatar): simplified code 2018-07-31 14:07:17 -05:00
paweldomas 6a31c59081 ref(media/VideoTrack.native): remove fade animation 2018-07-27 12:08:54 +02:00
paweldomas 11c5b220a1 fix(participants/Avatar.native): disable fade animation
The Image adds a fade effect without asking, so lets explicitly disable
it. More info here:
https://github.com/facebook/react-native/issues/10194
2018-07-27 12:08:54 +02:00
Nik b8daf0a9f9 [WEB] add UI for transcription (#3213)
* [WEB] add UI for transcription

* add analytics event for button, do not use global APP object

* use props instead of state, use local conference to kick participant

* put imports in alphabetical order

* add translation for TranscribingLabel

* fix merge conflict

* add closed caption button

* purge OverFlowMenuItem which starts and stops Transcription

* readd closed caption icon and fix small issues due to purge

* delete unused icon in _font.scss
2018-07-26 09:33:40 -07:00
Leonard Kim 0b1224495b ref(video-quality): update video quality post redux update
Move away from middleware and instead update video quality
when the selected video quality updates in redux. This also
lead to removing of automatically exiting audio only because
with the change it's not so readily possible to tell if the
user switched off audio only by re-selecting the already
preferred video quality. Removing this automagic removed
some additional checking done for mobile.
2018-07-25 12:17:13 -07:00
Leonard Kim ee7d180cbb feat(video-quality): be able to set an internal max
The internal max will be used for tile view. Whatever the
user has set for preferred video quality, the internal
maximum will be respected. This allows for the case where
the user prefers high definition video, but in tile view
it only makes sense to send low definition; ux wise the
user is allowed to continue messing with the video quality
slider.
2018-07-25 12:17:13 -07:00
Leonard Kim 4d3383c620 ref(video-quality): rename receiveVideoQuality to preferredReceiverVideoQuality
- "preferred" is being appended because in tile view there is a
  concept of what the user prefers to be the maximum video quality
  but there is also a maximum respected internall. For example,
  the user may prefer HD, but in tile view the tiles may be small
  so internall the preferred would be set to LD.
- "receive" is being renamed to "receiver" to be consistent with
  the naming in lib-jitsi-meet.
2018-07-25 12:17:13 -07:00
virtuacoplenny a36b341865 ref(popover): allow for popover content from the right (#3302)
* ref(popover): allow for popover content from the right

Popovers contents can display to the left of the trigger
and above the trigger. Add the ability to display to the
right of the trigger my adding mouseover padding. This
may be needed for tile view, depending on where the triggers
are located.

* squash: abstract common css proprties into placeholder class
2018-07-25 13:28:36 -05:00
Saúl Ibarra Corretgé 3d6e18394e deps: update url-polyfill dependency
The previous location no longer exists. This is a fork of the original package,
which is actively maintained.

Fixes: #3304
2018-07-25 11:27:54 -05:00
virtuacoplenny 9a6e5c67f5
feat(tile-view): add new toolbar icon (#3292) 2018-07-25 08:22:18 -07:00
virtuacoplenny 918fb1dfc6
ref(utils): use web reportError helper (#3283) 2018-07-21 08:16:32 -07:00
paweldomas 01c2786c95 ref(base/util): move getSymbolDescription to util 2018-07-18 22:47:18 -05:00
Leonard Kim f97f294d1a feat(live-streaming): add beta tag to mobile 2018-07-18 10:42:14 +02:00
Nik d3dd54ac3b Show subtitles when Jigasi sends transcription results in JSON (#1914)
* Show subtitles when Jigasi sends transcription results in JSON

* fix: Import PropTypes from prop-types.

* apply feedback on initial PR

* Changed Object to Map, alphabetic ordering fixes ,css changes in transcription subtitles

* Sends Map of transcriptMessages as prop to Component

* Documentation fixes and uses config in redux state

* Minor doc fix

* rename feature 'transcription' to 'subtitles'

* Moves subtitles config to interfaceConfig and minor fixes

* minor lint fix
2018-07-17 12:31:12 -05:00
Saúl Ibarra Corretgé b25caedce7 feat(eslint): fix 2 eslint warnings (#3268) 2018-07-17 08:08:22 -07:00
Leonard Kim 5d4a2e87f8 fix(device-selection): use persisted settings as default values if available 2018-07-16 20:38:04 -07:00
virtuacoplenny b9f28a1beb
fix(live-streaming): add beta tag to toolbar button (#3263) 2018-07-16 19:15:34 -07:00
Saúl Ibarra Corretgé 1ee71be961 [RN] Kill some dead code 2018-07-13 10:01:39 -05:00
Lyubo Marinov bfdfb5321c feat(App): refactor App and split it into BaseApp and App (continued)
There doesn't seem to be a strong need for the initialized React
Component state in BaseApp so remove/delete it.
2018-07-12 11:28:48 -05:00
Saúl Ibarra Corretgé dc246960df feat(App): refactor App and split it into BaseApp and App
BaseApp does all the heavy-lifting related to creating the redux store,
navigation, and so on.

App currently handles URL props and actually triggering navigation based on
them.
2018-07-12 11:28:19 -05:00
Saúl Ibarra Corretgé 3bfab7718f [RN] Refactor getting the default URL
Move it away from AbstractApp into an auxiliary function. In addition, introduce
a new `getServerURL` function which gets the configured server URL and defaults
to meet.jit.si as before.
2018-07-12 11:28:18 -05:00
Saúl Ibarra Corretgé f2f991e969 feat(App): move participant leaving logic to base/participants 2018-07-12 11:28:17 -05:00
Bettenbuk Zoltan 96a837801e [RN] Tint active speaker thumbnail 2018-07-12 09:43:29 +02:00
Lyubo Marinov c203215c54 core: refactor routing (continued) 2018-07-11 22:58:41 -05:00
Saúl Ibarra Corretgé 155e02bbfb core: refactor routing
Unfortunately, as the Jitsi Meet development evolved the routing mechanism
became more complex and thre logic ended up spread across multiple parts of the
codebase, which made it hard to follow and extend.

This change aims to fix that by rewriting the routing logic and centralizing it
in (pretty much) a single place, with no implicit inter-dependencies.

In order to arrive there, however, some extra changes were needed, which were
not caught early enough and are thus part of this change:

- JitsiMeetJS initialization is now synchronous: there is nothing async about
  it, and the only async requirement (Temasys support) was lifted. See [0].
- WebRTC support can be detected early: building on top of the above, WebRTC
  support can now be detected immediately, so take advantage of this to simplify
  how we handle unsupported browsers. See [0].

The new router takes decissions based on the Redux state at the time of
invocation. A route can be represented by either a component or a URl reference,
with the latter taking precedence. On mobile, obviously, there is no concept of
URL reference so routing is based solely on components.

[0]: https://github.com/jitsi/lib-jitsi-meet/pull/779
2018-07-11 22:58:41 -05:00
Saúl Ibarra Corretgé 453c4b99dc cleanup: drop polyfills which were required for IE11 2018-07-11 17:53:32 +02:00
Bettenbuk Zoltan 961e1d611f [RN] Only ask for calendar permission on user interaction 2018-07-11 17:17:24 +02:00
hristoterezov 769e782c6f feat(callee-info): Redesign. 2018-07-09 20:22:43 -05:00
Zoltan Bettenbuk 63c017f8e6 Fix persistency to handle default values too (#3228) 2018-07-06 11:03:16 -07:00
Bettenbuk Zoltan b48c897d9b [WEB] Move RecordButton to the new ToolBox abstraction layer 2018-07-03 11:08:37 +01:00
Bettenbuk Zoltan e59761baa2 Implement ToolboxItem features: disabled, tooltip with label 2018-07-03 11:08:37 +01:00
virtuacoplenny 84b589719f fix(connection): reload immediately on possible split-brain (#3162)
* fix(connection): reload immediately on possible split-brain

There isn't an explicit way to know when a split brain
scenario has happened. It is assumed it arises when an
"item-not-found" connection error is encountered early
on in the conference. So, store when a connection has
happened so it be calculated how much time has
elapsed and if the threshold has not been exceeded
then do an immediate reload of the app instead of
showing the overlay with a reload timer.

* squash: rename isItemNotFoundError -> isShardChangedError
2018-07-02 16:22:51 -05:00
Leonard Kim 98e3bcb691 feat(device-selection): new icon for audio output 2018-06-28 14:59:07 -07:00
Saúl Ibarra Corretgé 87fa8de815 feat(sanity): axe IE and Temasys plugin support 🔥🔥🔥 2018-06-28 13:55:12 +02:00
Bettenbuk Zoltan ffd0827354 [RN] Implement Notifications on mobile 2018-06-28 12:47:50 +02:00
virtuacoplenny 2951fefef9
ref(toolbar): change tooltip prop name to stop deprecation warning (#3186) 2018-06-25 09:31:41 -07:00
damencho 682169e44c Renames isBot -> isFakeParticipant. 2018-06-22 18:23:17 -05:00
Saúl Ibarra Corretgé 7b0a6a2ee5 [RN] Add ability to loop sounds 2018-06-22 14:34:01 +02:00
Saúl Ibarra Corretgé 333a0f5f90 [RN] Handle presence
Up until now, mobile was oblivious to participants' presence state. Presence
state handling is required (probably, amongst other things) for "call flows".
So, let's add it! This is done by gathering the presence state when a
participant first joins, and handling subsequent changes.
2018-06-22 12:22:12 +02:00
virtuacoplenny 2bd0f77671 Move a couple calls to update VideoLayout into the redux update flow (#3173)
* ref(video-layout): move middleware for TRACK_ADDED

* ref(video-layout): call mucJoined when redux knowns of conference join
2018-06-21 21:33:33 -07:00
Hristo Terezov 1f8fa3b6d4 Refactor settings modal (#3121)
* feat(settings): setting dialog

- Move device selection, profile edit, language select, moderator
  options, and server auth into one modal with tabs.
- Remove side panel profile and settings and logic used to update
  them.
- Pipe server auth status into redux to display in the settings
  dialog.
- Change filmstrip only device selection popup to use the new
  stateless settings dialog component.

* squash: do not show profile tab if not guest

* squash: profile button not clickable if no profile to show

* squash: nits

* ref: Settings dialog.
2018-06-20 13:19:53 -07:00
paweldomas 675eea7b99 fix(base/conference): do not execute leave conference on web
On web CONFERENCE_FAILED handlers are not setting the 'recoverable'
flag thus any middleware which rely on those should not execute on web.
2018-06-20 10:58:57 -05:00
Saúl Ibarra Corretgé 146ffb0918
Merge pull request #3153 from jitsi/connection_corner_cases
Connection corner cases
2018-06-20 16:53:48 +02:00
paweldomas 57b302da3e feat(base/conference): CONFERENCE_FAILED on CONNECTION_FAILED
Emits CONFERENCE_FAILED in response to CONNECTION_FAILED event
which then triggers JitsiConference.leave() through the middleware
processing. Also base/conference state will be adjusted. It is to have
a consistent redux state in which both connection and conference are
failed. It could happen that in a buggy environment the XMPP connection
is dropped, but the media is still flowing which would result in weird
user experience.
2018-06-20 15:52:46 +02:00
paweldomas 022954b40b fix(base/connection/reducer): clear 'connection' field
Currently the listeners for disconnected and failed connection events
are unsubscribed as soon as the connection is established, so
the CONNECTION_DISCONNECTED is never triggered which would clear the
'connection' field. This commit will clear the 'connection' state on
CONNECTION_WILL_CONNECT. It's needed anyway given that there's no
guarantee on when and if the async disconnect operation will finish.

One issue caused by the 'connection' not cleared was that
CONNECTION_FAILED was not reduced correctly and the reload screen was
not displayed for the following scenario:
1. Join and leave any working conference.
2. Turn off network connectivity on the device.
3. Wait for CONNECTION_FAILED. The reload screen will not be displayed,
   because CONNECTION_FAILED is not reduced correctly, because the old
   'connection' value is still there.
2018-06-20 15:52:45 +02:00
Daniel Ornelas ad259988b9 [RN] Fix for creating video track when conference is ending. 2018-06-20 11:24:07 +02:00
Lyubo Marinov 0d3fac7c0f [RN] Change default WelcomeScreen tab and persist user choice (coding style) 2018-06-18 15:42:09 -05:00
Bettenbuk Zoltan dcfebf746f [RN] Change default WelcomeScreen tab and persist user choice 2018-06-18 12:21:55 -05:00
Дамян Минков ac834326e7
Token based features (#3075)
* Adds an option to disable features based on token data.

Reverts changes from b84e910086, removes disableDesktopSharing option and an interface_config option.

* Disable recording button based on token features data.

Hide recording if local participant isGuest and roles based on token.
When enableUserRolesBasedOnToken is enabled we were not hiding the record button for guests.

* Adds filtering of jibri iqs and rayo based on features.

Moves feature checking in separate utility function.
Renames utility method.

* Adds a footer text when outbound-call is not feature enabled.

* Fixes comments.
2018-06-15 13:10:22 -05:00
bbaldino 8df54d2cb3 document layer suspension config and add to whitelist (#3123) 2018-06-12 09:06:10 -07:00
Hristo Terezov d70ca48728 fix(aot): JS error (#3118)
The following import chain is braking the bundle
AOT->base/toolbox->base/styles->base/react->base/i18n
2018-06-08 14:46:58 -07:00
Lyubo Marinov a82ed4653e [RN] Allow to override callHandle for CallKit (coding style) 2018-06-08 15:18:11 -05:00
Daniel Ornelas 81be082fe7 [RN] Allow to override callHandle for CallKit 2018-06-08 15:18:11 -05:00
Saúl Ibarra Corretgé 7c8fa57bba [RN] Remove unneeded code 2018-06-08 08:22:18 -05:00
Saúl Ibarra Corretgé 880fb59b2c [RN] Simplify logic for using tinted view in ParticipantView
Use it unless the connection is not ACTIVE. We don't really care if it's
recovering or whatever, if it's not active it has problems, so that's that.

This fixes a potential edge case in which the connection remains in RESTORING
state for some time.
2018-06-08 08:22:18 -05:00
Guus der Kinderen ccf0c8a363 fix(i18n) Accessiblity labels translations (#3071)
* fix(toolbar): accessibilityLabel should be translatable.

This commit adds a helper property to get the accessibilityLabel of an item,
providing a translation if one is available. This mimics the behavior of
label and tooltip.

* fix(toolbar) 'hangup' button accessibilityLabel i18n

* fix(toolbar) 'mute' button accessibilityLabel i18n

* fix(toolbar) 'videomute' button accessibilityLabel i18n

* fix(toolbar) 'moreActions' button accessibilityLabel i18n

* fix(toolbar) 'shareRoom' button accessibilityLabel i18n

* fix(toolbar) 'audioRoute' button accessibilityLabel i18n

* fix(toolbar) 'toggleCamera' button accessibilityLabel i18n

* fix(toolbar) 'audioOnly' button accessibilityLabel i18n

* fix(toolbar) 'roomLock' button accessibilityLabel i18n

* fix(toolbar) 'pip' button accessibilityLabel i18n

* fix(toolbar) 'invite' button accessibilityLabel i18n

* fix(toolbar) 'raiseHand' button accessibilityLabel i18n

* fix(toolbar) 'chat' button accessibilityLabel i18n

* fix(toolbar) 'shareYourScreen' button accessibilityLabel i18n

* fix(toolbar) 'fullScreen' button accessibilityLabel i18n

* fix(toolbar) 'sharedvideo' button accessibilityLabel i18n

* fix(toolbar) 'document' button accessibilityLabel i18n

* fix(toolbar) 'speakerStats' button accessibilityLabel i18n

* fix(toolbar) 'feedback' button accessibilityLabel i18n

* fix(toolbar) 'shortcuts' button accessibilityLabel i18n

* fix(toolbar) 'recording' button accessibilityLabel i18n

* fix(toolbar) 'settings' button accessibilityLabel i18n

* fix(welcomepage) accessibilityLabels i18n

* fix(toolbar) 'info' button accessibilityLabel i18n

* fix(i18n): Add translation to various aria-label property values.

* fix(i18n): Differentiate between overflow menu and button.
2018-06-07 13:32:18 -07:00
virtuacoplenny 84f303dd3c ref(toolbar): show recording features based on explicit configs (#3080)
* ref(toolbar): show recording features based on explicit configs

* squash: bring back button configs, use final config names

* squash: update interfaceConfig comment, remove unused config whitelist

* squash: change order of button enabled checks to reduce diff

* squash: fileRecording -> fileRecordings
2018-06-05 22:19:28 -07:00
paweldomas 2b20c55bfe ref(types): use IntervalID and TimeoutID types defined by flow 2018-06-04 16:05:48 -05:00
Lyubo Marinov c6d553738f [RN] Refactor SideBar layout and animation (coding style) 2018-06-04 16:05:48 -05:00
Saúl Ibarra Corretgé c700261852 [RN] Refactor SideBar layout and animation
Layout:

Use an absolute-fill view as the background with the sidebar on top of. This
greatly simplifies styling, as there is no need to calculate how large the
backdrop needs to be.

Animation:

Switch to a translateX transform animation. This serves 2 purposes: first,
there seems to be a bug somewhere in React Native 0.51-0.55 where the content
that is being animated starts to be clipped. Very weird! But more importantly,
translateX transmorm animations are supported by the native animation driver!

https://facebook.github.io/react-native/blog/2017/02/14/using-native-driver-for-animated.html
8f5ebe5952/Libraries/Animated/src/NativeAnimatedHelper.js (L138-L176)

This makes the animation more performant and buttery smooth.

Some small cleanups are also included here.
2018-06-04 16:05:48 -05:00
Lyubo Marinov cbd510bf7d flow: tame the beast (coding style) 2018-06-04 16:05:48 -05:00
Saúl Ibarra Corretgé 0817482b9c flow: tame the beast 2018-06-04 16:05:48 -05:00
Saúl Ibarra Corretgé 9ac5aafe10 react: remove custom Fragment
Fragment now works on both React and React Native, so use it.
2018-06-04 16:05:48 -05:00
Lyubo Marinov efc9cc9f50 [RN] Update react-native to 0.55.4 (continued) 2018-06-04 16:05:48 -05:00
Leonard Kim 57f7abc6dd ref(video-layout): get dominant speaker state from redux
Instead of keeping dominant speaker locally, get it from redux and be
updated when the dominant speaker changes. This is in an attempt to mimic
the video layout being reactified and connected to redux.
2018-06-01 10:42:57 -07:00
Bettenbuk Zoltan 6a1e9e256d [RN] Make the calendar the default tab when there are calendar entries fetched. 2018-06-01 10:54:11 +02:00
paweldomas dbd1091364 ref: use getCurrentConference
Try to use the getCurrentConference function wherever the indention is
to check for the current conference.
2018-05-30 16:29:27 +02:00
Guus der Kinderen acc41e6d0b feat(toolbar): add 'always-visibile' config option
The visibility of the toolbar can be toggled by interacting with the main screen.
This change allows the toolbar to be configured to be 'always visible'. This voids
the 'toggle' functionality.
2018-05-30 16:12:05 +02:00
Saúl Ibarra Corretgé 4d21c28421 feat(conference): don't add hidden participants to redux
This includes recording agents, for example.
2018-05-30 12:13:32 +02:00
Bettenbuk Zoltan 118250750a [RN] Add VideoQualityLabel indicator for mobile 2018-05-30 12:13:32 +02:00
Bettenbuk Zoltan 9eb9306e87 [RN] Implement web's CircularLabel component for mobile 2018-05-30 12:13:32 +02:00
Bettenbuk Zoltan 5579464951 [RN] WelcomeScreen post-merge changes 2018-05-30 11:13:16 +02:00
Lyubo Marinov 693b1c392f Fix joining a locked room 2018-05-29 23:13:01 -05:00
Saúl Ibarra Corretgé bbf505c076 ref(base/conference): simplify code
Simplify parts of the logic introduced in
11b7144ad0.

Specificaly, using all the state change avoiding functions doesn't give us much
since we need to copy the state for sure.
2018-05-29 23:13:01 -05:00
paweldomas 7186a9c79c fix(base/participants): ensure default local id outside of conference
Makes sure that whenever a conference is left or switched, the local
participant's id will be equal to the default value.

The problem fixed by this commit is a situation where the local
participant may end up sharing the same ID with it's "ghost" when
rejoining a disconnected conference. The most important and easiest to
hit case is when the conference is left after the CONFERENCE_FAILED
event.

Another rare and harder to encounter in the real world issue is
where CONFERENCE_LEFT may come with the delay due to it's asynchronous
nature. The step by step scenario is as follows: trying to leave a
conference, but the network is not doing well, so it takes time,
requests are timing out. After getting back to the welcome page the
the CONFERENCE_LEFT has not arrived yet. The same conference is joined
again and the load config may timeout, but it will be read from the
cache. Now the network gets better and conference is joining which
results in our ghost participant added to the redux state. At this point
there's the root issue: two participants with the same id, because the
local one was neither cleared nor set to the new one yet
(PARTICIPANT_JOINED come, before CONFERENCE_JOINED where we adjust the
id). Then comes CONFERENCE_JOINED and we try to update our local id.
We're updating the ID of both ghost and local participant. It could be
also that the delayed CONFERENCE_LEFT comes for the old conference, but
it's too late and it would update the id for both participants.

The approach here reasons that the ID of the local participant
may be reset as soon as the local participant and, respectively, her ID
is no longer involved in a recoverable JitsiConference of interest to
the user and, consequently, the app.

Co-authored-by: Pawel Domas <pawel.domas@jitsi.org>
Co-authored-by: Lyubo Marinov <lmarinov@atlassian.com>
2018-05-29 13:44:06 +02:00
Lyubo Marinov c672ffd435 Refine PARTICIPANT_LEFT for ID collisions
If the ID of a remote participant was the same as the ID of the local
participant (across multiple conferences), removing the remote
participant on PARTICIPANT_LEFT would remove the local participant.

Like the preceding commit "ref(base/conference): clear the 'conference'
field on WILL_LEAVE", this commit is part of the story how we are to
deal with conferences which take noticeable time to leave.
2018-05-29 12:24:39 +02:00
Lyubo Marinov 8cfc83f18c Protect against late PARTICIPANT_JOINED
Like the preceding commit "ref(base/conference): clear the 'conference'
field on WILL_LEAVE", this commit is part of the story how we are to
deal with conferences which take noticeable time to leave.

If a leave is delayed and the leaving JitsiConference manages to sneak a
PARTICIPANT_JOINED in, it may create a remote participant who even
collides with the local participant.
2018-05-29 12:24:39 +02:00
Lyubo Marinov fa9549582f Fix JitsiConference access
With so many abstractions called conference, I'm not surprised I made a
mistake and my reviewer didn't catch it.

As we are transitioning from remote participants identified by ID alone
to an ID-conference pair, the subsequent commits "Protect against late
PARTICIPANT_JOINED" and "Refine PARTICIPANT_LEFT for ID collisions"
caught the error.
2018-05-29 12:24:39 +02:00
paweldomas 11b7144ad0 ref(base/conference): clear the 'conference' field on WILL_LEAVE
Pawel Domas said:
The conference state field is referring to the current conference in
progress, so it feels like this field should be cleared as soon as we
declare that the conference is being left and the asynchronous process
of leaving the conference starts (which happens on
CONFERENCE_WILL_LEAVE).

Lyubo Marinov said:
Merely setting conference to undefined is incomplete because there are
other redux state properties associated with conference.

What we're doing here is redefining the redux action
CONFERENCE_WILL_LEAVE:

The redux action CONFERENCE_WILL_LEAVE represents the order of the user
to leave a JitsiConference instance. From the user's perspective, there's
no going back (with respect to the instance itself). The app will perform
due clean-up like leaving the associated room, but the instance is no
longer the focus of the attention of the user and, consequently, the app.

Now CONFERENCE_LEFT and CONFERENCE_WILL_LEAVE have more in common than
before and we can do a much better job by expressing the common parts in
source code. Additionally, our source code can be rewritten to better
express the meaning of any of these two actions.

Co-authored-by: Pawel Domas <pawel.domas@jitsi.org>
Co-authored-by: Lyubo Marinov <lmarinov@atlassian.com>
2018-05-29 12:24:39 +02:00
Lyubo Marinov 92fee790f2 Fix jsdoc 2018-05-28 18:54:11 -05:00
Daniel Ornelas 72487fa7c7 [iOS] Custom CallKit display name
Add ability to provide a display name in the configOverwrite object that
when available it will be used to customize the name of the meeting in
callkit screen and recent call list.

Co-authored-by: Daniel Ornelas <daniel.ob64@gmail.com>
Co-authored-by: Lyubo Marinov <lmarinov@atlassian.com>
2018-05-28 18:53:48 -05:00
hristoterezov 3dbb663922 feat(call-flows): Add config property for enabling call flows. (#3031) 2018-05-23 14:52:44 -07:00
Lyubo Marinov 592305df74 [RN] Fix processing outdated loadConfig requests (continued)
Co-authored-by: Lyubo Marinov <lmarinov@atlassian.com>
Co-authored-by: Paweł Domas <pawel.domas@jitsi.org>
2018-05-23 16:48:23 -05:00
Saúl Ibarra Corretgé 357b206831 [RN] Fix processing outdated loadConfig requests
This fix is based on storing the location URL object we are loading the
configuration for in the redux store. Once the config has been loaded (or it has
failed, for that matter!) we'll check if the current "config URL" is the same we
set, and discard the old one if they don't match.
2018-05-23 16:48:23 -05:00
Saúl Ibarra Corretgé d557a6505d [RN] Fix handling XMPP connection failures
After the connection is established, it can either be properly disconnected or
fail. We need to make sure to be listening for events for either.
2018-05-23 16:37:58 -05:00
hristoterezov 8b91afd80d fix(invite-sounds): Don't play joined sound for the poltergeist. 2018-05-23 15:22:01 -05:00
hristoterezov d89227829f feat(invite-sounds): Add expired and rejected sounds. 2018-05-23 15:22:01 -05:00
Lyubo Marinov ee9fcbb735 Remove remote participants who are no longer of interest
The Jitsi Meet app always has at most 1 conference of primary interest.
It may have to juggle with 2 JitsiConference instances at the same time
if 1 is in the process of being left and one is joining/joined. But the
one which is joining or joined (which we call conference in the
features/base/conference redux state) is the one "of interest", the
other one is "clean up". Consequently, the remote participants of the
conference "of interest" are the remote participants "of interest" and
the others are "clean up". In order to reduce the time during which
there may be multiplying remote thumbnails, clean the remote
participants who are no longer "of interest" up.
2018-05-23 09:46:15 -05:00
Lyubo Marinov db21e97c19 StateListenerRegistry
"Middleware" redux state changes, not actions.
2018-05-23 09:46:15 -05:00
Lyubo Marinov 8cd2bd272b Reduce direct read access to the features/base/participants redux state
As part of the work on fixing the problem with the multiplying
thumbnails, we've associated remote participant w/ JitsiConference.
However, there are periods of time when multiple JitsiConferences are in
the redux state (and that period is going to be shorted by
StateListenerRegistry). In order to give more control to the feature
base/participants, reduce the occurrences of direct access to the
features/base/participants redux state and utilize the feature's
existing read access functions. Which will allow us in the future to
enhance these functions to access participants which are relevant to the
current conference of interest to the user only.
2018-05-23 09:46:15 -05:00
Lyubo Marinov 771d60f954 Associate remote participant w/ JitsiConference (_UPDATED)
The commit message of "Associate remote participant w/ JitsiConference
(_JOINED)" explains the motivation for this commit.

Practically, _JOINED and _LEFT combined with "Remove remote participants
who are no longer of interest" should alleviate the problem with
multiplying remote participants to an acceptable level of annoyance.

Technically though, a remote participant cannot be identified by an ID
only. The ID is (somewhat) "unique" in the context of a single
JitsiConference instance. So in order to not have to scratch our heads
over an obscure corner, racing case, it's better to always identify
remote participants by the pair id-conference. Unfortunately, that's a
bit of a high order given the existing source code. So I've implemented
the cases which are the easiest so that new source code written with
participantUpdated is more likely to identify a remote participant with
the pair id-conference.

Additionally, the commit "Reduce direct read access to the
features/base/participants redux state" brings more control back to the
functions of the feature base/participants so that one day we can (if we
choose to) do something like, for example:

If getParticipants is called with a conference, it returns the
participants from features/base/participants who are associated with the
specified conference. If no conference is specified in the function
call, then default to the conference which is the primary focus of the
app at the time of the function call. Added to the above, this should
allow us to further reduce the cases in which we're identifying remote
participants by id only and get us even closer to a more "predictable"
behavior in corner, racing cases.
2018-05-23 09:46:15 -05:00
Lyubo Marinov 37cd5bb5b9 Associate remote participant w/ JitsiConference (_LEFT)
The commit message of "Associate remote participant w/ JitsiConference
(_JOINED)" explains the motivation for this commit.
2018-05-23 09:46:15 -05:00
Lyubo Marinov 983e62ffe9 Associate remote participant w/ JitsiConference (_JOINED)
The plan set in motion here is to associate remote participants with the
JitsiConference instances that created them in order to be able to
remove remote participants when a JitsiConference is no longer the
primary focus of the jitsi-meet app. And that's supposed to alleviate a
problem with multiplying remote thumbnails.

Doing all of the above in a single commit is a bit of a high order. So
I'm splitting the whole into multiple successive commits for the
purposes of observability, comprehension. Each commit is supposed to be
safe even if subsequent commits are not accepted, are reverted,
whatever. Obviously, without the successive commits, a commit may be
"unused".

One of the important pieces of the multiplying remote thumbnails "fix"
offered is removing remote participants who are no longer of interest
i.e. PARTICIPANT_LEFT. But in order for _LEFT to be implemented, _JOINED
must be implemented first.
2018-05-23 09:44:26 -05:00
Lyubo Marinov fcca15c827 Coding style 2018-05-23 08:48:13 -05:00
Saúl Ibarra Corretgé bbb1dce42a [RN] Simplify styles which fill the parent view
Turns out React Native offers an object with the following definition:

{
    bottom: 0,
    left: 0,
    position: 'absolute',
    right: 0,
    top: 0
}
2018-05-23 14:30:22 +02:00
Saúl Ibarra Corretgé 83ede66037 feat(toolbox): add disabledStyles to AbstractButton
It allows for specifying an override style collection which is applied when the
button is disabled.
2018-05-23 11:14:42 +02:00
Saúl Ibarra Corretgé 2128c84212 [RN] Add utility function to combine 2 sets of styles 2018-05-23 10:03:58 +02:00
Zoltan Bettenbuk a72463a302
Merge pull request #3014 from saghul/toolbox-toggled-labels
[RN] Toolbox toggled item labels
2018-05-22 21:00:32 +02:00
Saúl Ibarra Corretgé 7012c77fe9 feat(toolbox): add ability to specify a toggled label on AbstractButton 2018-05-22 12:01:00 +02:00
Saúl Ibarra Corretgé 99b5a41269 feat(toolbox): add ability to run a handler after click to AbstractButton 2018-05-22 11:32:09 +02:00
Lyubo Marinov 22ce001f14 Coding style: commends, formatting, sorting order 2018-05-20 22:58:34 -05:00
paweldomas 9650404099 fix(base/conference): leave a failed conference
Because a conference can fail before or after it's joined it must be
"left" in order to release any allocated resources like peerconnections,
tracks and all the other things.
2018-05-20 21:23:25 -05:00
paweldomas 7704809c4c feat(base/connection): log leave failure reason
Because there are multiple reasons on why a conference.leave() may fail
it's helpful to know if and why it happened.
2018-05-20 21:17:36 -05:00
hristoterezov 9131d2448d ref(i18next): Remove the base/config dependancy. 2018-05-18 13:34:08 -05:00
Zoltan Bettenbuk b57dad576a feat(participants): add isLocalParticipantModerator utility method 2018-05-18 13:18:24 -05:00
Saúl Ibarra Corretgé 494e8eb8d9 [RN] Set the local user ID on CONFERENCE_WILL_JOIN
Doing so in CONFERENCE_JOINED is too late because if we are moderators that
event will come first and we won't know what ID to match it with.

This is safe because our local ID is created early.
2018-05-18 13:18:24 -05:00
hristoterezov add89e2488 fix(dial-in-info): Qiuck fix of JitsiMeetJS undefined error. 2018-05-17 15:07:03 -05:00
Lyubo Marinov df8eb36d0e Coding style: comments 2018-05-16 16:49:03 -05:00
Saúl Ibarra Corretgé f54f5df428 [RN] Implement a new UI for the Toolbox
- 5 buttons in the (now single) toolbar
- Overflow menu in the form of a BottomSheet
- Filmstrip on the right when in wide mode
2018-05-16 12:18:38 -05:00
hristoterezov c344a83376 Outgoing call ringtones (#2949)
* fix(PresenceLabel): Use translated strings for the presence label.

* feat(sounds): Implements loop and stop functionality.

* feat(invite): Add ringtones.

* fix(invite): Code style issues.
2018-05-16 11:03:10 -04:00
virtuacoplenny ee74f11c3d
feat(recording): frontend logic can support live streaming and recording (#2952)
* feat(recording): frontend logic can support live streaming and recording

Instead of either live streaming or recording, now both can live together. The
changes to facilitate such include the following:
- Killing the state storing in Recording.js. Instead state is stored in the lib
  and updated in redux for labels to display the necessary state updates.
- Creating a new container, Labels, for recording labels. Previously labels were
  manually created and positioned. The container can create a reasonable number
  of labels and only the container itself needs to be positioned with CSS. The
  VideoQualityLabel has been shoved into the container as well because it moves
  along with the recording labels.
- The action for updating recording state has been modified to enable updating
  an array of recording sessions to support having multiple sessions.
- Confirmation dialogs for stopping and starting a file recording session have
  been created, as they previously were jquery modals opened by Recording.js.
- Toolbox.web displays live streaming and recording buttons based on
  configuration instead of recording availability.
- VideoQualityLabel and RecordingLabel have been simplified to remove any
  positioning logic, as the Labels container handles such.
- Previous recording state update logic has been moved into the RecordingLabel
  component. Each RecordingLabel is in charge of displaying state for a
  recording session. The display UX has been left alone.
- Sipgw availability is no longer broadcast so remove logic depending on its
  state. Some moving around of code was necessary to get around linting errors
  about the existing code being too deeply nested (even though I didn't touch
  it).

* work around lib-jitsi-meet circular dependency issues

* refactor labels to use html base

* pass in translation keys to video quality label

* add video quality classnames for torture tests

* break up, rearrange recorder session update listener

* add comment about disabling startup resize animation

* rename session to sessionData

* chore(deps): update to latest lib for recording changes
2018-05-16 07:00:16 -07:00
Zoltan Bettenbuk 5fd0f95a89
Merge pull request #2976 from saghul/bottom-sheet-orientation
[RN] Support landscape and portrait orientations in BottomSheet
2018-05-16 10:28:41 +02:00
Zoltan Bettenbuk 0d1d0d06a4
Merge pull request #2977 from saghul/dialog-modal-orientation
[RN] Support landscape and portrait orientations in Dialog
2018-05-16 10:28:28 +02:00
Saúl Ibarra Corretgé bce2438471 feat(toolbox): rename label / tooltip getters in ToolboxItem 2018-05-15 14:12:39 -05:00
Lyubo Marinov 447035c8b2 Coding style 2018-05-15 14:12:39 -05:00
Lyubo Marinov 3aff4967f1 Keep buttons in their associated features
Contributing all buttons in one place goes against the designs that we
set out at the beginning of the project's rewrite and that multiple of
us have been following since then.
2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé eea6af51db [RN] Support landscape and portrait orientations in Dialog 2018-05-15 17:55:33 +02:00
Saúl Ibarra Corretgé c6f99f3dda [RN] Support landscape and portrait orientations in BottomSheet
One has to be explicit on iOS, otherwise it seems to be locked to portrait only.
2018-05-15 17:12:40 +02:00
Lyubo Marinov 75fe3e3b9d [RN] If base/config knows a domain, then the app knows it
Knowledge is power, man!

The config.js cache predates the feature base/known-domains.
Technically, it's also able to recall more domains that the feature
recent-list can (because the latter limits its entries).
2018-05-14 16:33:02 -05:00
Lyubo Marinov 5e8ecc5fee Coding style: naming, comments 2018-05-14 16:31:47 -05:00
Zoltan Bettenbuk ee94d79ee6 [RN] Add known-domains feature 2018-05-14 16:27:48 -05:00
Zoltan Bettenbuk 44a65eb329 Move local participant join to base/participants 2018-05-09 15:20:22 +02:00
zbettenbuk cc7e15ab8f Fix accidental overwrite of localParticipant with empty values 2018-05-09 15:20:22 +02:00
zbettenbuk 959db3a665 Make web use the redux settings/profile 2018-05-09 15:20:22 +02:00
Saúl Ibarra Corretgé 4fdd71d1bd [RN] Refactor SimpleBottomSheet
Make it more generic by accepting any content except of just rows with text and
icons.

In addition, rework its structure so the animation is smoother, by putting the
background overlay outside of the Modal. This way, the animation doesn't affect
the background, which won't slide down.
2018-05-08 22:25:25 +02:00
zbettenbuk 0826ffa974 [RN] Increase header height 2018-05-07 10:05:06 -05:00
paweldomas a9ee5944e1 ref(base/connection): conferenceFailed error argument
Introduce ConnectionFailedError type.
2018-05-04 13:02:19 +02:00
paweldomas 36ecc99b5b fix(auth/external API): CONFERENCE_FAILED with login dialog
Delay the CONFERENCE_FAILED event until the user cancels the login
dialog using the 'recoverable' event flag.
2018-05-04 13:02:19 +02:00
Daniel Ornelas e5309a6482 [iOS] Proxy CallKit API to be a feature of the SDK
With this the RN component and the consumer app can share same CallKit
provider, configuration, and enable to be part of multiple listeners of
the CallKit flow events. The main driver of this is to enable the
consumer app to be able to report an incoming call to the OS before
loading the JitsiMeetView. Once the user answers the call, the app can
instantiate a JitsiMeetView, pass the CallKit call UUIID, and the Jitsi
Meet components will handle the connection and report back to CallKit
that the  call has been established.
2018-05-03 18:04:59 -05:00
zbettenbuk 1eac4c51ca [RN] Add missing key prop to Android page indicator 2018-05-01 12:57:03 -05:00
zbettenbuk 68608478f6 Refactor PagedList components to be independent from the lists it renders 2018-05-01 09:09:32 -05:00
Louis Chen 627b9d319c [RN] Pollyfill DOMParser
It's required by lib-jitsi-meet when using WebSockets.
2018-04-30 08:52:41 +02:00
virtuacoplenny aaf2f428e6 feat(recording): new label for live streaming (#2890) 2018-04-29 21:30:07 -07:00
virtuacoplenny 0a0256501c feat(recording): new icon when recording is active (#2884)
- Update font files to add new icon.
- Update markup and style so the icon has a small background
  to fill in the text of the icon.
- Remove some css transitions that don't seem to do much.
2018-04-26 14:24:52 -07:00
virtuacoplenny e098ad87f4 feat(icons): add new recording button icon (#2834)
* feat(icons): add new recording button icon

* feat(toolbar): show different rec/streaming icon
2018-04-26 10:26:41 -07:00
hristoterezov f14095ecfc feat(deep_linking): add analytics
In order to be able to add analytics to the deep-linking pages the
lib-jitsi-meet initialization has been moved so it happens earlier.

The introduced `initPromise` will eventually disappear, once conference is
migrated into React and / or support for Temasys is dropped. At that stage, it
can be turned into a sync function which all platforms share.
2018-04-26 10:11:34 +02:00
zbettenbuk 6947926494 Add dynamic move threshold to pnz touch detection 2018-04-25 16:35:22 -05:00
George Politis 4e36127dc7 config: Whitelists enable{Remb,Tcc} and minParticipants. 2018-04-24 16:01:23 -05:00
Дамян Минков 8b1aff5512 Adds in memory log storage, to be used while testing. (#2858)
* Adds in memory log storage, to be used while testing.

Enabling it only when config.debug is set, a configuration provided by jitsi-meet-torture.

* Moves to using config.testing.testMode property for logs storage.

* Fixes comments.
2018-04-24 13:56:54 -05:00
paweldomas 2af76ebcf9 fix(testing): add TestHint for LargeVideo
Since the main conference container is no longer "clickable" there must
be a way for clicking on the "large video". A clickable TestHint nested
in ParticipantView makes it easier for dealing with the fact that the
click handler is not always on the same component (required for the
pinch and zoom feature to work correctly).
2018-04-19 16:49:22 -05:00
paweldomas 6931b8f2fb feat(TestHint): add 'onPress' property
Allows to bind a click handler to a TestHint.

When a mobile test wants to click an UI element it must be able to
locate it through the accessibility layer. Now the problem with that is
that there is currently no uniform way for finding element on both iOS
and Android. This problem is solved by TestHint component which takes
an id parameter which then can be specified in the corresponding java
TestHint class in jitsi-meet-torture to easily find it. By being able to
add a click handler to a TestHint, it's possible to duplicate original
handler under nested TestHint and then find it easily on the torture
side.
2018-04-19 16:49:22 -05:00
paweldomas adec8e6438 ref(TestHint): render only in test mode
Adds the logic to render TestHint only when the test mode is enabled
in order to be able to put independent TestHints in other places than
the TestConnectionInfo component.
2018-04-19 16:49:22 -05:00
paweldomas 382c548cf9 ref(testing): move 'testing' feature to base 2018-04-19 16:49:22 -05:00
Lyubo Marinov 66bf5cf966 [RN] Avoid "pinch to zoom" onPress
It's too sensitive and most of the time I cannot perform an onPress. In
contrast, the builtin/default/standard onPress is noticeably more
forgiving. While we fix the sensitivity of "pinch to zoom", don't use
its onPress unless absolutely necessary i.e. use it only for desktop
streams.
2018-04-17 17:42:46 -05:00
zbettenbuk 008645568c Fix startAudioOnly and startWithVideoMuted collision on start from URL
Zoltan Bettenbuk suggested the following:

         const state = getState();

          if (desiredTypes.length === 0) {
 -            const { audio, video } = state['features/base/media'];
 -
 -            audio.muted || desiredTypes.push(MEDIA_TYPE.AUDIO);
 -            video.muted || desiredTypes.push(MEDIA_TYPE.VIDEO);
 +            const startAudioOnly = getPropertyValue(state, 'startAudioOnly');
 +            const startWithAudioMuted
 +                = getPropertyValue(state, 'startWithAudioMuted');
 +            const startWithVideoMuted
 +                = getPropertyValue(state, 'startWithVideoMuted');
 +
 +            if (!startWithAudioMuted) {
 +                desiredTypes.push(MEDIA_TYPE.AUDIO);
 +            }
 +            if (!startAudioOnly && !startWithVideoMuted) {
 +                desiredTypes.push(MEDIA_TYPE.VIDEO);
 +            }
          }

          const availableTypes

The final commit is really a different implementation of the same idea
but takes into account that the state of base/media already contains the
intent of the URL and notices the delay in the realization of the
background app state.

Additionally, unbreaks one more case where setAudioOnly is incorrectly
dispatched on CONFERENCE_LEFT or CONFERENCE_FAILED and, consequently,
overrides the intent of the URL.
2018-04-16 22:02:37 -05:00
Lyubo Marinov 13e0e18f37 Coding style: formatting, typos 2018-04-16 18:09:08 -05:00
zbettenbuk fc25125667 Fix app crash with special characters in the room name 2018-04-16 18:09:08 -05:00
zbettenbuk e30d141cec Proper use of getPropertyValue in base/media 2018-04-13 21:57:40 -05:00
zbettenbuk 1513e1f3b3 Make getPropertyValue's config easier to use 2018-04-13 21:57:07 -05:00
hristoterezov eb19f94598 Deeplinking (#2760)
* feat(Deeplinking): Implement for web.

* ref(unsupported_browser): Move the mobile version to deeplinking feature

* feat(deeplinking_mobile): Redesign.

* fix(deeplinking): Use interface.NATIVE_APP_NAME.

* feat(dial_in_summary): Add the PIN to the number link.

* fix(deep_linking): Handle use case when there isn't deep linking image.

* fix(deep_linking): css

* fix(deep_linking): deeplink -> "deep linking"

* fix(deeplinking_css): Remove position: fixed

* docs(deeplinking): Add comment for the openWebApp action.
2018-04-13 17:00:40 -07:00
paweldomas c03e66954d fix(base/tracks): local track for video already exists
The _setMuted method in a corner case was making an attempt to create
second video track, because it was not taking pending tracks into
account.
2018-04-11 22:40:51 -05:00
virtuacoplenny 157800c494 fix(toolbar): video quality button shows current video quality (#2761) 2018-04-11 13:04:40 -07:00
Zoltan Bettenbuk 78ff0f7864 Separate handling config and profile with precedence (#2784) 2018-04-11 10:02:31 -07:00
Leonard Kim 5270da4c14 ref(toolbar): remove reference to unused config autoEnableDesktopSharing 2018-04-11 10:35:01 +02:00
paweldomas 8b2ce21e1a fix(RN): bundle sound files in release build
On Android the files will be copied to the assets/sounds directory of
the SDK bundle on build time. To play the "asset:/" prefix has to be
used to locate the files correctly.

On iOS each sound file must be added to the SDK's Xcode project in order
to be bundled correctly. To playback we need to know the path of the SDK
bundle which is now exposed by the AppInfo iOS module.
2018-04-10 10:59:52 +02:00
Zoltan Bettenbuk 79b7e1641d Add pinch zoom functionality 2018-04-10 01:20:53 -05:00
Zoltan Bettenbuk decbcefbd4 [RN] Don't press on Conference in preparation for 'pinch to zoom'
TouchableWithoutFeedback and TouchableHighlight interfere with the
implementation of 'pinch to zoom' to come. We prepare for it by driving
the onClick/onPress handler(s) out of Conference, through LargeVideo and
ParticipantView into Video itself where the bulk of 'pinch to zoom' will
be implemented.
2018-04-10 01:20:52 -05:00
Zoltan Bettenbuk cb70c084b3 [RN] "The View is never the target of touch events"
In preparation for "pinch to zoom" support in desktop streams on mobile, make
certain Views not intervene in touch event handling. While the modification is
necessary for "pinch to zoom" which is coming later, it really makes sense for
the modified Views to not be involved in touching because they're used to aid
layout and/or animations and are to behave to the user as if they're not there.
2018-04-10 01:20:52 -05:00