Commit Graph

1399 Commits

Author SHA1 Message Date
hristoterezov 9131d2448d ref(i18next): Remove the base/config dependancy. 2018-05-18 13:34:08 -05:00
Saúl Ibarra Corretgé 44c498a566 [RN] Adjust toolbar button sizes / margins
- add 10px of padding on the sizes of the toolbar
- make the button margin smaller (from 10 to 7)
- increate the secondary button factor to 85%, thus rising the maximum secondary
  button size to 50 (from the previous 48)
2018-05-18 13:19:17 -05:00
Zoltan Bettenbuk 192f1d44f5 [RN] Add unlock room function to mobile 2018-05-18 13:18:24 -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
Lyubo Marinov 21c1e4abc4 Coding style: formatting, comments 2018-05-18 08:58:08 -05:00
Saúl Ibarra Corretgé 5bd975e3f3 [RN] Show / hide the toolbox based on the participant count
Show it if we are the only participant, and hide it the moment someone else
joins the conference.
2018-05-18 08:07:34 -05:00
hristoterezov add89e2488 fix(dial-in-info): Qiuck fix of JitsiMeetJS undefined error. 2018-05-17 15:07:03 -05:00
Bettenbuk Zoltan 180141cefb [RN] Fix ios audio issue with locked rooms 2018-05-17 10:43:48 +02: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
Saúl Ibarra Corretgé 8a160fd9ab feat(toolbox): fix ToggleCameraButton tooltip / label 2018-05-15 14:12:39 -05:00
Saúl Ibarra Corretgé cd57477b68 feat(toolbox): restore emitting UI events for legacy code 2018-05-15 14:12:39 -05:00
Lyubo Marinov f1123a8cdd Restore the audio and video mute/unmute keyboard shortcuts
I don't think it's realistic that we'd merge a PR that breaks the most
important shortcuts of the app (in my opinion): audio and video
mute/unmute.
2018-05-15 14:12:39 -05:00
Lyubo Marinov 447035c8b2 Coding style 2018-05-15 14:12:39 -05:00
Lyubo Marinov 7fe421aeba Removes unnecessary source code 2018-05-15 14:12:38 -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
Lyubo Marinov a42496ba53 Coding style 2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé 9ca7ca9515 feat(toolbox): move visibleButtons to redux
Technically we still depend on interfaceConfig, but this paves the way for when
that is no longer the case.
2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé 9a3effe97a feat(toolbox): move OverflowMenu show logic to redux 2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé a2834a2495 [RN] Refactor Toolbox
Create standalone components for each feature and move all state to them.
Toolbars are now dummy containers.
2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé 450400b768 feat(filmstrip): refactor filmstrip only toolbar
- Move the toolbar to the filmstrip feature
- Use all the buttons from the toolbox feature
2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé c7d72ee3f6 feat(toolbox): create SettingsButton
Only on web, since there is currently no equivalent on mobile. It encapsulates
all funcionality related to opening the settings dialog / panel.
2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé 01cb4ac7c8 feat(alwaysontop): refactor toolbox
Use the new abstractions, which already take care of the rendering part.
2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé b634f6b200 feat(toolbox): implement buttons using ToolboxItem
Currently the following are implemented:

- AudioMuteButton
- HangupButton
- VideoMuteButton

In order to implement these new buttons a new abstract class was introduced,
which abstracts the ToolboxItem into a button with enough hooks so a stateful
and a stateless version of it can be created.

This patch only adds the stateful implementation of the aforementioned buttons.
2018-05-15 14:12:38 -05:00
Saúl Ibarra Corretgé 8d94cc5cb2 feat(toolbox): introduce ToolboxItem
This abstraction represents an action which can go anywhere in a toolbox (be
that the main toolbar or the overflow menu) and it's platform independent.

It does not depend on Redux, thus making it stateless, which facilitates its use
in stateful button implementations as well as stateless ones.
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
Bettenbuk Zoltan df7b8e51fc [RN] Improve video switch style and remove react warning 2018-05-15 17:42:54 +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 631f51d627 [RN] Legacy support of calendar-sync's knownDomains
Knowledge is power, man!

We moved "knownDomains" from calendar-sync to base/known-domains.
However, we do have an official release in the app stores and I'd like
us to not throw away the knowledge it has acquired.
2018-05-14 16:32:30 -05:00
Lyubo Marinov d4dea22576 [RN] If recent-list knows a domain, then the app knows it 2018-05-14 16:32:19 -05:00
Lyubo Marinov 5e8ecc5fee Coding style: naming, comments 2018-05-14 16:31:47 -05:00
Zoltan Bettenbuk 46bc63b79e [RN] If calendar-sync knows a domain, then the app knows it 2018-05-14 16:28:38 -05:00
Zoltan Bettenbuk ee94d79ee6 [RN] Add known-domains feature 2018-05-14 16:27:48 -05:00
Leonard Kim e649ae9016 fix(toolbar): show profile button if guest
If authenticated using JWT, don't show the profile button but
do show it if a guest.
2018-05-14 13:05:24 -04:00
Lyubo Marinov bd7c9473e7 [Android] Fix possible TypeError in multi-JitsiMeetView SDK consumers
If multiple JitsiMeetView instances are created (not necessarily
existing at once), it's possible to hit a TypeError when reading the
React Component props of the currently mounted App. Anyway, in certain
places we're already protecting against that out of abundance of caution
so it makes no sense to not protect everywhere.
2018-05-09 23:45:24 -05:00
hristoterezov 53971d0b50 feat(DeepLinkingMobilePage): Add dynamic links support. 2018-05-09 09:16:02 -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
Lyubo Marinov 6a0de0ddde Coding style: consistency, formatting, naming 2018-05-07 10:05:37 -05:00
zbettenbuk b777322fdc [RN] Make the audio-video labels touchable 2018-05-07 10:05:22 -05:00
zbettenbuk 0826ffa974 [RN] Increase header height 2018-05-07 10:05:06 -05:00
hristoterezov 6aae56527f fix(web_ios): Not rendering when the browser back button is pressed. 2018-05-07 15:26:19 +02:00
Lyubo Marinov 7ffdaf59c7 [RN] Add an example how to consume the public SDK invite API 2018-05-07 00:38:49 -05:00
virtuacoplenny d62ac72cfa Various pixel pushing, tooltip copy changes (#2918)
* fix(toolbar): make button hover bigger

* fix(toolbar): make hangup button bigger

* fix(always-on-top): make toolbar and buttons same sizes as main toolbar

* fix(toolbar): change some tooltips

* fix(toolbar): adjust side panel and filmstrip for new toolbar sizes
2018-05-04 13:10:48 -07: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
paweldomas 82f5eb894b ref(external API): emit CONFERENCE_FAILED on CONNECTION_FAILED
It seems that the external API will not send any event to let the sdk
consumer know that the conference has failed if the problem occurs at
the establishing of XMPP connection stage. That's because the config was
loaded successfully, but the conference instance does not exist yet, so
neither base/config nor base/conference will emit any failure.
2018-05-04 13:02:19 +02:00
paweldomas 91a65735f9 ref(external API): emit CONFERENCE_WILL_JOIN on SET_ROOM
Make the external API emit CONFERENCE_WILL_JOIN early on SET_ROOM action
which occurs before the XMPP connection is created. At this point we
know that config has loaded and if there's a valid conference room to
be joined. We were thinking of doing that even on CONFIG_WILL_LOAD,
but that seemed to be to risky at this point.
2018-05-04 13:02:19 +02:00
Lyubo Marinov 5e79bbecef Codying style: naming, formatting, comments 2018-05-03 18:04:59 -05: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
Lyubo Marinov 520bb8bd22 Coding style/naming: invite & invitee(s)
Hristo Terezov, Chris Cordle, and I/Lyubomir Marinov agreed that we'd
try to use "invite" & "invitee(s)" in Web/React's iframe API,
mobile/react-native's SDK invite API, and internally for the purposes of
consistency, ease of understanding, etc.
2018-05-03 10:31:15 +02:00
hristoterezov d1af11c67e ref(sendInvitesForItems): convert to action. 2018-05-03 10:31:15 +02:00
Leonard Kim a793742e3a fix(always-on-top): change button order
To be consistent with how the main window toolbar has audio mute,
hangup, and then video mute.
2018-05-02 19:04:13 +02:00
hristoterezov 3d8d5e3107 fix(deep-linking-mobile): Path of the images. 2018-05-02 11:16:00 -05:00
Saúl Ibarra Corretgé 552fadc4a4 [RN] Don't process invite events if the external API scope doesn't match
This can happen if there are multiple JitsiMeetView instances are active at the
same time, because there is a single bridge, which means all of them would get
the events.
2018-05-02 10:56:41 -05:00
Saúl Ibarra Corretgé ed7d8ac57e [RN] Cleanup subscriptions for the invite module 2018-05-02 10:56:41 -05:00
Saúl Ibarra Corretgé 6c602accae [iOS] Fixup style 2018-05-02 10:56:41 -05:00
paweldomas 17ae89a56c ref(PiP/actions): remove 'is ok to enter PiP' check
Currently enterPictureInPicture action can only be dispatched when
the app is on the conference view and the enter PiP button is displayed,
so no check should be necessary.
2018-05-02 17:06:24 +02:00
paweldomas 565fd37f28 fix(Android|PiP): do not invoke 'enterPictureInPicture' in PAUSED state
Activity.enterPictureInPictureMode method must be invoked synchronously
on userLeaveHint callback in order to be sure that the current Activity
is still visible (does not transit to PAUSED state). Previously if the
asynchronous processing would be delayed enough for the Activity to go
into the PAUSED state it will be too late to go into the PiP mode.
2018-05-02 17:06:24 +02:00
Lyubo Marinov effd3728b6 [RN] add support for inviting participants during a call on mobile (2) 2018-05-02 12:54:02 +02:00
Leonard Kim f015f4edc3 feat(large-video): background blur through canvas and feature flag
To reduce the amount of motion that has to be blurred, use a canvas
to essentially set the FPS of the video background. This canvas
component is behind a temporary feature flag, as well as being able
to disable the blur, so it can be played around with on deployed
environments.
2018-05-01 17:11:25 -05:00
zbettenbuk 1eac4c51ca [RN] Add missing key prop to Android page indicator 2018-05-01 12:57:03 -05:00
zbettenbuk 54b6db02d8 Fix error on conference join when calendar is disabled 2018-05-01 09:09:32 -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 f4060975d1
feat(device-selection): design tweaks (#2802)
- Change copy
- Add labels to dropdowns
- Adjust color and positioning
2018-04-27 18:43:11 -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
paweldomas 81fc961998 fix(invite): check Toolbox render method error
The app will crash for me with react complaining about not a component
being passed.
2018-04-26 15:12:03 -05: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
virtuacoplenny ed395036b7 fix(info): change jsdoc to avoid linting warning (#2881) 2018-04-26 10:10:24 -07:00
Zoltan Bettenbuk 4f8fd1019b Separate local thumbnail in filmstrip (#2848)
* Separate local thumbnail in filmstrip

* style(Filmstrip.native): utilize full line length
2018-04-26 07:44:23 -05: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
hristoterezov 784d94b30f fix(deeplinking): logo image 2018-04-25 14:19:08 -05:00
Saúl Ibarra Corretgé 1d7e0845aa [RN] use the share button if the invite button is not enabled 2018-04-25 18:58:06 +02:00
Ryan Peck f64c13d4b7 [RN] add support for inviting participants during a call on mobile
* Button conditionally shown based on if the feature is enabled and available
* Hooks for launching the invite UI (delegates to the native layer)
* Hooks for using the search and dial out checks from the native layer (calls back into JS)
* Hooks for handling sending invites and passing any failures back to the native layer
* Android and iOS handling for those hooks

Author: Ryan Peck <rpeck@atlassian.com>
Author: Eric Brynsvold <ebrynsvold@atlassian.com>
2018-04-25 18:58:06 +02: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 9cbcbf6e26 fix(PictureInPictureModule): catch the RuntimeException
Activity.enterPictureInPictureMode can fail for a couple of reasons
mentioned in the JSDoc:

"The system may disallow entering picture-in-picture in various cases,
including when the activity is not visible, if the screen is locked or
if the user has an activity pinned."

It seems to be safe to assume that those cases will be caught by
a RuntimeException handler (only RuntimeExceptions can be left without
explicit catch block).

Anyway the root cause for problems is the fact that the current process
for going to the picture in picture mode is not synchronised with
Activity's lifecycle. On Activity's "userLeaveHint" callback we dispatch
async task to the JS code which only then after dispatching some more
stuff eventually call native method that enter PiP. In case we spend too
much time on the JS side and the Activity goes to PAUSED state the call
will fail with IllegalStatException: "activity is not visible",
"activity is paused" etc. This means with this fix the app will not
crash, but we'll see it sometimes not go to the PiP mode as expected.
2018-04-22 00:41:18 -05:00
virtuacoplenny 2c4a3b0f60 Show the YouTube live stream URL (#2837)
* feat(recording): show the YouTube live stream URL

- From the start live stream dialog, push up the broadcast ID
  of the chosen broadcast. It is assumed the ID can be used to
  create the YouTube link.
- Listen for lib-jitsi-meet to emit updates of the known live
  stream URL, shove it into redux, and have InfoDialog display
  it.

* ref(info): pass in dial in and live stream url

Passing these values in should trigger AtlasKit InlineDialog
to re-render and reposition itself.

* ref(info): use conference existence as trigger for autoshowing dialog

* feat(info): add live stream link to invite copy

* Revert "ref(info): use conference existence as trigger for autoshowing dialog"

This reverts commit 1072102267.

* hidden -> url

* _onClickHiddenURL -> _onClickURLText
2018-04-20 10:28:16 -07: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
Saúl Ibarra Corretgé 2861d8d24e misc: remove dead code 🔥🔥🔥 (#2844)
- old toolbox actions
- chat command processor
- room subject handling
2018-04-19 10:24:16 -07:00
Saúl Ibarra Corretgé 8daa13cd99 [iOS] Fix statusbar color while in a conference
Be explciit about the appearance we desire, since each mounted StaturBar
component will override the existing values. In this case, the problem was
caused because the default on iOS is dark, whereas it's light on Android.

Set it to light so it works consistently across both, which is what we want.
2018-04-19 10:56:09 +02: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 63c165ee8b More generic way to refresh lists on the welcome screen 2018-04-17 17:42:46 -05:00
zbettenbuk 374e3ccf2c Properly gate calendar feature on-off 2018-04-17 17:41:12 -05:00
Leonard Kim 1e69dc93d6 ref(toolbar): kill Stateless Toolbar and Invite, Feedback, Profile buttons 2018-04-17 20:22:00 +02: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 8c0bb377ba Calendar list shouldn't show unnormalised URIs 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
virtuacoplenny 4bd94fc94c
fix(invite): tweak invite modal copy and avatar sizes (#2818) 2018-04-16 13:58:20 -07:00
virtuacoplenny 41e1c3a2e2 fix(tooltip): description prop deprecated, use content instead (#2806) 2018-04-16 10:21:01 -07:00
zbettenbuk 56d8210e35 Add ability to detect calendar permission description in the plist file (iOS) 2018-04-15 23:16:44 -05:00
Lyubo Marinov f1ab160c62 Coding style: formatting, naming 2018-04-15 23:16:44 -05:00
Lyubo Marinov eac74aa0b7 [RN] Fix _getRouteToRender after Deeplinking (#2760) 2018-04-15 23:16:44 -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
virtuacoplenny 0539e8f2df
fix(recording): do not spell check stream key input (#2811) 2018-04-13 19:37:06 -07: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
virtuacoplenny 219b93a3c9 fix(recording): fetch events also for available broadcasts (#2810)
* fix(recording): fetch events also for available broadcasts

Only "persistent" broadcasts were being fetched using the
YouTube API. Fetching "all" will get persistent broadcasts
and events. If events use a custom encoder then the stream
key can be obtained. If google hangouts is used for the event
then a stream key will not be obtainable; in those cases
input empty string as the stream key.

* squash: fix typos, reword comments, use object for preventing duplicate broadcasts
2018-04-13 13:49:24 -07:00
paweldomas 8f142d5ec4 doc(testing/actions): fill missing in 'setConnectionState' 2018-04-13 11:35:25 -05:00
Leonard Kim 5cf16a20d3 ref(always-on-top): refactor to stop using old toolbar components 2018-04-13 10:09:04 +02:00
virtuacoplenny be78ab5317 fix(welcome-page): clear update name timeout on unmount (#2800) 2018-04-12 14:23:30 -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
virtuacoplenny 3285d647e6 feat(feedback): tweak styling (#2791)
- Green stars
- Label for feedback box
- Adjust margins/padding
2018-04-11 11:31:03 -07:00
Zoltan Bettenbuk 78ff0f7864 Separate handling config and profile with precedence (#2784) 2018-04-11 10:02:31 -07:00
Leonard Kim 4f157b71f3 ref(toolbar): remove custom (old) InviteButton dropdown config 2018-04-11 10:35:01 +02:00
Leonard Kim 5270da4c14 ref(toolbar): remove reference to unused config autoEnableDesktopSharing 2018-04-11 10:35:01 +02:00
Leonard Kim abee3331aa ref(toolbar): remove remnant of custom tooltip display on demand
The feature was not ported to the new toolbar. Arguable these
can all be moved into notification but for now simply the
logic will be removed and worked on again as demand arised.
2018-04-11 10:35:01 +02:00
paweldomas 4d942440db feat: add TestConnectionInfo for mobile
Adds TestConnectionInfo component which exposes some internal app state
to the jitsi-meet-torture through the UI accessibility layer. This
component will render only if config.testing.testMode is set to true.
2018-04-10 16:43:12 -05:00
paweldomas 461540d874 ref(stats): start the statsEmitter for both mobile and web
Moves the statsEmitter.start() invocation to the middleware of
the connection-indicator feature, so that it's started for both mobile
and web (now mobile needs RTP stats for the tests).
2018-04-10 16:43:12 -05:00
virtuacoplenny f34686afee fix(recording): return true to close stop recording modal on cancel (#2776) 2018-04-10 15:51:49 -05:00
virtuacoplenny ea1aef0703 fix(toolbar): remove ref to removed MAIN_TOOLBAR_BUTTONS (#2787) 2018-04-10 15:51:37 -05: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
Leonard Kim c377219013 feat(info): invite url as an anchor for copying from context menu 2018-04-10 09:41:38 +02:00
Leonard Kim 10c8d380b7 fix(video-quality): different tooltips for different definitions 2018-04-10 09:39:37 +02:00
Leonard Kim 7e9a64d7c1 fix(quality-label): show eye icon when for muted video
Instead of continuing with HD/SD/LD, show the eye icon
for when the participant on large video is muted or has
no video.
2018-04-10 09:39:37 +02:00
Leonard Kim a783939f12 ref(toolbar): remove old InviteButton 2018-04-10 09:34:52 +02:00
Leonard Kim 6883ee0141 ref(toolbar): rename ToolbarButtonV2 to ToolbarButton 2018-04-10 09:34:52 +02:00
Leonard Kim 1eee20dd5a ref(toolbar): remove contact list 2018-04-10 09:34:52 +02:00
Leonard Kim 7d86e3f8e7 ref(toolbar): remove Video Quality Button 2018-04-10 09:34: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
virtuacoplenny 0afe72d42b fix(toolbar): tweak overflow menu order (#2781) 2018-04-09 23:06:01 -07:00
virtuacoplenny d8ad39ed3f fix(welcome-page): modify styling for narrow screens (#2724)
* fix(welcome-page): modify styling for narrow screens

* squash: fix autoscrolling on mobile safari
2018-04-09 15:50:57 -05:00
virtuacoplenny 16c2bc2d15 fix(invite): do not show caret in input (#2774) 2018-04-09 12:40:17 -07:00
Saúl Ibarra Corretgé b73b51f1f4 feat(toolbox): axe the old toolbox (#2731)
This PR takes The Bulldozer Approach (R): removes the old toolbox and lots of
associated code, though not all of it. Subsequent cleanups will follow.
2018-04-08 22:03:26 -07:00
paweldomas 968b279b37 feat(android): support NAT64
Adds Nat64InfoModule which resolves IPv6 addresses for IPv4 addresses
in IPv6 only network where jitsi-meet deployment does not provide any
IPv6 addresses as ICE candidates.
2018-04-05 10:21:59 -05:00
Zoltan Bettenbuk 0456df239f Fix case sensitive recent list (#2730) 2018-04-04 12:54:42 -07:00
virtuacoplenny 2f23f8e400 Info dialog: bold labels, no url truncation, only auto show on lonely call (#2619)
* fix(info): bold info labels

* fix(info): do not truncate url

* feat(info): show only during a lonely call
2018-04-04 08:58:54 -07:00
Zoltan Bettenbuk 2412239206 [RN] Assorted hintbox fixes
* Align hint box text to center

* Fix disappearing hint box on android
2018-04-04 14:50:12 +02:00
Zoltan Bettenbuk cc6e04ddf8 [RN] Fix calendar alerts when case sensitive URLs are used 2018-04-04 11:21:02 +02:00
paweldomas 6f11bbc400 feat(mobile): handle kicked out of the conference
Being kicked out of the conference will result with a conference failed
event with 'conference.kicked' reason and take the user back to
the welcome page by navigating to 'undefined'.
2018-04-03 16:02:15 -05:00
virtuacoplenny 7c08116dc2 ref(toolbar): add accessibility labels for torture tests (#2685)
* ref(toolbar): add accessibility labels for torture tests

* squash: update propTypes
2018-04-03 12:32:00 -07:00
Leonard Kim b76ab305e3 fix(welcome-page): prevent form submit to prevent page refresh 2018-03-30 15:16:22 -05:00
Leonard Kim 358ce0799e fix(toolbar): the conference obj is needed to submit feedback 2018-03-30 14:45:27 -05:00
Leonard Kim 02a31746fb fix(toolbar): do not use toggle class for recording 2018-03-30 13:07:38 -05:00
Leonard Kim 4c49e3bec0 fix(toolbar): use old toolbar logic for showing screenshare
I don't understand the old showDesktopSharingButton action
but I've tried my best to copy it over. There is an existing
issue where the keyboard shortcut gets registered when it
probably shouldn't because screensharing is disabled. It will
be fixed soon with refactoring of the entire logic determining
whether or not to show the screensharing button.
2018-03-29 13:38:42 -05:00
Leonard Kim 0a086fa3f7 fix(toolbar): do not show invite button if features not available
This is instead of showing the button with a tooltip about it
being disabled.
2018-03-29 13:38:42 -05:00
Zoltan Bettenbuk a3c00021de [RN] Fix showing user avatar in sidebar 2018-03-29 11:47:32 +02:00
virtuacoplenny 1e0a3ceb74 fix(chat): polyfills for lib-jitsi-meet ChatRoom#onPresence (#2678)
The onPresence parsing was refactored to remove use of jQuery.
This exposed three methods not available in react-native:
ParentNode.children, ChildNode.remove, and
document.querySelectorAll. The querySelectorAll change could
be swapped for the already polyfilled querySelector, but
children and remove had to be added. The polyfills are based
on those supplied by MDN web docs, but modified to pass jitsi
linting.
2018-03-28 18:04:42 -07:00
Leonard Kim 7ad9fa8392 fix(toolbar): exercise old video muting flow
The redux flows for video muting may not cover all cases
that the conference.js flows cover. Just exercise the old
flows to be safe.
2018-03-28 13:52:04 -05:00
Leonard Kim 6916252ce1 fix(toolbar): exercise conference audio toggling
The redux flows do not account for as many scenarios, such
as config.startWithAudioMuted being true.
2018-03-28 13:52:04 -05:00
Saúl Ibarra Corretgé 45078fe6b2 [RN] Don't auto-correct any field in settings 2018-03-27 12:58:56 -07:00
Saúl Ibarra Corretgé 4783b22018 [RN] Don't auto-capitalize email field in settings 2018-03-27 12:58:56 -07:00
Leonard Kim d93782af8a feat(new-toolbars): initial implementation 2018-03-27 00:54:30 -05:00
virtuacoplenny 01db70fd3d
Merge pull request #2636 from zbettenbuk/calendar-permission-fix
Reorganize calendar access request flow
2018-03-26 07:57:24 -07:00
virtuacoplenny e5596c3cd5 fix(recording): let the google app for api calls be overridable (#2653) 2018-03-23 10:52:32 -07:00
virtuacoplenny 1b91e0bc2f improve invite error handling (#2649)
* fix(invite): do not send empty queries for people search

The endpoint might return an error if an empty query is sent.

* fix(invite): add error logging for failed people directory requests

The error currently being passed through from $.getJSON ended up
being an empty string plus was not getting logged. So switch to
fetch to move along with jquery killing and log the error.

* fix(dial-in): add error logging for failed requests

* ref(invite): create a fetch helper to remove duplicate logic
2018-03-23 09:37:04 -07:00
zbettenbuk b258e0d397 Reorganize calendar access request flow 2018-03-23 07:53:36 +01:00
virtuacoplenny 83f47c2df1 feat(invite): add basic analytics for AddPeople dialog (#2641)
* feat(invite): add basic analytics for AddPeople dialog

Analytics for opening the dialog, closing the dialog, the
count of invites sent, and the count of invites errored.

* squash: fix typo, change default count init, remove extra analytics param
2018-03-22 17:53:16 -07:00
virtuacoplenny a39da15c94 ref(invite): remove unused nuclear-js dep (#2642) 2018-03-22 16:22:26 -07:00
Daniel Ornelas 7822155e5e Fix iPad rotation related issue when in PiP 2018-03-22 16:40:17 -04:00
Paweł Domas 15e1633d86 fix(config): no legacy over non-legacy override (#2644)
Do not take legacy property into account if there's non-legacy value.
2018-03-22 10:57:08 -05:00
Daniel Ornelas f8163de765 Implement Jitsi meet presentation interface that supports custom PiP solution 2018-03-21 22:00:43 -04:00
virtuacoplenny 823481dc1d feat(recording): use google api to get stream key (#2481)
* feat(recording): use google api to get stream key

* squash: renaming pass

* squash: return full load promise

* sqush: use google api state enum

* squash: workaround for lib not loading

* another new design...

* increase timeout workaround for gapi load issue

* styling pass

* tweak copy

* squash: auto select first broadcast
2018-03-21 11:26:52 -07:00
paweldomas b5b99301ca fix: synchronize global 'config' var with the reducer's state 2018-03-20 21:07:45 -04:00
paweldomas ef52f09910 ref(config): override config from URL on mobile
Moves the things around to be able to override the config with the URL
params specified in the hash part of the location URI to which the app
is navigating to.
2018-03-20 21:07:45 -04:00
Leonard Kim 134ff71c78 feat(modals): use dark theme 2018-03-20 16:06:50 -05:00
hristoterezov fda2548a38 fix(analytics): Init analytics for the web welcome page. 2018-03-19 17:51:22 -05:00
paweldomas 40d7d0c9cb feat(UnsupportedMobileBrowser): do not include protocol in the intent
Do not include the protocol part in the intent URL.
2018-03-14 17:44:32 -05:00
zbettenbuk 357f173e85 Remove obsolate PlatformElements.native.js 2018-03-13 18:04:17 -05:00
zbettenbuk 7da26042b3 Avoid asking for calendar permission on app start 2018-03-13 18:04:17 -05:00
zbettenbuk c86c7beb24 Refactor i18n calendar formatter 2018-03-13 18:04:17 -05:00
zbettenbuk 1020a54a33 Add Android navigation bar 2018-03-13 18:04:17 -05:00
zbettenbuk c84abd543e Add support for app link scheme 2018-03-13 18:04:16 -05:00
zbettenbuk 4b17c6f015 Add pull-to-refresh functionality 2018-03-13 18:04:16 -05:00
zbettenbuk cb973b61aa Implement adaptive known domain list 2018-03-13 18:04:16 -05:00
zbettenbuk b096622995 Unify recent and meeting lists 2018-03-13 18:04:16 -05:00
zbettenbuk ae0bf876a8 Add conference notification 2018-03-13 18:04:16 -05:00
zbettenbuk bba480f329 Add calendar-sync feature 2018-03-13 18:04:14 -05:00
paweldomas 4dbcaf851f flow(AbstractAudio): specific function types 2018-03-13 16:57:29 -05:00
paweldomas 04dff9059b ref(AudioOutputPreview): use Audio from base/media 2018-03-13 16:57:28 -05:00
paweldomas 26cd2f17f6 ref(chat): port incoming chat msg sound to react 2018-03-13 16:57:28 -05:00
paweldomas 60e03e3dec feat: add join/leave sounds on mobile
Adds base/sounds feature which allows other features to register a sound
source under specified id. A new SoundsCollection component will then
render corresponding HTMLAudioElement for each such sound. Once "setRef"
callback is called by the HTMLAudioElement, this element will be added
to the Redux store. When that happens sound can be played through the
new 'playSound' action which will call play() method on the stored
HTMLAudioElement instance.
2018-03-13 16:57:28 -05:00
virtuacoplenny e325199075 fix(invite): prefix a + when faking the validation response (#2597)
Pre-existing logic made it so numbers were assumed as valid
if no validation url was specified. To be consistent with
the validation server, the faked number should include a
+ at the beginning.
2018-03-12 13:25:42 -07:00
virtuacoplenny 4e4713c3e2 feat(invite): be able to call numbers from the invite dialog (#2555)
* feat(invite): be able to call numbers from the invite dialog

The major changes:
- Remove DialOutDialog, its views, redux hooks, css, and images.
  Its main functionality has been moved into AddPeopleDialog.
- Modify the AppPeopleDialog styling a bit so it is wider.
- Add phone numbers to AddPeopleDialog search results. Phone
  numbers are validated in parallel with the request for people
  and then appended to the result. The validation includes
  an ajax to validate the number is recognized as dialable by
  the server. The trigger for the validation is essentially if
  the entered input is numbers only.
- AddPeopleDialog holds onto the full object representation of
  an item selected in MultiSelectAutocomplete. This is so
  selected items can be removed on successful invite, leaving
  only unsuccessful items.
- More granular error handling on invite so individual invitees
  can be removed from the selected items list.

* squash: change load state, new regex for numbers

* squash: change strings, auto prepend 1 if no country code, add reminders
2018-03-12 12:23:40 -07:00
Leonard Kim 8f520086e5 fix(info): do not show dial in numbers without a room specified
For the static page an error message displays stating no room
was specified. On mobile for unsupported browsers, the dial in
info will not show.
2018-03-09 17:18:10 -06:00
paweldomas 9e0fee6c7d fix(android): do not require java 8 target
Updates react-native-webrtc to get rid of Java 8 requirement for
the Android app.
2018-03-08 15:47:05 -06:00
Leonard Kim 80bdf908ca fix(info): always remove last part of path for meeting name 2018-03-06 15:22:27 -06:00
Leonard Kim 824a8a8864 fix(info): respect path when linking to dial in page 2018-03-06 13:47:55 -06:00
Leonard Kim 466561f99f fix(polyfills): implement createHTMLDocument for jquery 2018-03-06 10:46:53 -06:00
zbettenbuk 8dc866fab3 Fix setTimeout polyfill 2018-03-06 09:42:25 +01:00
George Politis 1c8b8e031b feat: Whitelists the gatherStats option. (#2561)
* feat: Whitelists the gatherStats option.

* doc: Replaces obsolete disableStats option with gatherStats.
2018-03-05 11:12:39 -06:00
Lyubo Marinov 796489dc77 Coding style: naming, consistency 2018-03-04 19:28:44 -06:00
Lyubo Marinov a30412ba65 [RN] Automatically dispatch CONFERENCE_LEFT 2018-03-04 19:28:44 -06:00
Saúl Ibarra Corretgé 8b35ea8ad5 deps: update jquery version (#2441)
* deps: update jquery version

* squash: resize thumbnails after appending shared thumb

This forces jquery animate to show the thumbnail somehow...
Remote thumbnails basically work this way (append to filmstrip
and then resize filmstrip thumbnails) so I just copied that
implementation. ... So I admit I lost this fight because
even after looking at jquery I couldn't understand why
it doesn't work on the first resize but does on the second.
Plus I'm being put on a strict timebox to update jquery.

* squash: getJSON no longer supports .success
2018-03-02 21:20:47 -06:00
virtuacoplenny 7672a88990 fix(dial-in): remove console.warn used for debugging (#2547)
Looks like this guy snuck into the commit.
2018-03-01 15:50:23 -08:00
virtuacoplenny 5a45b52881 fix(hangup): destroy local tracks on conference leave (#2546)
The difference from this change and 88325ae is there is no
attempt to do this in redux. This is the safer change in that
the cleanup logic is known only to trigger on hangup.
2018-03-01 15:47:46 -08:00
Leonard Kim ce6e8472f0 Revert "fix(hangup): destroy local tracks on conference leave (#2502)"
This reverts commit 88325aeef2.
Turns out a conference with a password triggers a failed conference
join. It's going to be tricky to decipher when to do actual
cleanup, and where to shove that code, so reverting is easier for
now.
2018-03-01 14:07:30 -06:00
Leonard Kim b00aaf1de7 fix(dial-in): specify url root for more numbers link
This gets around the issue of a cdn page being opened.
2018-02-28 23:17:20 -06:00
Lyubo Marinov e622829c1c [RN] Promised-base RTCPeerConnection API
Recent changes in lib-jitsi-meet probably led to (1) our
RTCPeerConnection customizations on react-native not being used which is
a problem because we need them for at least NAT64 on iOS in order to
pass the review in Apple's App Store and (2) unexpected exceptions
inside react-native-webrtc.

The Promise-based WebRTC API should be merged from react-native-webrtc's
upstream but I don't want to do it right now because last time we got
multiple bugs in addition.
2018-02-28 17:17:08 -06:00
Lyubo Marinov 037e7f59b0 [RN] Fix a TypeError when invoking humanize() on undefined 2018-02-28 17:17:07 -06:00
hristoterezov df754f4f41 fix(reload): Preserve URL params on reload/redirect. 2018-02-28 14:28:56 -06:00
George Politis fd0749000e feat: Whitelists the iceTransportPolicy option. (#2535) 2018-02-28 11:28:47 -08:00
Lyubo Marinov d727ee80b2 [RN] Fix base/profile and recent-list bugs 2018-02-27 20:52:34 -06:00
zbettenbuk e4da0e988e Split storage keys to features 2018-02-27 07:33:33 -06:00
zbettenbuk 1474304cc5 Add the ability to do partial updates on the flatten profile object 2018-02-27 07:33:33 -06:00
zbettenbuk d02ab2c641 Flatten the store of the profile feature 2018-02-27 07:33:33 -06:00
zbettenbuk 0e07020d09 Flatten the store of the recent-list feature 2018-02-27 07:33:33 -06:00
zbettenbuk e0deb6d64b Prepare PersistenceRegistry for flat subtrees 2018-02-27 07:33:33 -06:00
virtuacoplenny 88325aeef2 fix(hangup): destroy local tracks on conference leave (#2502)
Destroy local tracks and also destroy large video so the
user does not wonder why camera (and mic) are still enabled
even though hangup has been pressed.
2018-02-26 21:10:49 -08:00
Lyubo Marinov 9f69c4d730 Grow features/settings from features/app-settings and features/settings-menu 2018-02-26 19:19:01 -06:00
zbettenbuk e23d4317eb Add hint box with dynamic join button 2018-02-26 18:39:48 -06:00
zbettenbuk 547ddee3a5 Dismiss keyboard on menu open 2018-02-26 18:39:48 -06:00
zbettenbuk 3cf9fd439b Add iOS 10 compatibility header padding 2018-02-26 18:39:48 -06:00
zbettenbuk 7cd40353e7 Remove android view clipping fix from welcome page 2018-02-26 18:39:48 -06:00
zbettenbuk 04690dfc8f Facelift Welcome screen 2018-02-26 18:39:48 -06:00
zbettenbuk 9a9890f86c Introduce SafeArea for Settings and Header 2018-02-26 18:35:13 -06:00
Leonard Kim 9b04a7852a fix(welcome-page): send analytics on join 2018-02-26 18:41:47 -05:00
Boris Grozev 5d0ac7653d config: Whitelists the desktopSharingFrameRate config key. 2018-02-26 11:45:42 -06:00
virtuacoplenny 1ef2e2ee7e
Merge pull request #2503 from jitsi/ss_fps
feat(ss_framerate): Add config option for min/max frame rate.
2018-02-23 12:28:48 -08:00
hristoterezov b3431ab3e7 chore(lib-jitsi-meet): Update version. 2018-02-23 13:38:41 -06:00
Lyubo Marinov b8de5bbfc3 [RN] Add Picture-in-Picture support (Coding style: naming, consistency) 2018-02-23 11:21:26 -06:00
Saúl Ibarra Corretgé b3683068d4 [RN] Add Picture-in-Picture support
This only works automatically on Android >= 8. On other platforms / versions, it
relies on the SDK user on implementing a "reduced UI" mode and reacting to the
"request PIP" delegate method.
2018-02-23 11:21:25 -06:00
hristoterezov 2d9b906a3b feat(ss_framerate): Add config option for min/max frame rate. 2018-02-22 19:37:17 -06:00
Leonard Kim 1f82ce3d19 feat(unsupported-browser): show dial-in for mobile
- Move the existing components for the static dial in page into
  a separate folder for easier reuse.
- Reuse those components for displaying dial-on numbers on the
  mobile page for unsupported browsers.
- Modify those components to support having tel protocol
  links on the dial-in numbers.
- Have DialInSummary, formerly DialInInfoPage, respect a
  passed in className prop for easier styling differences.
2018-02-22 17:29:03 -06:00
virtuacoplenny 74a92f83c7 feat(welcome): new design (#2492)
* feat(welcome): new design

* squash: update strings

* squash: copy/paste error?

* squash: remove welcome page disabling checks

* squash: change strings again

* squash: background var

* squash: title and desc css as variables
2018-02-21 22:58:55 -06:00
virtuacoplenny e47802538e ref(invite): remove InviteDialog (#2483)
* ref(invite): remove InviteDialog

InviteDialog functionality has been moved into InfoDialog.
The InviteButton has been temporarily hacked to show one
of its dropdown options instead as the button. Future
work will bring in a redesigned InviteModal that the button
will open.

* squash: filter invalid options and map valid options

* squash: update strings
2018-02-17 13:53:39 -06:00
Lyubo Marinov e2cf7a788d [RN] Make full-screen more resilient on Android (Coding style: consistency) 2018-02-14 12:28:22 -06:00
Saúl Ibarra Corretgé 4757c1ebca [RN] Make full-screen more resilient on Android
On Android we go into "immersive mode" when in a conference, this is our way of
being full-creen. There are occasions, however, in which Android takes us out of
immerfive mode without us (the application / SDK) knowing: when a child activity
is started, a modal window shown, etc.

In order to be resilient to any possible change in the immersive mode, register
a listener which will be called when Android changes it, so we can re-eavluate
if we need it and thus re-enable it.
2018-02-13 15:00:36 -06:00
virtuacoplenny 59d046dca9 feat(info): new dialog design (#2452)
* feat(info): new dialog design

- Add display of a dial in number.
- Add a static page to show a full list of dial in numbers.
- Add password management.
- Invite modal will be changed soon to remove password and
  dial-in.

* squash: add classes for torture tests

* squash: class for local lock for torture tests

* squash: more classes for torture tests

* squash: more classes, work around linter

* squash: remove unused string?

* squash: work around linter and avoid react warnings

* squash: pixel push, add bold

* squash: font size bump

* squash: NumbersTable -> NumbersList

* squash: document response from fetching numbers

* squash: showEdit -> editEnabled, pixel push padding for alignment

* squash: pin -> conferenceID

* squash: prepare to receive defaultCountry from api
2018-02-13 13:46:47 -06:00
Lyubo Marinov 0bbcd3181c [RN] Adjust Conference for the reduced UI mode (Coding style) 2018-02-13 13:24:10 -06:00
Saúl Ibarra Corretgé 7a9ff9975a [RN] Adjust Conference for the reduced UI mode 2018-02-13 11:59:12 -06:00
Lyubo Marinov 10f72f8e40 [RN] Unpin participant and set last N to 1 if the filmstrip is disabled (Coding style: consistency) 2018-02-13 11:58:26 -06:00
Saúl Ibarra Corretgé 417e1e83e7 [RN] Unpin participant and set last N to 1 if the filmstrip is disabled 2018-02-13 09:58:44 -06:00
Lyubo Marinov cacc4bd769 [RN] Dynamically adjust LargeView's Avatar to available size (Coding style: comments, flow)
Flow caught an incorrect function call.
2018-02-13 09:58:43 -06:00
Saúl Ibarra Corretgé 1419247801 [RN] Dynamically adjust LargeView's Avatar to available size
When in PiP mode the LargeView will not be large enough to hold the avatar (for
those interested in the details, our avatar's size is 200, and in PiP mode the
app is resized to about 150).

In order to solve it, this PR refactors how the avatar style is passed along,
reducing it to a single "size" prop. With this only prop, the Avatar compononent
will compute the width, height and borderRadius, plus deal with some Android
shenanigans.

In addition, the LargeView component now uses DimensionsDetector to check its
own size and adjust the size prop passed to the Avatar component as needed.
2018-02-13 09:58:43 -06:00
virtuacoplenny 4fb37c38eb fix(large-video): do not show background for Firefox and temasys (#2316)
* ref(large-video): reactify background

This is pre-requisite work for disabling the background on
certain browsers, namely Firefox. By moving the component
to react, and in general encapsulating background logic,
selectively disabling the background will be easier.

The component was left for LargeVideo to update so it can
continue to coordinate update timing with the actual large
video display. If the background were moved completely into
react and redux with LargeVideo, then background updates would
occur before large video updates causing visual jank.

* fix(large-video): do not show background for Firefox and temasys

Firefox has performance issues with adding filter effects on
animated elements. On temasys, the background videos weren't
really displaying anyway.

* some props refactoring

Instead of passing in classes to LargeVideoBackground, rely on
explicit props. At some point LargeVideo will have to be reactified
and the relationsihp between it and LargeVideoBackground might
change, so for now make use of props to be explicit about
how LargeVideoBackground can be modified.

Also, set the jitsiTrack to display on LargeVideoBackground to
null if the background is not displayed. This was an existing
optimization, although previously done with pausing and playing.

* squash: use newly exposed RTCBrowserType

* squash: rebase and use new lib browser util

* squash: move hiding logic all into LargeVideo

* squash: remove hiding of background on stream change. hopefully doesnt break anything
2018-02-12 16:29:29 -08:00
Leonard Kim f3b5ed2ef4 ref(notifications): convert Thank You message to a notification 2018-02-12 17:53:29 -06:00
Leonard Kim 7341c7bf84 ref(notifications): stop passing around Notifications component
Passing around of the component was used when there were two
independent Notification components. Now that there is only
one Notification component, it is not necessary to pass
around the component.
2018-02-12 17:53:29 -06:00
Boris Grozev 03fc711e81 feat: Makes the google analytics tracking id configurable. 2018-02-12 14:00:04 -06:00
Lyubo Marinov a370a88d19 [RN] Add ability to enable /disable the toolbox (Coding style: comments, consistency) 2018-02-12 11:53:42 -06:00
Saúl Ibarra Corretgé 7153d94dad [RN] Add ability to enable /disable the toolbox 2018-02-12 11:52:54 -06:00
Lyubo Marinov 240fff74c7 [RN] Add ability to enable / disable the filmstrip (Coding style: comments, naming) 2018-02-12 11:52:46 -06:00
Saúl Ibarra Corretgé 7bd8b7948f [RN] Add ability to enable / disable the filmstrip
This is only implemented for mobile at the moment, since web doesn't handle
visibility within the Filmstrip component yet, so this should be added right
then, too.
2018-02-12 10:02:34 -06:00
Saúl Ibarra Corretgé bd301403c4 [RN] Fix app startup from a CallKit intent
Story time.  Currently the app can be started in 4 ways:

- just tapping on the icon
- via a deep link
- via a universal link
- via the phone's recent calls list

The last 3 options will make the app join the specified room upon launch. React
Native's Linking module implements the necessary bits to handle deep or
universal linking, but CallKit is out of its scope.

In order to blend any type of app startup mode, a new LaunchOptions module (iOS
only) exports a getInitialURL function, akin to the one in the Linking module,
but taking CallKit instents into consideration. This function is then used to
make app startup with a URL consistent across all different modes.
2018-02-07 10:12:10 -06:00
Дамян Минков ba94ba30c5 Handles connection failed event details (passing them to analytics). (#2432)
* Handles connection failed event details (passing them to analytics).

* Fixing comments.

* Updates depending versions to be able to test.

* Fixing comments.

* Fixes wrong jsdoc.
2018-02-06 14:54:21 -08:00
Saúl Ibarra Corretgé 5305557ce5 [RN] Add a "reduced UI" mode
It's detected based on a size threshold.
2018-02-06 15:53:52 -06:00
Lyubo Marinov c9d8b5c827 Finally! Let there be... responsive-ui!
We started on the way to responsive UI and its design with aspect ratio
and keeping the filmstrip on the short side of the app's visible
rectangle.

Shortly, we're going to introduce reduced UI for Picture-in-Picture. And
that's where we'll need another dimensions-based detector akin to the
aspect ratio detector.

While the AspectRatioDetector, the up-and-coming ReducedUIDetector, and
their base DimensionsDetector are definitely separate abstractions and
implementations not mixed for the purposes of easy extensibility and
maintenance, the three of them are our building blocks on top of which
we'll build our responsive UI.
2018-02-06 15:53:27 -06:00
Saúl Ibarra Corretgé 0ad1c88cd2 [RN] Refactor AspectRatioDetector
Factor out the dimensions detection login into a DimensionsDetector component.
2018-02-06 11:21:12 -06:00
Saúl Ibarra Corretgé 78fbfba573 [iOS] Fix initial CallKit muted state
Turns out this was a bit more involved than I originally thought due to an
interesting (corner) case: IFF the user was never asked about microphone
permissions and the call starts with audio muted, unmuting from the CallKit
interface won't work (iOS won't show the prompt, it fails immediately) and we
need to sync the mute state back.
2018-02-06 10:24:06 -06:00
Saúl Ibarra Corretgé 9e53d40b9c [RN] Honor filmstrip visibility state 2018-02-05 15:55:05 -06:00
Lyubo Marinov aa314c10ac Coding style: consistent naming, one name per abstraction
Instead of having visible and visibility and setToolboxVisible and
setFilmstripVisibility, have only visible as a name.
2018-02-05 15:55:04 -06:00
Lyubo Marinov 62c9762793 [RN] Protect AbstractApp and localStorage initialization 2018-02-05 15:26:01 -06:00
Lyubo Marinov d7dddb2509 Introduce base/storage to represent the Web Storage API and persistence-related customizations 2018-02-02 15:13:26 -06:00
Lyubo Marinov 83243d5980 [RN] Fix legacy recent-list storage 2018-02-02 15:13:26 -06:00
Zoltan Bettenbuk 6e05cab46e [RN] Fix legacy recent-list storage 2018-02-02 15:13:26 -06:00
Lyubo Marinov 7954d5fd39 Coding style 2018-02-02 15:13:26 -06:00
zbettenbuk 158cadf4f9 Improve persistency layer 2018-02-02 15:13:26 -06:00
Lyubo Marinov f35578c803 [RN] Polyfill __filename ASAP 2018-02-02 15:13:26 -06:00
Saúl Ibarra Corretgé c087e90099 [RN] Fix setReceivedVideoQuality if we are not yet in a conference
It may happen that such action is fired while joining.
2018-02-02 14:33:49 -06:00
Saúl Ibarra Corretgé da0ae73d10 [RN] Fix pinParticipant if we are not yet in a conference
It may happen that such action is fired while joining.
2018-02-02 14:32:15 -06:00
Saúl Ibarra Corretgé b4d44f367d [RN] aspect-ratio: preserve mode when width === height
If the view gets resized to a 1:1 aspect ratio, remember the previous mode to
avoid flickering when going back to a larger size or different aspect ratio.
2018-02-02 14:19:08 -06:00
zbettenbuk 6a9e6db3be [RN] Validate the URL in app-settings 2018-01-31 16:06:24 +01:00
zbettenbuk aa9efd6f69 [RN] Improve app-settings back button style 2018-01-29 10:58:46 +01:00
Leonard Kim 2720c76e4d fix(password): do not let guests edit password when roles are enabled
If config.enableUserRolesBasedOnToken is true, only let moderators
and non-guests modify the password. Otherwise, only let moderators
edit the password.
2018-01-28 18:48:24 -06:00
Lyubo Marinov e1f967869a [RN] Add builtin translations 2018-01-26 12:18:43 -06:00
Saúl Ibarra Corretgé 8673083829 [RN] Add builtin translations
Load all of them as imports, so the packager includes them in the bundle. Then
register them with the i18next library.
2018-01-26 16:27:33 +01:00
Boris Grozev dc92fb5073 feat: Sets the "product" field in the analytics handler constructor. 2018-01-23 16:14:31 -06:00
virtuacoplenny 12ec982067
Merge pull request #2400 from jitsi/browser_caps2
fix(lib-jitsi-meet): RTCBrowserType -> browser.
2018-01-22 13:57:50 -08:00
hristoterezov c9e3e5052d fix(lib-jitsi-meet): RTCBrowserType -> browser. 2018-01-22 15:56:06 -06:00
Emil Ivov 22401614a7
Merge pull request #2401 from virtuacoplenny/lenny/spot-feedback-api
feat(api): expose a way to submit feedback
2018-01-19 16:57:18 -06:00
Leonard Kim 762f529f1d feat(api): expose a way to submit feedback
Spot will need a way to submit call feedback using the iframe
api. For now expose a method on conference.js to submit that
feedback. Exposing on conference.js looks to be the existing
pattern... Also add an event to notify consumers of the iframe
api that feedback was submitted, as postMessage is async
and the notification can at least give some guarantee maybe.

I haven't updated documentation yet as I'm not confident
about this api.
2018-01-19 14:27:44 -08:00
Saúl Ibarra Corretgé 1f6b743bec [RN] Join room when pressing "go" on the keyboard
Improve the experience when joining a room by removing the need to tap the join
button. The keyboard type has also been set to "go", which translated on the
builtin keyboard button label to be "go" (it's builtin, the operating system
translates it). This works on both Android and iOS.
2018-01-19 16:10:51 -06:00
Lyubo Marinov 48f4317adb [RN] Make video track fade-in effect cross-platform 2018-01-19 16:05:59 -06:00
Saúl Ibarra Corretgé 75f6786588 [RN] Make video track fade-in effect cross-platform
Android uses a SurfaceView to render video, which is not quite a View, so the
fade-in animation (which varies the opacity) doesn't work.

Instead, add an opaque black view covering the video, which transitions to
transparent. This creates much smoother transitions on Android, while behaving
the same.

In addition, I removed the flip animation for local tracks, which is no longer
used, since the camera is switched without changing tracks.
2018-01-19 15:32:17 -06:00
Lyubo Marinov 3ec4d67a99 [RN] Strip spaces when parsing URLs 2018-01-19 15:26:13 -06:00
Saúl Ibarra Corretgé a23eec55e8 [RN] Strip spaces when parsing URLs 2018-01-19 15:14:51 -06:00
Saúl Ibarra Corretgé 98ff20a026 [RN] Simplify initialization of AsyncStorage 2018-01-19 09:41:34 -06:00
Lyubo Marinov b04661b40b [RN] Revert unintentional disabling of the yellow box 2018-01-18 21:11:24 -06:00
Lyubo Marinov 112c856850 Fix settings screen layout on iOS and add soft back button 2018-01-18 15:45:25 -06:00
zbettenbuk 410dc132e1 Fix settings screen layout on iOS and add soft back button 2018-01-18 10:06:26 -06:00
Saúl Ibarra Corretgé b7f950f5f7 feat(analytics): shield sending analytics events
Any failure in analytics should not prevent the natural flow of the code. Shield
the function by catching and logging any exception.
2018-01-17 16:46:54 -06:00
Paweł Domas 7ad875e735 fix(RN logging): sync with logging_config.js (#2382) 2018-01-17 10:59:48 -08:00
Saúl Ibarra Corretgé 6f93424d7c [RN] Use the "email" keyboard for the email field 2018-01-10 14:30:34 +01:00
Saúl Ibarra Corretgé 292f3ab1bd [Android] Fix crash if settings activity cannot be opened
The documentation states this is possible, so make sure we handle such errors.

Ref:
https://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DETAILS_SETTINGS
2018-01-09 13:12:53 -06:00
Boris Grozev a3cb081609 fix: Fixes an exception when the chat button and shortcut are clicked. 2018-01-09 10:36:55 -08:00
bgrozev 259004b8bf fix: Fixes the user ID read from JWT. (#2366) 2018-01-08 11:27:08 -06:00
zbettenbuk 05a492241f Fix local participant details on web 2018-01-05 12:58:58 -06:00
hristoterezov a357b0cf14 feat(notification): Add suboptimal browser exp notification. 2018-01-04 15:57:17 -06:00
Boris Grozev c7714959e6 feat: Passes the environment type and subproduct to the analytics handler constructor. 2018-01-04 13:12:48 -06:00
Boris Grozev e898527294 feat: Passes the "group" from JWT to the analytics handler constructor. 2018-01-04 13:12:48 -06:00
zbettenbuk bfcd34358b [RN] Add app-settings feature
[RN] Fix PR feedbacks, write persistency docs
2018-01-04 12:53:29 -06:00
Saúl Ibarra Corretgé 178c8e02ff [RN] Disable the XHR backend on mobile
All language assets will need to be bundled.
2018-01-03 19:18:12 -06:00
bgrozev 43ac039fd6 fix: Adapts to changes in lib-jitsi-meet. (#2354) 2018-01-03 16:07:39 -08:00
bgrozev 090f2f9ccb Restructures the analytics events (#2333)
* ref: Restructures the pinned/unpinned events.

* ref: Refactors the "audio only disabled" event.

* ref: Refactors the "stream switch delay" event.

* ref: Refactors the "select participant failed" event.

* ref: Refactors the "initially muted" events.

* ref: Refactors the screen sharing started/stopped events.

* ref: Restructures the "device list changed" events.

* ref: Restructures the "shared video" events.

* ref: Restructures the "start muted" events.

* ref: Restructures the "start audio only" event.

* ref: Restructures the "sync track state" event.

* ref: Restructures the "callkit" events.

* ref: Restructures the "replace track".

* ref: Restructures keyboard shortcuts events.

* ref: Restructures most of the toolbar events.

* ref: Refactors the API events.

* ref: Restructures the video quality, profile button and invite dialog events.

* ref: Refactors the "device changed" events.

* ref: Refactors the page reload event.

* ref: Removes an unused function.

* ref: Removes a method which is needlessly exposed under a different name.

* ref: Refactors the events from the remote video menu.

* ref: Refactors the events from the profile pane.

* ref: Restructures the recording-related events.

Removes events fired when recording with something other than jibri
(which isn't currently supported anyway).

* ref: Cleans up AnalyticsEvents.js.

* ref: Removes an unused function and adds documentation.

* feat: Adds events for all API calls.

* fix: Addresses feedback.

* fix: Brings back mistakenly removed code.

* fix: Simplifies code and fixes a bug in toggleFilmstrip

when the 'visible' parameter is defined.

* feat: Removes the resolution change application log.

* ref: Uses consistent naming for events' attributes.

Uses "_" as a separator instead of camel case or ".".

* ref: Don't add the user agent and conference name

as permanent properties. The library does this on its own now.

* ref: Adapts the GA handler to changes in lib-jitsi-meet.

* ref: Removes unused fields from the analytics handler initializaiton.

* ref: Renames the google analytics file and add docs.

* fix: Fixes the push-to-talk events and logs.

* npm: Updates lib-jitsi-meet to 515374c8d383cb17df8ed76427e6f0fb5ea6ff1e.

* fix: Fixes a recently introduced bug in the google analytics handler.

* ref: Uses "value" instead of "delay" since this is friendlier to GA.
2018-01-03 13:24:07 -08:00
zbettenbuk d08bbae770 [RN] Add proper locale support to MomentJS 2018-01-03 10:13:15 -06:00
Leonard Kim 698ec1e2d7 Revert "feat(avatars): use initials service for getting images (#2312)"
There is more avatar work coming down the line for mobile,
which should also affect web, assuming the same getAvatarURL
helper will be used. As such, instead of continuing to
support the initials service and tweaking UI, revert to
make way for the future avatar work.

This reverts commit 2ea5ad68a5.
2017-12-28 14:17:33 -06:00
Leonard Kim e217c172f8 ref(toolbar): re-wrap buttons for torture tests
The inline classes for the toolbars were re-arranged
to fix non-rounded corners in the always-on-top window's
toolbar. However, those classes were also used by the
torture tests as a way to find stable elements that will
not get blown away by a react re-render. So re-wrap the
buttons with a div that will not get blown away,
add back the inline classes to those divs, and change
the CSS to round the corners in the always-on-top
window's toolbar.
2017-12-26 16:08:40 -06:00
virtuacoplenny 2ea5ad68a5 feat(avatars): use initials service for getting images (#2312)
* feat(avatars): use initial service for getting images

* squash: capitalize and minor refactor of string concat
2017-12-21 13:36:00 -06:00
Lyubo Marinov fb6f1bdba0 [RN] Accommodate iPhone X on the WelcomePage 2017-12-21 00:02:22 -06:00
Lyubo Marinov 25b130f8e8 [RN] Don't tint the children, tint the background only 2017-12-21 00:00:34 -06:00
Saúl Ibarra Corretgé ca78309427 Fix typo 2017-12-20 10:58:49 +01:00
Lyubo Marinov 65abd5efd4 [iOS] Synthesize IPv6 addresses closer to Apple's recommendation 2017-12-19 19:15:34 -06:00
Lyubo Marinov 1e0550c746 [RN] Add recent-list feature 2017-12-19 19:15:01 -06:00
Zoltan Bettenbuk 45c405de0e [RN] Add recent-list feature 2017-12-19 18:35:51 -06:00
Leonard Kim f0a180cf0c fix(display-name): listen for display name changes
Make sure participants in the redux store have updated names.
This will be needed for showing avatars with user initials.
2017-12-19 17:13:10 -06:00
virtuacoplenny 28013f6ffa ref(avatars): remove Avatar.js (#2289)
* ref(avatars): remove Avatar.js

- Rely on redux getting updated with new participant state
and any calls to getAvatarURL passing in the redux
participant state. This way the state within Avatar.js can
be removed.
- Clean up methods on UI.js. Because all state is in the
store, separate methods for updating the avatar aren't as
necessary. Instead centralize accessing of the avatar for
components outside of redux and centralize the call to
update avatars for non-react components.
- Controversial: cache a participant's avatarURL on the
participant state. Currently the participant's avatarURL
that is generated without jwt (which sets the avatarURL directly)
is not cached. Without cache, there can be many redundant
calls to APP.API.notifyAvatarChanged.

* Leverage middleware timing to diff avatars

One alternative implementation is to leverage middleware's
ability to intercept updates before and after redux has
upated and then compare avatarURLs.

* kill UI.getAvatarUrl

* profile button sets its own avatar url (solves update timing)

* remove calls to updating avatar outside of middleware

* update UI.js doc

* remove left over logic from initial implementation

* try to move local user fallback into selector func

* default to id 'local' in selector
2017-12-19 17:11:54 -06:00
Saúl Ibarra Corretgé 5640524647 [RN] Show an indication when connectivity problems occur
The video will switch to the avatar and be tinted with gray. On the large view,
a text message indicating the user has connectivity issues will be shown.
2017-12-19 09:10:58 -06:00
Saúl Ibarra Corretgé ac09233558 [RN] Add TintedView component
It's designed to cover a container and give it a "tint" by using a color and
opacity.
2017-12-19 09:10:58 -06:00
damencho 2f3ea1b458 [Android] Add module that provides getWiFiStats 2017-12-19 11:07:11 +01:00
hristoterezov d6c3ab64fa fix(aot): Unmount AlwaysOnTop to remove listeners (#2307) 2017-12-18 14:35:56 -08:00
Saúl Ibarra Corretgé 7001208d87 [RN] Adjust filmstrip ordering based on aspect ratio
When in wide aspect ratio,, show it with the local participant on top, and the
remote ones after, sorted by join order.
2017-12-14 12:36:03 -06:00
Saúl Ibarra Corretgé c05c8e0f1e [RN] Handle config loading errors
They will be stored in redux and the PageReloadOverlay will be displayed.

Note that this commit also introduces a subtle (and yet important!) change:
the location URL is now always set, regardless of the configuration loading or
not. This is needed in order for the retry logic to pick it up.
2017-12-12 22:59:04 -06:00
Saúl Ibarra Corretgé 87a87eebb9 [RN] Add reload overlay in case of connection / conference errors 2017-12-12 22:58:46 -06:00
Lyubo Marinov ad497fed7c Reduce duplication 2017-12-12 21:58:33 -06:00
Saúl Ibarra Corretgé 0f6243ee88 feat(overlays): CallOverlay is not really an overlay
It's not supposed to go on top of everything, like an error would. It's tied to
a conference, so render it outside of the OverlayContainer.
2017-12-12 20:52:29 -06:00
Lyubo Marinov b39b6640b4 React & React Native Fragment-like 2017-12-12 20:52:29 -06:00
Saúl Ibarra Corretgé 870e6bbddc feat(overlays): render overlays outside of Conference
On web Conference is pretty much all there is, but on mobile we have the welcome
page and the blank page. If we fail to load config.js, for example we will still
be in the welcome page *and* we want to show an error overlay.
2017-12-12 20:52:29 -06:00
Lyubo Marinov b93bac5aa9 feat(room-lock): hide dialog when conference fails 2017-12-12 20:51:56 -06:00
Saúl Ibarra Corretgé c86895ae13 feat(room-lock): hide dialog when conference fails 2017-12-12 20:39:25 -06:00
Дамян Минков e28b847fb0 Updates config feature and whitelists options that can be overridden. (#2282)
* Removes unused config logic.

* Whitelists config options that can be overridden using the URL.

* Recorder login with credentials, not supported by externalconnect.

Jibri uses xmpp credentials to login, which is not supported by externalconnect, so we want to skip it till that is supported.

* Whitelist only config.js

* Extracts whitelisting in separate function.
2017-12-12 11:16:55 -08:00
virtuacoplenny 9b67e796bd ref(analytics): centralize all event names (#2272)
* ref(analytics): centralize all event names

* squash: fix typo and alpha ordering

* squash: rename file to AnalyticsEvents to parallel lib-jitsi-meet
2017-12-11 12:48:32 -06:00
Lyubo Marinov a5538adf8a [RN] Add a timeout for loading the configuration 2017-12-05 21:07:15 -06:00
Saúl Ibarra Corretgé 38b645bc27 [RN] Add a timeout for loading the configuration 2017-12-05 17:08:10 -06:00
damencho 67ac0e8b8a Updates the unsupported mobile browser page. 2017-12-05 09:52:44 -06:00
Leonard Kim b258a9fc5e ref(css): move aui css to jitsi-meet 2017-12-05 08:50:13 -06:00
Дамян Минков 9ddc5a0e42 Skips empty invites for video rooms. (#2251) 2017-12-04 20:59:28 -08:00
hristoterezov d79995e14c fix(aot): Toolbar styles (#2252)
Rounded corners on the first and last buttons. Size of the hangup button
on hover.
2017-12-04 20:23:51 -08:00
hristoterezov 5ffcaca649 feat(aot): Handle video not available use cases (#2242) 2017-12-04 19:27:17 -08:00
Leonard Kim c9b54845d9 ref(settings): convert panel to react
The goal is to reduce usage on atlassian/aui. New components
have been created to display the settings panel. Language
selection will reach into i18n for state whereas moderator
options will keep state in redux.
2017-12-04 16:19:18 -06:00
Lyubo Marinov 0eafee2a95 feat(errors): fix error handling for connection and conference 2017-12-04 16:01:28 -06:00
Saúl Ibarra Corretgé de0d69a20e feat(errors): fix error handling for connection and conference
Properly handle errors while connecting or joining a conference. Prior to this
patch, only errors on established conferences / connections were saved to the
redux store.
2017-12-04 15:52:52 -06:00
hristoterezov eae9ddabad fix(external_api): fire videoConferenceLeft event on unload (#2243) 2017-12-04 10:33:58 -08:00
Lyubo Marinov 569b3547c8 Upgrade NPM dependencies/packages: react-native 0.50 2017-12-04 00:45:18 -06:00
Lyubo Marinov d8bc26a8ea Upgrade NPM dependencies/packages: ESLint 2017-12-04 00:21:01 -06:00
Lyubo Marinov dda4d7a99e feat(overlays): switch to flow Props 2017-11-29 22:13:24 -06:00
Saúl Ibarra Corretgé 19702671f6 feat(overlays): switch to flow Props 2017-11-29 21:52:39 -06:00
yanas a9b8f49995 Add user id to analytics if provided in jwt 2017-11-29 10:36:57 -06:00
Lyubo Marinov 2306e26287 [RN] Fix assigning Dialog state 2017-11-29 10:21:49 -06:00
Saúl Ibarra Corretgé 3633f2aac5 [RN] Fix assigning Dialog state
75bf7638b3 introduced this regression, state must
be assigned as an object, even though one would think it's automagically
initialized to an object. Oh well!
2017-11-29 10:18:32 -06:00
Saúl Ibarra Corretgé c320540fa3
Merge pull request #2227 from jitsi/mobile_testing
feat: add more accessibility labels
2017-11-29 15:20:19 +01:00
Lyubo Marinov 75bf7638b3 ref: define state and property types (2) 2017-11-28 22:03:00 -06:00
paweldomas 379bad0ce6 ref: define state and property types 2017-11-28 20:36:02 -06:00
Leonard Kim 2becfd026b fix(device-selection): add proptypes shim for popup
AtlasKit is not fully compatible with React 16. One problem
is PropTypes will not be defined on the React object. So,
add the prop-types shim to the popup bundle.
2017-11-28 15:45:56 -06:00
paweldomas cd48ee3dbf feat: add more accessibility labels
Adds more accessibility labels required for mobile automated testing.
2017-11-28 12:28:37 -06:00
Lyubo Marinov e4ed02815f Coding style: no runtime-dependent global values 2017-11-27 20:55:45 -06:00
Lyubo Marinov d1e5e6b93b Coding style: consistency, jsdocs
These modification are not necessarily directly related to the
containing PR, I merely saw them while reviewing the containing PR.
2017-11-27 17:45:17 -06:00
Saúl Ibarra Corretgé 38629b437d feat(overlays): refactor logic for selecting current overlay
Do the selection in mapStateToProps so the container itself doesn't need to
receive all the props that each overlay needs.

Each overlay is responsible for fetching their own props and for providing a
"needsDisplay" static method wich will be called with the full redux state and
should return true if the overlay needs displaying.

Also eliminate duplicated state keeping: the connection and conference error
states can be fetched from their respective base features.
2017-11-27 17:45:11 -06:00
Saúl Ibarra Corretgé d0859b3ce1 feat(conference): store conference errors in redux 2017-11-27 17:45:11 -06:00
virtuacoplenny 4ead402388 spike: feat(notifications): prioritize based on type (appearance) (#2188)
* feat(notifications): prioritize based on type (appearance)

* squash: add return description to doc
2017-11-27 10:47:01 -06:00
Saúl Ibarra Corretgé c51d351694
Merge pull request #2205 from virtuacoplenny/lenny/progress-bar-react
ref(overlay): convert progress bar to react
2017-11-23 15:35:27 +01:00
Leonard Kim bb45f76a7a fix(conference): initialize UI features on CONFERENCE_JOINED
Initializing UI features, like keyboard shortcuts, by chaining
onto APP.conference.init is not safe because init can fail,
skipping the initializing of UI features. This can happen when
the room is locked and then a failure event is dispatched into
middleware. I couldn't find a place to properly chain onto
in the APP.conference.init promise chain, primarily due
to the flow continued within middleware, so instead I
leveraged an existing listener for CONFERENCE_JOINED.
2017-11-22 13:28:04 -06:00
virtuacoplenny 03e68b0e4b feat(video-quality): hide if recorder or interfaceConfig specified it (#2166) 2017-11-22 11:18:08 +01:00
Leonard Kim f0d3abffc5 ref(overlay): convert progress bar to react 2017-11-21 14:45:43 -08:00
Дамян Минков 7b1b873b6e VideoSIPGW updates (#2201)
* Adds initial documentation for sipgw jibri.

Also explains enabling the people search service and the request/response that are made around sipgw jibri service.

* Fixes add people dialog to invite users and rooms.

No invitation is sent when there is nobody to invite.

* Reuse some recording strings, by using arguments.

* Make sure web also dispatches CONFERENCE_WILL_JOIN.

* Introduces new feature videosipgw.

* Fixes lint errors.

* Renames methods to use people, chatRooms and videoRooms.

* Updates to latest lib-jitsi-meet (dc3397b18b).
2017-11-21 14:45:14 -08:00
Leonard Kim ef813fbf71 ref(notifications): replace NotificationWithToggle with Notification
It was decided along with the mute participant dialog reactification
that these types of warning messages should not be toggleable--that
they should simply always display because there is no undo action.
As such, the component NotificationWithToggle is no longer needed.
2017-11-21 11:55:45 -06:00
virtuacoplenny fe411398e3 fix(notifications): throttle and batch join notifications (#2182)
* fix(notifications): throttle and batch join notifications

Instead of directly calling to show a join notification,
go through a specific method. This method will queue
names for display while a throttled function pulls
the names and shows a notification.

* squash: remove unused translation key

* squash: use default display name

* squash: move into participant actions
2017-11-21 11:38:40 -06:00
Saúl Ibarra Corretgé 0aa377fcfc [RN] Ignore mute error if track is disposed
Refs: https://github.com/jitsi/lib-jitsi-meet/pull/648

It's possible for a track to be disposed but still on the redux store, before
the reducer removed it.
2017-11-21 11:13:35 -06:00
Saúl Ibarra Corretgé 81ac1bf4a5 [RN] Translate AudioRoutePickerDialog 2017-11-20 07:54:05 -06:00
Lyubo Marinov 78bc8121ff [RN] Fix "Error: Provided an image that is available locally already." 2017-11-17 13:33:04 -06:00
Lyubo Marinov 8fd91573fc Fix eslint & flow errors
Prepares for the latest eslint & flow-related npm packages which cause
these errors.
2017-11-16 12:27:54 -06:00
Leonard Kim 30be46326a fix(remote-menu): show volume slider whenever available 2017-11-15 16:25:44 -06:00
Leonard Kim 3d5fbefe7e fix(display-name): disable spell check on editing local name 2017-11-15 14:56:59 -06:00
Lyubo Marinov e7aff1d8e1 [RN] Group the secondary toobar buttons
Rearrange the ToolbarButtons in the secondary Toolbar in order to mostly
group the media-related ones such as the AudioRouteButton, the
switchCamera button, and the audio-only mode button.
2017-11-15 09:31:40 -06:00
Saúl Ibarra Corretgé f973a695d8 [RN] Add audio route picker
Due to the difference in nature, the iOS and Android implementations are
completely different:

iOS: MPVolumeView is used, which allows us to place a button which will launch a
native route picker provided by iOS itself. This view is different depending on
the iOS version, with the iOS 11 version being more complete.

Android: A completely custom component is used, which displays a bottom sheet
with the device categories, not devices individually. This is akin to the sheet
in the builtin dialer.
2017-11-15 09:31:40 -06:00
Saúl Ibarra Corretgé 8198e52b93 [RN] Add SimpleBottomSheet component
It emulates Android's BottomSheet in pure JavaScript. It's implemented as
another Dialog, so it can be used instead of one.

The implementation only supports text options with an associated icon, and an
optional 'selected' marker.
2017-11-15 09:31:40 -06:00
Lyubo Marinov 3033f7bc3d Coding style, consistency
We're already using the notion of _WILL_ in redux action types and
there's currently no compelling reason to introduce _BEGIN_ as well.
2017-11-15 09:23:22 -06:00
Lyubo Marinov decf9c4991 Add/fix JSDoc comments
While reviewing "[PREVIEW|RN]: Handle getUserMedia in progress" I
discovered JSDoc comments which could be improved. They are not
necessarily 100% related to the PR.
2017-11-14 15:42:00 -06:00
paweldomas f37a12c332 fix(base/tracks): handle GUM in progress
This commit adds extra actions/Redux state to be able to deal with
the GUM operation being in progress. There will be early local track
stub in the Redux state for any a local track for which GUM has been
called, but not completed yet.

Local track is considered valid only after TRACK_ADDED event when it
will have JitsiLocalTrack instance set.
2017-11-14 14:48:30 -06:00
Leonard Kim bff983d969 fix(style): rename the remaining AKButton import 2017-11-13 16:59:44 -06:00
Leonard Kim c2901808ca fix(button-group): use ButtonGroup from the Button package
That standalone ButtonGroup package has been deprecated.
The deprecation warning says to use the ButtonGroup component
from the Button package.
2017-11-13 16:59:44 -06:00
virtuacoplenny dc26b17d8b feat(keyboard-shortcuts): show help in a react dialog (#2148)
* feat(keyboard-shortcuts): show help in a react dialog

- Move shortcut help dom declaration to a react component
- Let open/close logic be handled by AtlasKit Dialog
- Remove static html for help from index.html
- Consolidate keyboard shortcut css

* squash: use lozenge for key styling

* squash: use different iteration style

* squash: update package-lock for lozenge
2017-11-13 16:58:00 -06:00
Дамян Минков 5dbabbe44a Hides call info and invite button in iAmRecorder mode. (#2154) 2017-11-10 11:43:40 -08:00
virtuacoplenny 5c464a7bda feat(audio-only): be able to lock a browser into capturing audio only (#2125)
* feat(audio-only): be able to lock a browser into capturing audio only

* squash: try to make string more clear about audio only support

* squash: final strings
2017-11-09 13:59:16 -08:00
yanas db71de97af Reactify mute remote participant (#2145)
* fix(remote-mute): Moves remote participant mute to react

* fix(translation): Removes unused strings

* [squash] Addressing comments
2017-11-09 09:23:17 -08:00
Lyubo Marinov 70d064cfa2 [RN] Fix React warnings 2017-11-07 17:28:28 -06:00
Lyubo Marinov 78d1fd10e2 [RN] Tap to toggle Toolbox 2017-11-07 17:27:58 -06:00
Lyubo Marinov 2b8a770163 [RN] Consistent margins for Filmstrip and Toolbox
With the introduction of wide and narrow layouts the margins of the
Filmstrip and the Toolbox became inconsistent. For example, the
Filmstrip's top in the wide layout was nearer to the top than the
secondary Toolbar.
2017-11-07 17:27:58 -06:00
Lyubo Marinov d0c079dba5 Coding style 2017-11-07 17:27:58 -06:00
Lyubo Marinov bce2a9fba9 [RN] Fix eslint & flow errors 2017-11-07 17:27:58 -06:00
paweldomas 3e9d26b525 ref(Toolbox.native): extract _renderToolbars 2017-11-07 08:28:18 -06:00
paweldomas 320cfe4745 ref(base/react/Container): return null for not visible
Now that we no longer hide the filmstrip it is fine to return null
instead of trying to hide with some tricks.
2017-11-07 08:28:18 -06:00
paweldomas c0a7d6144a feat: display filmstrip on the short side
Adds the ability to detect app area's aspect ratio on react-native
through the features/base/aspect-ratio.

Makes conference, filmstrip and toolbox react to the aspect ratio
changes and display filmstrip on the shorter side of the screen.
2017-11-07 08:28:18 -06:00
virtuacoplenny 6cda93d3c1 fix(1080p): video quality label shows hd at 720 (#2131)
The minimum resolution needed to show the HD label should be
720, not 1080. However, the requested video quality for
high quality should be 1080.
2017-11-03 17:21:33 -07:00
virtuacoplenny 510334fa7f ref(notifications): convert some dialogs to error or warning notifica… (#1991)
* ref(notifications): convert some dialogs to error or warning notifications

- Expand the configurability of the Notification component so warnings
  and errors can be displayed.
- Allow Notification to take in arbitrary text for the body.
- Rename defaultTitleKey to titleKey for consistency with descriptionKey.

* ref(notifications): remove openReportDialog method

openReportDialog is a wrapper around showError that adds
a logger statement. It is being called in one place only
so remove the method and have that one place call logger.

* ref(notifications): UI.showTrackNotWorkingDialog takes a boolean

Change UI.showTrackNotWorkingDialog so it takes a boolean
arguments instead of the entire track. A small refactor so
the method needs to know less.

* [squash] Fixes eslint errors

* WiP: Fixes desktop sharing error strings and adds support button

* [squash] Fix icons appearances

* [squash] Fix translate titles and messages

* [squash] fix(translation): Fixes incorrect password string

* [squash] fix(recording): Fixes recording message

* [squash] fix(warning): Turns some warnings to errors and makes support link optional.

* [squash] fix(translation): Addressing language comments

* [squash] Fixes jsdoc and formatting

* [squash] fix(noopener): Fixes window.open noopener

* [squash] fix(constants): Extract constants and refactor NotificationWithToggle

* [squash] fix(lang): Fixes camera and mic error titles

* [squash] fix(supportLink): Renames addSupportLink to hideErrorSupportLink
2017-11-03 14:05:03 -05:00
Leonard Kim 4a90e6dc71 fix(filmstrip): create a specific target for local video appending
Instead of targetting a div that contains multiple elements
and risking the elements appearing out of order, create a
specific div for local video to append to.
2017-11-02 14:24:29 -05:00
Saúl Ibarra Corretgé 922bbb1798 [iOS] use display: 'none' to hide elements (#2128)
* [iOS] use display: 'none' to hide elements

No, it still doesn't work properly on some Android devices, sigh.
2017-11-02 10:43:32 -05:00
paweldomas b74bede0e7 feat(web/RN): update React to v16 and React Native to 0.49 2017-11-02 14:32:35 +01:00
paweldomas e520319af2 fix(redux/functions): fix typo
The intention of the code is (1) to return target if none of the setters lead
to an actual change, (2) to not modify target, and (3) to do it with a 1
copyOnWrite at most.
2017-11-02 11:04:54 +01:00
paweldomas dc24782a2c fix(external-api/middleware): invalid toString call
The intention was to override 'this' argument of 'Error.toString'.
2017-11-02 10:56:48 +01:00
virtuacoplenny 2d9ce2486e feat(1080p): pass new-style constraints to createLocalTracks (#2087)
The lib will accept new style constraints and use those
to capture audio/video. By defining the constraints in
config, there is greater flexibility for defining
and changing constraints.
2017-10-31 17:08:07 -07:00
Leonard Kim 92dbdade39 fix(filmstrip-only): set width for toolbar popovers
The popovers in filmstrip only are displaying thinly.
As a quick workaround, set a width on them. There
should only be one anyway, which shows up when
talking while muted.
2017-10-31 14:42:16 -05:00