Compare commits

...

4252 Commits

Author SHA1 Message Date
Aaron van Meerten
e48ddc28eb updated node-sass version for npm 10 2018-11-20 16:39:41 -06:00
Bettenbuk Zoltan
71edea8aac Rearrange recording feature files 2018-11-20 14:42:33 +01:00
Bettenbuk Zoltan
2b1cb75e40 [RN] Update react-native-calendar-events lib
This is required to get rid of a warning after react native update. See related commit in lib.
2018-11-19 14:35:22 +01:00
damencho
216782d606 Commit from translate.jitsi.org by user damencho.: 583 of 583 strings translated (0 fuzzy). 2018-11-14 03:33:01 +00:00
Emil Ivov
c707b82419 Replacing Atlassian with 8x8 2018-11-11 08:43:34 -06:00
Bettenbuk Zoltan
3fdf944763 Fix eslint/jsdoc warnings (doc change only!) 2018-11-08 15:52:34 +01:00
virtuacoplenny
56100d0d5c Merge pull request #3594 from mmoanis/update-docs
Update docs for AbstractRecordButton _mapStateToProps
2018-11-07 09:20:05 -08: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
Bettenbuk Zoltan
554974a36d [RN] Fix YouTube channel name list 2018-11-07 16:48:56 +01:00
mmoanis
cd943319d6 Update docs for AbstractRecordButton _mapStateToProps 2018-11-06 11:36:00 +01:00
Дамян Минков
837f496e8f Moves muc definition to be last.
Fixes common problem where people following https://github.com/jitsi/jicofo#secure-domain have a syntax error, forgetting the comma after muc definition.
2018-11-06 09:55:32 +01:00
Aaron van Meerten
c43f7c8979 Merge pull request #3589 from jitsi/max-occupants
Adds max occupant module.
2018-11-03 11:37:14 -05:00
damencho
c9c9f7eac0 Adds max occupant module. 2018-11-03 10:45:59 -05:00
Leonard Kim
5ccc397e47 chore(deps): update react-i18next from 4.8.0 to 7.13.0
None of the breaking changes seemed to affect current
usage of react-i18next and light testing of features
and language switching did not produce issues.

This update is a pre-requisite for removing deprecated react
lifecycle methods, as older versions of react-i18next
have a higher order component that uses the deprecated
componentWillMount, and that issue has been fixed since 7.8.0.
2018-10-29 20:49:53 +01:00
hristoterezov
00cd82d976 fix(analytics-ga): Ignore some events 2018-10-22 16:18:47 -05:00
hristoterezov
61deb74444 fix(welcome-page): Change text 2018-10-22 16:18:30 -05:00
Hristo Terezov
b30008e3a5 feat(welcome-page): Redesign. (#3559)
* feat(welcome-page): Redesign.

* Style adjustments.
2018-10-22 13:49:18 -05:00
bgrozev
62b6737a3f fix: Filter more events for google analytics. (#3557) 2018-10-18 17:15:27 -05:00
damencho
cd77a9176c Make sure we do only one replacement, not one over another for messages. 2018-10-18 23:37:07 +02:00
damencho
2a61968566 Fixes small video's top toolbar background in dark theme. 2018-10-18 09:51:10 +02:00
yanas
be4813e10d Revert "feat(cleanup): remove no longer used FontAwesome"
This reverts commit d3c5756f7a.
2018-10-17 16:27:18 -05:00
Saúl Ibarra Corretgé
ae890dc093 deps: update react-native-webrtc (M69) 2018-10-16 16:32:26 +02:00
Saúl Ibarra Corretgé
9407f562f6 [iOS] Simplify dynamically loading fonts 2018-10-16 14:33:48 +02:00
Saúl Ibarra Corretgé
011a46ce2d [RN] Don't bundle fonts we don't use 2018-10-16 14:33:48 +02:00
Saúl Ibarra Corretgé
8e0bd36ece deps: update react-native-vector-icons 2018-10-16 14:33:48 +02:00
Saúl Ibarra Corretgé
6f8743af3a doc: update Google SignIn integration documentation 2018-10-16 14:01:11 +02:00
paweldomas
58d220d645 deps: update LJM to fix grey overlay
Updates LJM to fix grey overlay with "user is having connectivity
issues" caused by remote track overwrite.
2018-10-16 09:58:42 +02:00
Saúl Ibarra Corretgé
d3c5756f7a feat(cleanup): remove no longer used FontAwesome 2018-10-15 14:14:25 -05:00
Saúl Ibarra Corretgé
5ff1ce5a60 [iOS] Don't show google signin button on iOS <= 10
It doesn't seem to work properly.
2018-10-12 13:17:29 -05:00
Saúl Ibarra Corretgé
843f08f38e [RN] Don't show a beta label for recordings 2018-10-12 12:03:32 -05:00
Saúl Ibarra Corretgé
418575136f [RN] Don't use webClientId on mobile
That is only required if we'd want our backend to authenticate on behalf of our
users. If the app is to authenticate directly it's not needed.
2018-10-12 13:08:20 +02:00
Saúl Ibarra Corretgé
8c97ce2ee9 deps: update react-native-google-signin 2018-10-12 13:08:20 +02:00
Saúl Ibarra Corretgé
b2245729cc [iOS] Update Podfile.lock 2018-10-12 13:08:20 +02:00
Saúl Ibarra Corretgé
cc2b5a261b deps: update lib-jitsi-meet 2018-10-10 18:07:36 +02:00
Saúl Ibarra Corretgé
13c4ec884b deps: update package-lock.json
It's impossible to avoid conflicts on a long lived PR like this. Sigh.
2018-10-10 18:07:36 +02:00
Saúl Ibarra Corretgé
7162080d00 feat(flow): tame the beast 2018-10-10 18:07:36 +02:00
Saúl Ibarra Corretgé
b71adbdf70 deps: update React Native to version 0.57 2018-10-10 18:07:36 +02:00
Saúl Ibarra Corretgé
2ae2f04f0a feat(eslint): tame the beast 2018-10-10 18:07:36 +02:00
Saúl Ibarra Corretgé
4424c456a9 deps: update eslint
This is required due to the Babel update.
2018-10-10 18:07:36 +02:00
Saúl Ibarra Corretgé
cfa1e2f90d deps: update to Babel 7 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
Saúl Ibarra Corretgé
0474031a78 deps: update react and styled-components 2018-10-10 18:07:36 +02:00
paweldomas
a57a5ca49d chore(Travis): use XCode 10 image 2018-10-09 17:54:40 -05:00
Bettenbuk Zoltan
d8c1f107da [RN] Add swipe to delete feature 2018-10-09 13:35:06 +02:00
Saúl Ibarra Corretgé
9d27c36d80 config: remove no longer used option 2018-10-08 11:31:47 -05: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
61456b0d99 Handle all day events in calendar 2018-10-04 16:21:51 +02:00
damencho
df55448a2c Fixes chat image links to reflect html base. 2018-10-03 14:44:33 -05:00
Bettenbuk Zoltan
6953569629 Fix sticky recording labels 2018-10-03 12:52:21 +02:00
hristoterezov
4d2614660c fix(recording): Show the button when the dropbox integration is disabled 2018-10-02 13:50:05 -05:00
Bettenbuk Zoltan
60f7ba7301 [RN] Remove mobile notifications 2018-10-02 20:47:41 +02:00
Bettenbuk Zoltan
e5cc732b72 [RN] Add ExpandedLabel 2018-10-02 20:47:41 +02:00
Bettenbuk Zoltan
d604cdfe27 Turn TranscribingLabel a self-containing component 2018-10-02 20:47:41 +02:00
Lars Spaenij
dc90800e50 Removed unnecessary string wrapping (#3490)
* Removed unnecessary string wrapping
2018-10-01 22:39:16 -05:00
Saúl Ibarra Corretgé
6f17988d17 [iOS] Fix warning (#3491)
When a native iOS module implements `constantsToExport` it must define
`requiresMainQueueSetup`. In this case we don't do any UI stuff so it doesn't
need to be initialized in the main thread.
2018-10-01 21:47:48 -05:00
Saúl Ibarra Corretgé
c54db8337d [iOS] Unify openURL methods and mark the old one deprecated (#3489)
Make sure both methods offer the same behavior and mark the old one as
deprecated so SDK users get a warning.
2018-09-28 14:54:09 -05:00
Дамян Минков
9a1e9fff98 Updates quick-install with instructions for systemd config. (#3488)
Fixes too many open files.
2018-09-27 16:58:10 -05:00
hristoterezov
a214be0dfe doc(dropbox): Add documentation for the mobile app. 2018-09-27 01:42:59 -05:00
hristoterezov
39a22effb1 fix(build.gradle): Move dropboxAppKey definition to defaultConfig 2018-09-27 01:42:59 -05:00
hristoterezov
ca600928f5 feat(build.gradle): Use the Dropbox app key specified in Info.plist. 2018-09-27 01:42:59 -05:00
hristoterezov
60decf7692 ref(dropbox): Consistency for the naming around the app key. 2018-09-27 01:42:59 -05:00
hristoterezov
467452d110 fix(deeplinking): After braking it with the dropbox implementation. 2018-09-27 01:42:59 -05:00
hristoterezov
af37141e3d feat(dropbox): For mobile.
This involves redesign of the web recording dialog in order to look the
same as the mobile one.
2018-09-27 01:42:59 -05: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
hristoterezov
57bf165ebd doc(config): dropbox 2018-09-27 01:42:59 -05:00
hristoterezov
38517127c3 feat(dropbox): Implement react-native module. 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
Zoltan Bettenbuk
8adc8a090a [RN] Fix duplicated notifications (#3479) 2018-09-26 11:06:26 -05:00
jakob
8c23d43a3a doc: add ubuntu universe repo note to quickinstall
Recent Ubuntus come with only main repositories enabled. See #3427.
2018-09-25 11:12:04 -05:00
bgrozev
5773bc48ed fix: Filters out e2e_rtt events for google analytics. (#3476) 2018-09-25 11:00:46 -05:00
paweldomas
9613755055 fix(Travis/iOS): use '-quiet' with 'xcodebuild' commands
This reduces 'xcodebuild' verbosity and fixed problem with exceeding 4MB
of logs size imposed by Travis CI.
2018-09-24 14:34:11 -05:00
virtuacoplenny
1fbc68d0cc Merge pull request #3471 from saghul/update-ljm
deps: update lib-jitsi-meet dependency
2018-09-21 09:01:42 -07:00
Bettenbuk Zoltan
2cbe7922f6 [RN] Dialogs: Replace legacy common style with common container 2018-09-21 15:22:27 +02:00
Saúl Ibarra Corretgé
a712e26ee2 deps: update lib-jitsi-meet dependency 2018-09-21 15:18:46 +02:00
Saúl Ibarra Corretgé
b673c4a11a feat(permissions): adjust to changes in permissions checking 2018-09-21 11:35:16 +02:00
paweldomas
8282873de5 fix(travis): tail last 500 lines of logs only on failure
This is a workaround suggested by Travis support to workaround the
"The job exceeded the maximum log length, and has been terminated."
error.

Another option would be to upload the logs somewhere, but actually it
might be more convenient not having to scroll down all those logs. We
can revisit this case if some problems will be encountered (like for
example if there's need to see something in the middle).
2018-09-20 14:49:19 -05:00
Saúl Ibarra Corretgé
2101f70a09 cleanup: remove no longer used code 🔥🔥🔥
The code for handling device availability has been disabled for a long time,
plus it's ill named since it represents 2 abstractions: lack of permissions and
lack of devices.

Time for it to rest in the git graveyard.
2018-09-19 15:12:31 +00:00
hristoterezov
717fade79c ref(proguard): Create common proguard config. 2018-09-18 14:37:05 -05:00
hristoterezov
959e687ed4 feat(proguard): Add crashlytics rules 2018-09-18 14:37:05 -05:00
hristoterezov
5f5adc3fa8 feat(proguard): enable 2018-09-18 14:37:05 -05:00
bgrozev
f317f993fd chore: Updates lib-jitsi-meet to 51a982a7c8b9c3e89be75b0fdf7fedf4748a7345. (#3463) 2018-09-18 12:45:05 -05:00
Zoltan Bettenbuk
b2baab573e Package lock changes for atlaskit (#3462) 2018-09-18 10:20:23 -05:00
virtuacoplenny
12ed711cce Merge pull request #3457 from bgrozev/update-lib-jitsi-meet
chore: Updates lib-jitsi-meet to 615934a78afb3b501976263f5f916efed7af…
2018-09-17 20:50:11 -07:00
Boris Grozev
dfbd8d71ad chore: Updates lib-jitsi-meet to 615934a78afb3b501976263f5f916efed7af0080. 2018-09-17 22:10:48 -05:00
bgrozev
d051d3450d Displays the region participants are connected to (#3451)
* feat: Displays the server region in the stats panels.

* feat: Displays the server count in the local stats panel.

* ref: Renames a variable.

* fix: Makes bridgeCount a number, clarifies docs.

* chore: Updates lib-jitsi-meet to 1ac6df97e3aa5ff880129a95754d491d89ea8c25.
2018-09-17 13:21:03 -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
Leonard Kim
7b71482b03 feat(deps): update atlaskit/dropdown-menu to 6.1.12
This is a pre-requisite to updating atlaskit/tabs to 8.0.8.
Without updating, clicking a dropdown menu within a tab
component within a modal, such as the language selector in
the settings dialog, will lock the browser.
2018-09-14 14:50:08 -05:00
bgrozev
2339f232a5 Merge pull request #3435 from jitsi/recording_analytics
feat(recording): Add analytics.
2018-09-14 14:45:33 -05:00
Leonard Kim
3bb3b4500d provide the exact classname match the tests are looking for 2018-09-14 14:40:41 -05:00
Leonard Kim
0fca0f392d feat(filmstrip): reactify the filmstrip toggle button 2018-09-14 14:40:41 -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
virtuacoplenny
37ff77cd5b Merge pull request #3416 from zbettenbuk/calendar-invite
[RN] Add calendar invite
2018-09-12 10:03:27 -07:00
Дамян Минков
fd30481ac2 Disable buttons only when token features is enabled. Fixes #3355. (#3443)
* Disable buttons only when token features is enabled. Fixes #3355.

* squash: update disabled check.

* squash: update disabled and disabledByFeatures.
2018-09-11 15:33:45 -07: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
virtuacoplenny
32fbcb17b9 Merge pull request #3442 from virtuacoplenny/lenny/subtitles-blown-away
fix(subtitles): fix typo that was blowing away subtitles on update
2018-09-11 13:41:34 -07:00
hristoterezov
d3bf0b7862 feat(recording): Add analytics. 2018-09-11 13:35:38 -05:00
Leonard Kim
17f4b24a3f fix(notification): change title for kick notification 2018-09-11 13:10:04 -05:00
virtuacoplenny
e63cd8c81b feat(tile-view): exit tile view on pin (#3430)
* feat(tile-view): exit tile view on pin

* Try out this other ux impl
2018-09-11 13:09:07 -05:00
Leonard Kim
282e66b2dc fix(subtitles): fix typo that was blowing away subtitles on update 2018-09-11 11:08:15 -07:00
Leonard Kim
72922130a2 fix(calendar): allow text to wrap and grow tile
Long meeting titles and urls can force text outside of the
tile.
2018-09-11 10:30:24 -05:00
Leonard Kim
514175b1af chore(deps): update most atlaskit dependencies
Update the following to the latest:
avatar
button
checkbox
field-text
field-text-area
icon
inline-message
layer-manager
lozenge
modal-dialog (one version before breaking changes)
multi-select
spinner
theme
tooltip

The following were not updated:
- droplist was removed because usage could not be found
- flag was not updated due to regressions with stacking animations
- inline-dialog was not updated because it requires (likely simple)
  fixing of position props
2018-09-11 10:27:00 -05:00
damencho
ceb8d7b03d Commit from translate.jitsi.org by user damencho.: 562 of 562 strings translated (0 fuzzy). 2018-09-11 14:43:48 +00:00
paweldomas
22803f36e9 chore(package.json): bump react-native-callstats to 3.53.4 2018-09-07 20:16:06 -05:00
Дамян Минков
7674e90d4d Adds dial in default number and pin to the text for calendar/share. (#3421)
* Adds dial in default number and pin to the text for calendar/share.

* Handles fail to fetch numbers or conference id.
2018-09-07 17:48:58 -05: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
ee9f304345 fix(RN): show the CC button only when transcribing is available 2018-09-07 16:48:16 -05:00
Leonard Kim
f148b50100 fix(calendar): join button goes to meeting 2018-09-06 15:21:14 -05:00
paweldomas
95785a9585 ref(Notification.native): remove unnecessary View
The styles.actionColumn does not exist. It looks the same without the
extra View.
2018-09-05 18:43:49 -05:00
paweldomas
26d906fa46 feat(RN): displays transcription subtitles 2018-09-05 18:43:49 -05:00
paweldomas
eac069c930 ref(Conference.native): move notifications container
Moves NotificationContainer to the toolbox and filmstrip container, so
that there's no need to manually calculate the positions.
2018-09-05 18:43:49 -05:00
paweldomas
5119f41af6 ref(NotificationsContainer.native): simplify
The outer container is not necessary if 'justifyContent: flex-end' is
used with the absolute fill on the main container.
2018-09-05 18:43:49 -05:00
paweldomas
e2771b53bb feat(transcriptions): add ClosedCaptionButton.native 2018-09-05 18:43:49 -05:00
paweldomas
008fb868a6 feat(transcriptions): add TranscribingLabel.native 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
Bettenbuk Zoltan
9fe2b834eb [Android] Implement Activity.onActivityResult 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
Saúl Ibarra Corretgé
288bb59f71 deps: update react-native-webrtc dependency
It includes a W3C-ish permissions API which we will leverage.
2018-09-05 14:56:00 -05:00
Saúl Ibarra Corretgé
f3d623e0ca android: move calendar permission handling to the SDK
Since this is a feature implemented in the SDK, it makes sense that all the
plumbing required to make it work it's in the SDK itself.
2018-09-05 14:56:00 -05:00
Saúl Ibarra Corretgé
388c906312 android: implement the PermissionAwareActivity interface
This makes the PermissionsAndroid builtin module work.

Introduce the JitsiMeetActivityInterface, which defines the interface that
activities using JitsiMeetView directly must implement in order to ensure full
functionality.
2018-09-05 14:56:00 -05:00
virtuacoplenny
2043845d52 Merge pull request #3419 from virtuacoplenny/lenny/queue-replace-track
Queue replaceLocalTrack
2018-09-05 10:20:12 -07:00
Lyubo Marinov
024671165a [RN] No VideoQualityLabel in Picture-in-Picture 2018-09-05 00:22:19 -05:00
Lyubo Marinov
aba0912abf [RN] No upcoming-meeting notification in Picture-in-Picture 2018-09-05 00:22:19 -05:00
Lyubo Marinov
e446acb045 Coding style: consistency, documentation comments, formatting 2018-09-05 00:22:19 -05:00
Leonard Kim
3927f29ba8 fix(tracks): enqueue track replacement
The process for doing a replaceLocalTrack is async. Is it
possible to trigger replaceLocalTrack multiple times before
each call is finished. This leads to situations where
replaceLocalTrack is called multiple times with oldTrack being
null and a new track. In this scenario, each new track will be
added, causing UI issues such as the local participant's
large video not displaying for remote participants.

The action replaceLocalTrack is used when unmuting audio or
video, when creating new tracks on device switch, and when
toggling screensharing. These actions can collide with each
other. One way to fix this would be to queue replaceLocalTrack.
2018-09-04 09:39:02 -07:00
Leonard Kim
dafcde5060 ref(video-layout): remove instance variable for gating show/hide
The instance variable is not accurate. By default isVisible is
set to false but nothing sets the video container to actually
not be visible. As such it is possible for the video element
itself to autoplay, thereby making video visible, while the
isVisible boolean is still false. The fix chosen is to remove
instance variable and always respect calls to show/hide so
that the video container can be set to hidden.
2018-09-04 09:39:02 -07:00
Leonard Kim
3b754fa219 fix(tracks): mute tracks before using when created on device list change 2018-09-04 08:51:02 -07:00
Geert Stappers
4283d8b342 doc: describe what BOSH is 2018-09-04 17:34:38 +02: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
Lyubo Marinov
79bd5cce00 react-native-webrtc: "android: prevent crash when checking camera facing mode (#37)" 2018-08-31 16:27:51 -05:00
Saúl Ibarra Corretgé
4fd8172126 [Android] Add LeakCanary
LeakCanary is a memory leak detection library which will run only in Debug mode.
2018-08-31 16:27:51 -05:00
virtuacoplenny
fe7652ec90 feat(tile-view): persist setting in local storage (#3379)
* feat(tile-view): persist setting in local storage

* comment
2018-08-31 10:36:01 -05:00
virtuacoplenny
72776e3a23 chore(deps): update lib for duplicate device list event fix (#3413) 2018-08-30 19:35:11 -07:00
Saúl Ibarra Corretgé
8addf0f436 deps: update react-native-fast-image (#3411)
Fixes a memory leak in Android: https://github.com/DylanVann/react-native-fast-image/pull/214

We are using our fork which is 4.0.14 + the leak fix because the last version
(5.0.3 at the time of this writing) contains a bug that prevents us for using
it: https://github.com/DylanVann/react-native-fast-image/issues/208
2018-08-30 18:19:04 -05:00
damencho
73146e77cc Commit from translate.jitsi.org by user damencho.: 447 of 447 strings translated (0 fuzzy). 2018-08-30 19:14:54 +00:00
damencho
28115b963d Commit from translate.jitsi.org by user damencho.: 447 of 447 strings translated (0 fuzzy). 2018-08-30 19:11:12 +00:00
jitsi-pootle
15819f7974 New files added from translate.jitsi.org based on templates 2018-08-30 19:07:20 +00:00
Leonard Kim
deb58798ba fix(tile-view): stop using border on active-speaker, shadow only
The border changes the tile sizing, due to box-sizing, and that
messes with the video aspect ratio.
2018-08-29 12:41:42 -05:00
Leonard Kim
07ccb0a386 fix(tile-view): hide any horizontal overflow 2018-08-29 12:41:42 -05:00
Saúl Ibarra Corretgé
8d6e1b1872 deps: update lib-jitsi-meet
Required due to API changes for promises support.
2018-08-29 09:22:28 -05:00
Saúl Ibarra Corretgé
80dadd0218 [RN] Update react-native-webrtc for promises support 2018-08-29 09:22:28 -05: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
Lyubo Marinov
3ad27961e5 [iOS] Fix Jitsi Meet v1.18.x "Missing Purpose String in Info.plist File" issues reported by App Store Connect
App Store Connect reported the following issues in (and rejected the binary
of) Jitsi Meet 1.18.x:

NSBluetoothPeripheralUsageDescription
NSAppleMusicUsageDescription
NSMotionUsageDescription
NSSpeechRecognitionUsageDescription

Starting spring 2019, all apps submitted to the App Store that access user
data will be required to include a purpose string for the following:

NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
2018-08-28 10:00:55 +02: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
Lyubo Marinov
d62974b433 [RN] Update react-native-calendar-events (continued)
PR https://github.com/wmcmahan/react-native-calendar-events/pull/186 has
been merged upstream.
2018-08-26 21:53:42 -05:00
Saúl Ibarra Corretgé
8ff33684f7 [RN] Update react-native-calendar-events
Fixes a crash on Android. Upstream PR: https://github.com/wmcmahan/react-native-calendar-events/pull/186
2018-08-26 20:30:30 -05:00
bgrozev
b8179102c5 Merge pull request #3396 from nikvaessen/pr_independend_subtitles_cherry
independently display subtitles based on participants choice
2018-08-24 12:38:11 -05:00
linkmauve
c23c798f7a Display the correct display name in the menu (#3388)
The current code was splitting it on a space, which made nicknames such as “Link Mauve” appear as “Link”, whereas it gets displayed correctly everywhere else in the UI.
2018-08-22 12:35:48 -07:00
Nik
3c27d2ee54 independently display subtitles based on participants choice 2018-08-22 19:49:58 +02: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
Hristo Terezov
99d285519d chore(lib-jitsi-meet): Update version. (#3381) 2018-08-16 16:58:54 -07:00
hristoterezov
2704b2f822 fix(dropbox): Address code review comments. 2018-08-16 13:53:43 -05:00
hristoterezov
62544188bd feat(recording): Add analytics event and logging. 2018-08-16 13:53:43 -05:00
hristoterezov
df0e107ea6 feat(recording): Implement dropbox integration 2018-08-16 13:53:43 -05:00
Saúl Ibarra Corretgé
f10d42f8e4 Fix processing context root
Yours truly refactored routing in https://github.com/jitsi/jitsi-meet/pull/3222
and broke it. When a bare room is entered the pathname was not updated when
applying the default URL.
2018-08-16 12:02:14 +02: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
virtuacoplenny
87c010a9bd fix(subtitles): adjust styling for tile view (#3365)
- Increase z-index so the subtitles display over tiles.
- Add a background to the subtitle text.
- In general make the subtitles narrower.
2018-08-14 17:44:21 -07:00
linkmauve
8d0d92a437 Log the amount of local tracks properly
This changes a log message from “initialized with %s local tracks 2” to “initialized with 2 local tracks”.
2018-08-14 10:53:47 +02:00
linkmauve
faada0abae Print a nicer log message on participant join/part
This makes the logs more readable.
2018-08-14 10:53:18 +02: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
Lyubo Marinov
9aed4df6d2 react-native-webrtc: android: pass correct constraints map to VideoCaptureController 2018-08-11 18:03:05 -05:00
Saúl Ibarra Corretgé
d92b720704 [RN] Update calendar-events dependency
Includes a fix for not running expensive operations on the main thread.
2018-08-10 15:11:37 +02:00
bgrozev
25aaa74edc Merge pull request #3223 from ztl8702/local-recording
Feature: Local recording (Ready for review)
2018-08-08 19:35:11 -05:00
Boris Grozev
195462a1a8 Merge branch 'master' into pr/3223 2018-08-08 15:35:40 -05:00
bgrozev
9c03e95bf1 npm: Updates lib-jitsi-meet to 4a28a196160411d657518022de8bded7c02ad679. (#3357) 2018-08-08 14:42:32 -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
Radium Zheng
913c56c408 fix comments and docs 2018-08-08 11:58:38 +10:00
bgrozev
2f1223f721 fix: Handles the case of e2eRtt being undefined. (#3354) 2018-08-07 18:39:10 -07:00
Radium Zheng
4f1aaf89bf update package-lock.json 2018-08-08 09:26:49 +10:00
Radium Zheng
df6df1c6c3 refactor: AbstractAudioContextAdapter
move duplicate code from WavAdapter and FlacAdapter to a base class
2018-08-08 09:19:53 +10:00
Radium Zheng
1e804e552e fix: FlacAdapter get sampleRate 2018-08-08 09:19:53 +10:00
Radium Zheng
b284f25fde Refactor how download works. Cleaner filenames. 2018-08-08 09:19:53 +10:00
Radium Zheng
49bdd53bee Fix issue on mobile platforms 2018-08-08 09:19:53 +10:00
Radium Zheng
0827e02de9 use official repo for libflac.js 2018-08-08 09:19:53 +10:00
Radium Zheng
0410af9e5e add guard before APP in middleware.js 2018-08-08 09:19:28 +10:00
Radium Zheng
5a051024e6 clean up WavAdapter 2018-08-08 09:19:28 +10:00
Radium Zheng
e2def5f88b simplify Promise chaining in FlacAdapter 2018-08-08 09:19:28 +10:00
Radium Zheng
1078fa9d05 remove 'localRecording' from interface_config.js 2018-08-08 09:19:28 +10:00
Radium Zheng
dda7568a48 UI: refine LocalRecordingInfoDialog 2018-08-08 09:19:28 +10:00
Radium Zheng
4550848eac fix comments in flac-related codebase 2018-08-08 09:19:28 +10:00
Radium Zheng
7822831b1e UI: add a "Local Recording" label 2018-08-08 09:19:28 +10:00
Radium Zheng
e03126e422 fix sampleRate issues in flac and wav 2018-08-08 09:19:28 +10:00
Radium Zheng
61652c69b3 SessionManager 2018-08-08 09:19:28 +10:00
Radium Zheng
b6e1a49d33 Switching microphone on the fly: flac and wav support 2018-08-08 09:19:28 +10:00
Radium Zheng
e0ac3efb5c comment out section in config.js 2018-08-08 09:19:28 +10:00
Radium Zheng
65c76dcde5 Muting support
fix Promise in setMuted
2018-08-08 09:19:28 +10:00
Radium Zheng
5daa91ec1b update libflac.js to 4 and use proper fork 2018-08-08 09:19:28 +10:00
Radium Zheng
473ba28171 feature flag 2018-08-08 09:18:16 +10:00
Radium Zheng
52b55d65a0 change LocalRecordingInfoDialog 2018-08-08 09:18:16 +10:00
Radium Zheng
8ebf2b7e47 analytics: keyboard shortcut 2018-08-08 09:18:16 +10:00
Radium Zheng
cc38fcc5d0 register shortcuts in the middleware 2018-08-08 09:18:16 +10:00
Radium Zheng
a277421ecb WIP: Convert inline dialog to modal dialog 2018-08-08 09:18:16 +10:00
Radium Zheng
2f2e69a6f5 Add keyboard shortcuts for LocalRecordingInfoDialog
Which key should we use? Using "L" for now.
2018-08-08 09:18:16 +10:00
Radium Zheng
0490a3cf73 Refactor RecordingController 2018-08-08 09:18:16 +10:00
Radium Zheng
bfc8ecfaa6 changed one comment line 2018-08-08 09:18:16 +10:00
Radium Zheng
42c827434c clean up in LocalRecordingInfoDialog 2018-08-08 09:18:16 +10:00
Radium Zheng
0f3b67e53e reducer should be a pure function 2018-08-08 09:18:16 +10:00
Radium Zheng
2dfb107c57 UI strings: durationNA and moderater's finish message 2018-08-08 09:18:16 +10:00
Radium Zheng
f8c01646c7 Temp fix: newly joined clients miss the commands
When newly joined clients register for XMPP events upon
CONFERENCE_JOINED, those events that is carried by presence (e.g. START_COMMAND) was
already fired.
Temporary solution is to let the client send a ping message after
registering XMPP event listeners. The moderator will respond with
pong, which forces the presence to be resent.
2018-08-08 09:18:16 +10:00
Radium Zheng
0f0f9ea1b2 bug fix: multiple StartCommands
Situation when the RecordingController receives a new START_COMMAND
while it is initializing the recording adapter for the previous
START_COMMAND.
2018-08-08 09:18:16 +10:00
Radium Zheng
ce308eaa8b refactor: remove ensureInitialized 2018-08-08 09:18:16 +10:00
Radium Zheng
337cea6488 don't use params to switch actionType 2018-08-08 09:18:16 +10:00
Radium Zheng
e125861b29 refactor: use createLocalTracks instead of gUM; fix some docs; 2018-08-08 09:18:16 +10:00
Radium Zheng
3241c7a929 guard LocalRecordingButton with _shouldShowButton 2018-08-08 09:18:16 +10:00
Radium Zheng
55a2ef30a0 a11y label 2018-08-08 09:18:16 +10:00
Radium Zheng
ae0bd9e64e remove excessive comments in flacEncodeWorker.js 2018-08-08 09:18:16 +10:00
Radium Zheng
9c769a650e fix a missing doc string in Toolbox.js; reorder props alphabetically 2018-08-08 09:18:16 +10:00
Radium Zheng
07bc70c2f5 Implement local recording
index.js of local recording

local-recording(ui): recording button

local-recording(encoding): flac support with libflac.js

Fixes in RecordingController; integration with UI

local-recording(controller): coordinate recording on different clients

local-recording(controller): allow recording on remote participants

local-recording(controller): global singleton

local-recording(controller): use middleware to init LocalRecording

cleanup and documentation in RecordingController

local-recording(refactor): "Delegate" -> "Adapter"

code style

stop eslint and flow from complaining

temp save: client status

fix linter issues

fix some docs; remove global LocalRecording instance

use node.js packaging for libflac.js; remove vendor/ folder

code style: flacEncodeWorker.js

use moment.js to do time diff

remove the use of console.log

code style: flac related files

remove excessive empty lines; and more docs

remove the use of clockTick for UI updates

initalize flacEncodeWorker properly, to avoid premature audio data transmission

move the realization of recordingController events
from LocalRecordingButton to middleware

i18n strings

minor markup changes in LocalRecordingInfoDialog

fix documentation
2018-08-08 09:18:16 +10: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
Nik
7e1d97665a fix: only access nested json values when corrent payload type (#3352) 2018-08-07 09:03:31 -07:00
Zoltan Bettenbuk
b978851a0f [RN] Fix streaming on mobile (#3351) 2018-08-06 17:30:32 -07:00
Nik
ef49817eaf fix: add a timer which automatically clears subtitles (#3349) 2018-08-06 14:30:50 -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
Praveen Gupta
81853d971a [WEB] Show final translated speech to text results as subtitles (#3276)
* Shows final translated speech to text results as subtitles

* Use conference from redux state and removes addTranscriptMessage
2018-08-06 11:24:37 +02: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
Saúl Ibarra Corretgé
8d3cecad86 [Android] Update JSC version
The JSC version used by React Native is about 3 years old, and doesn't implement
things like Symbol or Typed Arrays, which require polyfills. These polyfills are
sometimes a los less performant, as is the case for Typed Arrays.

Bumping an updated JSC version makes both platforms consistent when it comes to
the JavaScript platform.
2018-08-05 17:04:16 -05:00
hristoterezov
bd8559fad6 fix(invite): IFrame api when invalid invitees are passed. 2018-08-03 12:42:38 -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
Дамян Минков
af7c69a1aa Moves google-api in its own feature. (#3339)
* Moves google-api in its own feature.

* Stores the profile email in redux.
2018-08-02 14:56:36 -07:00
Saúl Ibarra Corretgé
7ad0639f7a [RN] Fix setting audio mode for audio-only calls
When a call is tarted in audio only mode due to the switch on the welcome page,
the wrong audio mode was chosen.
2018-08-01 22:12:08 +02:00
paweldomas
54a1853e60 fix(ios/Podfile.lock): bump SDWebImage/Core version 2018-07-31 14:07:17 -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
2b9ce40533 feat(travis): bump image version 2018-07-31 12:54:01 -05:00
paweldomas
d3dd833f21 fix(ios/travis-ci) try pod update
With the fastimage lib Travis complains about:

CocoaPods could not find compatible versions for pod "SDWebImage/Core"
2018-07-31 12:54:01 -05:00
Neil Brown
1cc372868b Update quick-install.md
Tweaks for clarity.
2018-07-31 11:35:18 +02:00
bgrozev
a6956c7c34 Commit from translate.jitsi.org by user bgrozev.: 447 of 447 strings translated (0 fuzzy). 2018-07-30 14:27:03 -05:00
Leonard Kim
aaaa3e05d1 ref(thumbnail): pass in position of remote menu popover 2018-07-30 11:48:52 -05:00
Saúl Ibarra Corretgé
467a5aaae3 ios: run audio mode operations on a dedicated thread
There is no reason for them to run on the main thread, it's safe to call
AVFoundation functions on threads other than the main thread.

The previous code made an incorrect claim about the thread in which the audio
route change notification selector is called: it's called on a secondary thread:
https://developer.apple.com/documentation/avfoundation/avaudiosessionroutechangenotification
2018-07-27 15:39:39 -05:00
Saúl Ibarra Corretgé
243dd16285 android: run all audio and bluetooth operation on a dedicated thread 2018-07-27 15:39:39 -05:00
Saúl Ibarra Corretgé
92001f4d37 android: run WiFi stats operations on a dedicated thread 2018-07-27 15:39:39 -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
virtuacoplenny
590ad90cd1 ref(video-layout): resize thumbnails first when resizing video area (#3308) 2018-07-26 11:45:04 -07:00
Nik
ca62e902bc Merge pull request #3312 from nikvaessen/master
comment out transcribingEnabled property; in code defaults to false
2018-07-26 19:51:38 +02:00
virtuacoplenny
34d1eb6768 ref(filmstrip): create an empty container for local filmstrip move (#3303)
* ref(filmstrip): create an empty container for local filmstrip move

This might be necessary for tile view. To support making the
local video display at the end of remote videos while in tile
view, but separateed from scrollable remote videos, moving
the local video might be necessary. By creating an empty
container, there is a target for local video to move to.

* squash: rename id
2018-07-26 12:51:15 -05:00
Nik Vaessen
b6b21e5410 comment out transcribingEnabled property; in code defaults to false 2018-07-26 19:10:40 +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
virtuacoplenny
39f1958300 ref(filmstrip): apply filmstrip class to Conference root (#3294)
* ref(filmstrip): apply filmstrip class to Conference root

Instead of apply the layout class to the body, it can be
applied to Conference. This will allow easier switching
between tile filmstrip and horizontal/vertical filmstrip.

* squash: fix typo filstrip
2018-07-25 13:00:00 -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
Pablo Saavedra
fd78203ff8 noticeMessage is not shown (refs #3295)
* Get back the Notice class
* Add Notice component in the Conference web view
* Notice is not exported in index.js. Only used internally by
  Conference.
* noticeMessage value obtained from features/base/config
  * using mapStateToProps
  * value is stored in the internal _message property
* Notice component, orignal in `toolbox` is moved from
  `toolbox/components` to `conference/components`
* Notice component only implemented and renderable in web views
* Dummy `conference/components/Notice.naive.js`

This patch is partially based in the removed logic included
originally in:

    commit 59a74153dc
    (tag: jitsi-meet_1886, tag: jitsi-meet_1885, tag: 1797, tag: 1796)
    Author: Ilya Daynatovich <shupuercha@gmail.com>
    Date:   Mon Mar 20 11:04:54 2017 -0500

      Toolbar notice as React Component

In reply to: Saúl Ibarra Corretgé @saghul> comments

Signed-off-by: Pablo Saavedra <psaavedra@igalia.com>
2018-07-25 14:16:47 -05: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
50ea847905 Refactor welcome page in prep for branding (#3230)
* fix(welcome-page): css tweaks in prep for branded welcome page

- Watermarks should no longer depend on toolbar size. The left watermark made
  room for the toolbar when the toolbar was on the left side of the screen, but
  the toolbar has been moved to the bottom. The right watermark...well it'll
  clash with the vertical filmstrip but at least the margins will be consistent
  with the left watermark.
- Apply new font-family so fonts are more likely to be consistent across the
  app. Design likes SF UI and keeps requesting it so use it by default.
- Change sizings of welcome page header to be more responsive. This will help
  the header be scrollable when there is no additional content and the header
  overflows.
- Change colors of the welcome page header and remove background image that
  was in the header. Leave in the dom for the background image in case other
  deployments need to continue showing an image.
- Add a period to the title of the welcome page.
- Move watermarks dom location as it is not part of the header; it's part of the
  whole page.

* [squash] Size and font adjustments. Renaming.
2018-07-24 14:26:17 -05:00
virtuacoplenny
b54a9e2bf7 chore(deps): update lib for selecting participants and maxFrameHeight caching (#3291) 2018-07-23 14:20:30 -07:00
virtuacoplenny
918fb1dfc6 ref(utils): use web reportError helper (#3283) 2018-07-21 08:16:32 -07:00
Дамян Минков
9f015df61d Commit from translate.jitsi.org by user damencho.: 446 of 447 strings translated (0 fuzzy). (#3257) 2018-07-20 15:07:29 -05:00
Leonard Kim
2cd1b7f80b fix(presence-label): set position for small video presence label only 2018-07-20 13:27:28 -05:00
virtuacoplenny
afd2aea79c ref(large-video): combine selectParticipant logic from web (#3266)
* ref(large-video): combine selectParticipant logic from web

Currently native/middleware/redux has its own logic for selecting a participant
on the bridge. To have the logic web respect that logic, a few changes are
needed.
- Web no longer has its own call to selectParticipant.
- To keep in line with web logic selectParticipant action should act even when
  there is no track. This makes it so that when a participant does get a track
  that the bridge will send high quality. The bridge can already handle when the
  selected participant does not have a video track.
- The timing of web is such that on joining an existing conference, a
  participant joins and the participant's tracks get updated and then the
  conference is joined. The result is selectParticipant does not get fired
  because it no-ops when there is no conference. To avoid having to make
  uncertain changes (to be lazy), update the selected participant on conference
  join as well.

* squash: update comment, pass message to error handler
2018-07-20 13:19:26 -05:00
virtuacoplenny
c62f761d67 fix(dial-in): allow scroll on dial in info page (#3271)
* fix(dial-in): allow scroll on dial in info page

* squash: some more tweaks for flexible sizing
2018-07-20 10:32:28 -05:00
Boris Grozev
acda279111 npm: Updates lib-jitsi-meet. 2018-07-19 17:10:28 -05:00
Daniel Ornelas
ccf9e2a362 deps: update react-native-webrtc
This version uses a worker queue for all WebRTC operations in iOS.
2018-07-19 18:35:56 +02:00
Saúl Ibarra Corretgé
3154c6f936 [RN] Don't request camera permission on first launch
It will only be requested if a user joins a meeting or flips the switch from
video to audio and back, but never as the first thing when the welcome page is
mounted.
2018-07-19 09:03:22 -05:00
Lyubo Marinov
8ff3ae0ab2 [Android] Introduce IncomingCallView (continued) 2018-07-18 22:47:18 -05:00
Saúl Ibarra Corretgé
ea22d12581 [Android] Introduce IncomingCallView
It's a separate view (on the native side) and app (on the JavaScript side) so
applications can use it independently.

Co-authored-by: Shuai Li <sli@atlassian.com>
Co-authored-by: Pawel Domas <pawel.domas@jitsi.org>
2018-07-18 22:47:18 -05:00
Saúl Ibarra Corretgé
39e236a42c feat(external_api): export sendEvent function
Small reorganization so other features can send events to the native side.
2018-07-18 22:47:18 -05:00
paweldomas
01c2786c95 ref(base/util): move getSymbolDescription to util 2018-07-18 22:47:18 -05:00
Saúl Ibarra Corretgé
9972e88b67 [Android] Split base functionality out of JitsiMeetView
As the need for adding more views connected with our React code arises, having
everything in JitsiMeetView is not going to scale.

In order to pave the way for multiple apps / views feeding off the React side,
the following changes have been made:

- All base functionality related to creating a ReactRootView and layout are now
  in BaseReactView
- All Activity lifecycle methods that need to be called by any activity holding
  a BaseReactView are now conveniently placed in ReactActivityLifecycleAdapter
- ExternalAPIModule has been refactored to cater for multiple views: events are
  delivered to views, and its their resposibility to deal with them
- Following on the previous point, ListenerUtils is a utility class for helping
  with the translation from events into listener methods
2018-07-18 22:47:18 -05:00
Дамян Минков
cd1c384cc8 Enables live-streaming for guests. (#3274) 2018-07-18 18:11:54 -07: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é
13ee67d15c config: default to 720p (#3269) 2018-07-17 08:18:32 -07: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
Leonard Kim
44baca3185 fix(device-selection): pass dispatch so preferred speaker is saved 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
Aaron van Meerten
6b7a883331 Merge pull request #3265 from jmacelroy/table-async-wrapper
Creating a new async prosody http wrapper.
2018-07-16 17:01:48 -05:00
jmacelroy
944cf4272d Creating a new async prosody http wrapper. 2018-07-16 21:58:48 +00:00
Aaron van Meerten
cc27e96b22 Merge pull request #3264 from jmacelroy/missed-calls
feat(calls): Adding missed call event triggering.
2018-07-16 12:52:58 -05:00
virtuacoplenny
4e4755f91e Remove state from mediaDeviceHelper (#3226)
* ref(device-selection): do not override var that is not reference again

* ref(device-selection): do not override var that is not reference again

* ref(device-selection): always update known devices on device list update

* ref(device-selection): replace call to get devices from legacy to redux

* ref(device-selection): remove unused device list state from mediaDeviceHelper

* ref(device-selection): update store before updating UI
2018-07-13 10:31:28 -07:00
virtuacoplenny
0dcf8ef2f6 fix(device-selection): add hover color for device output test (#3254) 2018-07-13 10:08:35 -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é
980648df4d feat(App): remove ability to specify an external redux store
It was never used in practice, and it would be very cumbersome to use, since it
would have to bcreated with all the middlewares and reducers we need. After
discussing this with Lyubomir, we are confident this is not going to be needed
so it can go.
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
9c4da125c8 lib-jitsi-meet "core: refactor initialization not to return a Promise (continued)" 2018-07-12 00:05:40 -05: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
jmacelroy
d189888902 feat(calls): Adding missed call event triggering. 2018-07-11 21:09:53 +00:00
Bettenbuk Zoltan
5aee082bf9 [RN] Implement streaming on mobile 2018-07-11 15:13:16 -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
bd449be20d fix(VideoLayout): JS error if updateLargeVideo is called too early. 2018-07-09 20:22:43 -05:00
hristoterezov
9331b0870b fix(presence-label):styles 2018-07-09 20:22:43 -05:00
hristoterezov
00d1edcdef fix(jwt): import for mobile. 2018-07-09 20:22:43 -05:00
hristoterezov
769e782c6f feat(callee-info): Redesign. 2018-07-09 20:22:43 -05:00
virtuacoplenny
485ff81443 fix(hangup): truthy check for deviceChangeListener before removing it (#3235)
It can be that deviceChangeListener is never defined because
the isDeviceList call never completes. On hangup, that would
cause an error to be thrown within lib-jitsi-meet because of
an attempt to remove an undefined event handler. That is
what happens on Safari right now.
2018-07-09 11:46:26 -07:00
damencho
d12afc5c07 Fixes the room size api which returns string result back to client. 2018-07-09 13:44:24 -05:00
akshitkrnagpal
20444adbc9 Added emailChange listener to API 2018-07-09 10:14:27 -05:00
Zoltan Bettenbuk
63c017f8e6 Fix persistency to handle default values too (#3228) 2018-07-06 11:03:16 -07:00
virtuacoplenny
afe7c4470d feat(small-video): add flag to hide connection indicators (#3225) 2018-07-06 08:24:38 -07:00
Дамян Минков
3f3a957f40 Removes unneeded translation. (#3217) 2018-07-03 13:34:43 -07:00
Emil Ivov
26c0164f1e Merge pull request #3211 from saghul/audio-route-copy
[RN] Update audio route selection copy
2018-07-03 19:01:06 +03: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
damencho
baa2c217de Syncs with latest lib-jitsi-meet (98acf13).
Detects msid changes and signals them, part of fixing start A/V muted using Firefox.
2018-07-02 22:41:00 -05:00
Leonard Kim
5dc2aca081 fix(video-layout): handle undefined video type for large video update
When replace track is called in JitsiConference, there is no
guarantee a videoType update will come in presence before
the track added event. This can lead to the situation in
LargeVideoManager where an update is called with a track
with an undefined videoType.
2018-07-02 21:54:16 -05: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
jmacelroy
1c6d22b75e Adding state to poltergeist store for correlating external resources with calls. 2018-06-29 14:51:48 -05:00
Leonard Kim
2547ee3a04 ref(filmstrip): use explicit class for horizontal filmstrip
This will make it easier to support horizontal, vertical, and
tile layout filmstrip by reducing the css overriding needed
for tile layout.
2018-06-29 20:11:59 +01:00
Leonard Kim
7328dd9125 ref(filmstrip): add class to body for horizontal filmstrip 2018-06-29 20:11:59 +01:00
Leonard Kim
0aa2d81844 ref(filmstrip): move vertical filmstrip container styles to own file 2018-06-29 20:11:59 +01:00
Leonard Kim
e1f7d4585e ref(filmstrip): move some video container overrides 2018-06-29 20:11:59 +01:00
Leonard Kim
bdae4b9493 ref(filmstrip): remove ie11 css flex hack 2018-06-29 20:11:59 +01:00
Leonard Kim
8f688c3535 ref(filmstrip): move around small video and quality label styles 2018-06-29 20:11:59 +01:00
Leonard Kim
60ae8497c0 ref(filmstrip): move some small video specific styling to own file 2018-06-29 20:11:59 +01:00
Leonard Kim
7c1b7a588e ref(filmstrip): move filmstrip styles to filmstrip folder 2018-06-29 20:11:59 +01:00
Leonard Kim
fd05f120ff ref(filmstrip): move vertical filmstrip overrides to new filmstrip folder 2018-06-29 20:11:59 +01:00
Leonard Kim
d9fa05f42e ref(filmstrip): move toolbar css to own file 2018-06-29 20:11:59 +01:00
Leonard Kim
12901be6be ref(filmstrip): move presence label styles with similar styles 2018-06-29 20:11:59 +01:00
Zoltan Bettenbuk
009eeccf3c Merge pull request #3142 from virtuacoplenny/lenny/new-audio-output-icon
feat(device-selection): new icon for audio output
2018-06-29 14:50:46 +02:00
Zoltan Bettenbuk
e01acd9cf0 Merge pull request #3187 from virtuacoplenny/lenny/cleanup-new-toolbox-css
ref(toolbar): remove use-new-toolbox class
2018-06-29 14:48:15 +02:00
Bettenbuk Zoltan
ac63a0fa73 Calendar feature disabled state getter
This commit adds a state getter that considers checking the enabled/disabled state of the calendar feature, so then other features don’t have to do it manually.
2018-06-29 09:36:34 +01:00
Saúl Ibarra Corretgé
1d296f9704 [RN] Update audio route selection copy 2018-06-29 10:08:04 +02:00
Leonard Kim
98e3bcb691 feat(device-selection): new icon for audio output 2018-06-28 14:59:07 -07:00
Leonard Kim
880d3525db squash: pass class name into filmstrip 2018-06-28 11:06:10 -07:00
Leonard Kim
c958c64ba8 ref(toolbar): remove use-new-toolbox class
Very likely I broke something subtle and I'm prepared to fix it.
2018-06-28 11:06:10 -07:00
bgrozev
cc319ad5e9 chore: Updates the callstats lib. (#3207) 2018-06-28 17:40:33 +01:00
Saúl Ibarra Corretgé
75b2eb0f99 deps: update lib-jitsi-meet dependency 2018-06-28 13:55:12 +02:00
Saúl Ibarra Corretgé
acb3bd7ad7 feat(BrowserSupport): remove PluginRequiredBrowser
WebRTC plugin support has been axed, this is now dead code.
2018-06-28 13:55:12 +02:00
Saúl Ibarra Corretgé
7fcc95c9da feat(UnsupportedDesktopBrowser): recommend Edge, not IE 2018-06-28 13:55:12 +02:00
Saúl Ibarra Corretgé
87fa8de815 feat(sanity): axe IE and Temasys plugin support 🔥🔥🔥 2018-06-28 13:55:12 +02:00
Bettenbuk Zoltan
7164cd49e4 [RN] Implement Recording on mobile 2018-06-28 12:47:50 +02:00
Bettenbuk Zoltan
4ac367d403 [RN] Implement Labels on mobile 2018-06-28 12:47:50 +02:00
Bettenbuk Zoltan
ffd0827354 [RN] Implement Notifications on mobile 2018-06-28 12:47:50 +02:00
Sam Joseph
00f18e9369 doc: minor grammatical fix (#3202) 2018-06-28 11:07:47 +02:00
jmacelroy
401c43ee02 fix: Properly setting poltergeist ignore status. 2018-06-27 17:28:20 -05:00
Jacob MacElroy
6ae5adcb3d Creating a poltergiest library and using in for mod_muc_poltergeist. 2018-06-27 11:59:38 -05:00
Saúl Ibarra Corretgé
535e5b4f64 [iOS] Update Podfile.lock
Syntax changed slightly with an update to CocoaPods.
2018-06-26 17:59:02 +02:00
Saúl Ibarra Corretgé
a5d0bfe1d4 Merge pull request #3179 from jitsi/reload_screen_a_catch_all
[RN] Reload screen a catch all
2018-06-26 17:07:06 +02:00
paweldomas
67d7d4fc14 feat(RN): add a fatal error state which is a catch all
Adds a fatal error state on which will depend whether or not the reload
screen is to be displayed. It is to happen when a relevant fatal error
action is not claimed by any feature for error recovery (the recoverable
flag is not set).
2018-06-26 15:39:56 +02:00
Lyubo Marinov
342a00a6af lib-jitsi-meet M67 2018-06-26 01:36:50 -05:00
Lyubo Marinov
bf14e66142 react-native-webrtc M67 2018-06-26 00:08:58 -05:00
Saúl Ibarra Corretgé
c3f602b7b6 Revert "fix(android): do not require java 8 target"
This reverts commit 9e0fee6c7d.

WebRTC requires Java 8, and Java 7 is now considered unsupported:
https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/discuss-webrtc/V1h2uQMDCkA/RA-uzncVAAAJ
2018-06-25 22:58:26 -05:00
virtuacoplenny
9a06d2bf52 ref(video-layout): consolidate connection status update handling (#3185)
- Instead of having 4 listeners for local connection status
  updates and 1 for remote, remove two of the redundant listeners.
- Instead of calling into 4 separate VideoLayout methods to update a
  participant's connection status, expose one handler.
2018-06-25 10:44:12 -07:00
virtuacoplenny
2951fefef9 ref(toolbar): change tooltip prop name to stop deprecation warning (#3186) 2018-06-25 09:31:41 -07:00
damencho
361e5f0fad Adds identification of poltergeist's in presence. 2018-06-22 18:23:17 -05:00
damencho
682169e44c Renames isBot -> isFakeParticipant. 2018-06-22 18:23:17 -05:00
Leonard Kim
c65ccb0af5 fix(filmstrip): do not show video for large video speaker in audio only
When in audio only, the video should not be shown and instead the
avatar should display.
2018-06-22 17:03:25 -05:00
Leonard Kim
f035861617 ref(toolbar): allow OverflowMenuItem to show beta tag 2018-06-22 15:53:35 -05:00
Boris Grozev
045dad3354 doc: Adds a link to the quick install tutorial. 2018-06-22 14:52:17 -05:00
Zoltan Bettenbuk
b5e9c71865 Merge pull request #3160 from saghul/mobile-sounds-loop
Mobile looping sounds
2018-06-22 17:48:13 +02: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
Saúl Ibarra Corretgé
47aa14e9f6 [iOS] Fix syncing muted state with CallKit
Fix the "mute ping pong" for once and for all. This patch takes a new approach
to the problem: it keeps track of the user generated CallKit transaction ations
and avoids calling the delegate method in those cases.

This results in a much cleaner and easier to understand handling of the flow: if
the delegate method is called it means the user tapped on the mute button. When
we sync the muted state in JS with CallKit the delegate method won't be called
at all, thus avoiding the ping-pong altogether.

In addition, make sure all CallKit methods run in the UI thread. CallKit will
call our delegate methods in the UI thread too, thsu there is no need to
synchronize access to the listener / pending action sets.
2018-06-22 11:25:09 +02:00
Saúl Ibarra Corretgé
ec8ad6190d [iOS] Only update the matching local track data in CallKit 2018-06-22 11:25:09 +02:00
Saúl Ibarra Corretgé
42b85f73bd [iOS] Fix checking if a track is local in ithe CallKit middleware
Not all TRACK_ actions include the `local` attribute, so use the underlying
`jitsiTrack` to check it.
2018-06-22 11:25:09 +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
bbaldino
11c9d5f0ef change the levels for each gsm bar color (#3174)
old values: 0-39% -> red, 40-69% -> yellow, 70%+ -> green
new values: 0-9% -> red, 10-29% -> yellow, 30%+ -> green
2018-06-21 17:30:19 -07:00
virtuacoplenny
942d7d7e56 chore(deps): update lib for recording refactoring and no display name escaping (#3169) 2018-06-21 15:47:25 -07:00
Leonard Kim
e431acda18 ref(css): add height/width reset for html tag
This is needed for newer versions of electron that might
use the iframe integration of jitsi-meet. Newer versions
seem to have some kind of regression with setting height
and width to 100%.
2018-06-21 12:39:55 -05:00
virtuacoplenny
7ee63a44c5 ref(info): use conference existence as trigger for autoshowing dialog (#3083)
* ref(info): use conference existence as trigger for autoshowing dialog

* squash: combine maybeShow checks, inheritdoc

* squash: flow type tweaks
2018-06-21 12:38:53 -05:00
Saúl Ibarra Corretgé
e3bc333115 Merge pull request #3163 from manquer/patch-1
grammar and spelling fixes
2018-06-21 09:16:08 +02:00
Manquer
750d6cf534 grammer and spelling fixes 2018-06-21 11:36:16 +05:30
Leonard Kim
fecd138a3c fix(recording): red error text for google api errors 2018-06-20 23:09:43 -05: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
Jacob MacElroy
0acc9187ed Preventing expired notification for poltergeist that have left.
The original presence stanza generation code for a poltergeist
has been re-factored and simplified a bit. Every time a
poltergeist presence is updated we first check that the poltergeist
still exists.
2018-06-20 14:37:58 -05: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
b2f76f3ed6 ref(mobile/external-api): skip event if conference exists
The change to mobile/external-api is required to not emit
CONFERENCE_FAILED for CONNECTION_FAILED if the conference has been
started, because base/conference state will still hold conference
instances which are to be ended by other means and result in the
appropriate event (which will adjust the base/conference state).
2018-06-20 15:52:46 +02:00
paweldomas
85fbaac9b2 chore(deps): update LJM to 1bd6ee4b1207e6fd57f5b7c15cc17e0a6087f26d
Updates lib-jitsi-meet to have the getConnection getter in
JitsiConference.
2018-06-20 15:52:45 +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
Saúl Ibarra Corretgé
7fa941cb8c [iOS] Fix setting call type in CallKit
Your truly introduced this regression in
8c7a3f16b1, alas.

The audio only mode is used to set the CallKit call type. This affects the
behavior on the recent calls entries (calls are marked either as audio or video
calls).

Sync both at the start and for transitions. The previous code was working by
chance (in a way): when the CallKit UI is presented the local video is muted,
which triggers a SET_VIDEO_MUTED action, at which point the audio-only mode was
checked for. Now we are more explicit and act on SET_AUDIO_MUTED.
2018-06-20 08:42:30 -05:00
Daniel Ornelas
ad259988b9 [RN] Fix for creating video track when conference is ending. 2018-06-20 11:24:07 +02:00
Saúl Ibarra Corretgé
8c7a3f16b1 [iOS] Refactor muted state handling in CallKit
Rely solely on actual track state, rather than the desired state, (what
base/media represents).
2018-06-19 15:53:43 +02:00
Saúl Ibarra Corretgé
84c1c3dfd3 [iOS] Fix starting a call muted when permission was not granted
Read the muted state from the track itself instead of from base/media. This
avoid expressing the incorrect desire when the call starts muted because
permission was never granted.
2018-06-19 15:53:43 +02:00
hristoterezov
fccd0d6b29 ref(deep-linking): Improve the window loaded detection logic. 2018-06-18 18:01:22 -05:00
hristoterezov
12dda7acb9 fix(deep-linking): GUM when the deep linking page have been displayed. 2018-06-18 18:01:22 -05:00
Saúl Ibarra Corretgé
28861c0054 [iOS] Fix incorrect call to setAudioMuted in CallKit
Audio muting does not have an authority.
2018-06-18 15:45:37 -05: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
virtuacoplenny
4ab8d98cd1 ref(large-video): permanently enable canvas based background (#3084)
* ref(large-video): permanently enable canvas based background

* squash: leave flag for disabling background
2018-06-15 16:41:37 -05:00
Дамян Минков
fc643f06e4 Creates issue templates 2018-06-15 15:37:01 -05:00
Leonard Kim
c89791069b fix(large-video): do not reselect video on self dominant speaker
In the current middleware logic, when the local participant becomes
dominant speaker, a new participant can be selected to receive
high quality video from. This means large-video could potentially
do a switch to another participant when the local participant
becomes dominant speaker. Prevent such behavior.
2018-06-15 15:31:23 -05:00
virtuacoplenny
e06ad6cea9 chore(deps): update lib to get bridge migration fix (#3141) 2018-06-15 11:22:01 -07: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
Leonard Kim
0cf585860b fix(invite): allow arbitrary strings if no dialOutAuthUrl 2018-06-15 11:24:01 -05:00
virtuacoplenny
259066e2c6 chore(deps): update lib to e7b81910 for layer suspension (#3130) 2018-06-13 10:48:43 -07:00
virtuacoplenny
fa0dacf7c8 fix(keyboard-shortcuts): change copies for some descriptions (#2965) 2018-06-13 06:49:13 -07:00
Zoltan Bettenbuk
ad4e73cc0a Merge pull request #3136 from saghul/update-eslint
feat(eslint): use new eslint-config-jitsi
2018-06-13 12:48:03 +02:00
Saúl Ibarra Corretgé
89eacd6982 feat(eslint): use new eslint-config-jitsi
It contains all the rules we use, minus the react-native specific ones, which we
are keeping here.
2018-06-13 11:27:39 +02:00
Bettenbuk Zoltan
4a9fdb8a10 Update npm version and package-lock 2018-06-13 11:23:59 +02:00
Saúl Ibarra Corretgé
602c8610bf misc: ignore jshint files
They are automatically created by precommit-hook:
362a202498/bin/install (L5-L6)
2018-06-13 11:09:55 +02:00
Lyubo Marinov
07613aa856 [RN] Make the calendar list distinct (coding style) 2018-06-12 23:24:20 -05:00
Bettenbuk Zoltan
db6f2c8868 [RN] Make the calendar list distinct 2018-06-12 23:24:20 -05:00
Saúl Ibarra Corretgé
c7fc26d864 [iOS] Fix crash on startup when fetching calendar entries
Turns out sometimes a calendar is missing the tile and it crashes because nil is
inserted into a NSDictionary. Fix it by applying this pending PR:
https://github.com/wmcmahan/react-native-calendar-events/pull/164
2018-06-12 20:38:50 -05:00
hristoterezov
a5f2cb8bd9 fix(google-auth): popup. 2018-06-12 19:14:05 -05:00
Leonard Kim
78866b0dd7 fix(toolbar): ensure centered toolbar
Maybe there is a case that can be triggered somehow where
the toolbar becomes off center.
2018-06-12 13:07:24 -05:00
Дамян Минков
31011b24c2 Syncs with latest lib-jitsi-meet (d0cb2b2). (#3125) 2018-06-12 09:27:03 -07:00
bbaldino
8df54d2cb3 document layer suspension config and add to whitelist (#3123) 2018-06-12 09:06:10 -07:00
Vangelis Zacharioudakis
0f9c7d8697 Add Greek to languages (#3111) 2018-06-12 08:19:12 -07:00
virtuacoplenny
9d62ecb742 fix(recording): change pending file recording text (#3124) 2018-06-11 14:23:20 -07:00
Saúl Ibarra Corretgé
bda1d7fdab [RN] Update react-native-locale-detector dependency
Fixes the issue / warning about non-UI thread initialization.
2018-06-09 12:05:27 +02:00
Saúl Ibarra Corretgé
d35a1d60a0 [RN] Update react-native-fetch-blob dependency
Maintainership changed, and in addition, they fixed the issue / warning about
non-UI thread initialization.
2018-06-09 12:05:24 +02:00
Saúl Ibarra Corretgé
90d2340609 [iOS] Fix React Native warnings
Fixes the following warning:

~~~
Module XXX requires main queue setup since it overrides `constantsToExport` but doesn't implement `requiresMainQueueSetup`. In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.
~~~

For AppInfo and AuioMode, there is no need to initialize anything in the UI
thread, so just return NO.
2018-06-09 12:03:45 +02: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
Lyubo Marinov
546651e51f [RN] Hide conference indicators on reduced UI (coding style) 2018-06-08 12:25:02 -05:00
Bettenbuk Zoltan
79b31543c5 [RN] Hide conference indicators on reduced UI 2018-06-08 12:19:34 -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
damencho
89160e55f0 Updates react-native-callstats to 3.50.4. 2018-06-08 11:41:29 +02: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
virtuacoplenny
3e79926ad4 feat(recording): add sounds for when recording starts and stops (#3078)
* feat(recording): add sounds for when recording starts and stops

* squash: use constants, play sounds for file only

* squash: rename recordingStopped.mp3 -> recordingOff.mp3

* squash: flip var declaration for alpha order
2018-06-05 20:20:43 +02:00
Aaron van Meerten
ff0d42a95b Merge pull request #3096 from jmacelroy/master
Cleaning up call flow presence stanzas and cancel triggers.
2018-06-05 10:08:05 -05:00
Saúl Ibarra Corretgé
2c0ef822ae deps: update react-native-webrtc and lib-jitsi-meet 2018-06-05 15:40:37 +02:00
Jacob MacElroy
83720a4ed5 fix(call-flows): Maintain presence tags and call id in poltergeist presence stanza. 2018-06-05 13:09:46 +00:00
Jacob MacElroy
01899b1dfd feat(call-flows): Removing cancel hook for ringing status. 2018-06-05 13:09:46 +00:00
Daniel Ornelas
c62809d910 [iOS] Fix SDK deployment target to be able to compile with iOS 9.3
Fixes: https://github.com/jitsi/jitsi-meet/issues/3086
2018-06-05 11:35:25 +02:00
Daniel Ornelas
de725404ef [iOS] Fix issue with Invite RNModule being nil
This happend after initialization and joining a conference for the first time
in JitsiMeetView.
2018-06-05 11:21:22 +02:00
Lyubo Marinov
f30bdb3dd9 lib-jitsi-meet: Upgrade NPM dependencies/packages: react-native 0.55 (continued) 2018-06-04 16:41:34 -05: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
Saúl Ibarra Corretgé
2b7976380e [RN] Update react-native to 0.55.4
Also bump React to 16.3.2, since it's required.
2018-06-04 16:05:33 -05:00
Saúl Ibarra Corretgé
e93c9dde5d [iOS] Fix warning about RCTBatchedBridge deprecation
It's removed in RN >= 0.55. This aligns the project with the official
documentation: https://facebook.github.io/react-native/docs/integration-with-existing-apps.html#configuring-cocoapods-dependencies
2018-06-04 12:23:55 -05:00
Aaron van Meerten
9aa12f7d14 Merge pull request #3044 from jmacelroy/master
Properly propagating call id for call response handling.
2018-06-04 11:54:22 -05:00
Jacob MacElroy
e367490839 Properly propagating call id for call response handling.
Previously a new call id was generated for INVITE and CANCEL.
Now the id generated during the initial INVITE will be used for
corresponding CANCEL events. Also, adding the ability to
trigger a call cancel via the poltergeist update api.
2018-06-01 19:18:09 +00:00
Leonard Kim
91323ebfec ref(video-layout): add thumbnails on participant join action 2018-06-01 10:42:57 -07:00
Leonard Kim
60c68b624e ref(video-layout): local video does not call video layout directly on stream end 2018-06-01 10:42:57 -07:00
Leonard Kim
92414a346a ref(video-layout): remote thumbnail should not update large video directly 2018-06-01 10:42:57 -07:00
Leonard Kim
6f962be322 ref(video-layout): remove unused param in addParticipantContainer 2018-06-01 10:42:57 -07:00
Leonard Kim
1e3dc20b44 ref(video-layout): video layout controls own updating after user leave 2018-06-01 10:42:57 -07:00
Leonard Kim
ec0439cbb1 ref(video-layout): updates connection status when redux updates 2018-06-01 10:42:57 -07:00
Leonard Kim
05801711a7 ref(video-layout): get pinned ID directly from redux 2018-06-01 10:42:57 -07: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
Leonard Kim
c4b31435fb ref(video-layout): create middleware to update video layout
The goal will be to make video layout stateless and instead
get all state from 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
Aaron van Meerten
a4cfe97b38 Merge pull request #3073 from jmacelroy/new-invite-only
No longer triggering calls for the Invited status of a poltergeist.
2018-05-31 14:06:20 -05:00
Jacob MacElroy
b4983cfe04 No longer triggering calls for the Invited status of a poltergeist. 2018-05-31 18:58:47 +00:00
hristoterezov
4a680e11ac fix(analytics): Room name persistant prop. 2018-05-31 16:41:44 +02:00
hristoterezov
ce69ee60ca chore(lib-jitsi-meet): Update. 2018-05-30 16:21:07 -05:00
Jacob MacElroy
fa9a4480e6 Fixing an issue with asnyc http request handlers.
The current poltergeist http api immediately returns
and does not wait for async work in the handler to finish. This
mostly occurs when a public asap key needs to be fetched due
to a cache miss. The fix implements the strategy described at
https://prosody.im/doc/developers/http.html
2018-05-30 11:41:44 -05:00
Guus der Kinderen
f604b1c82d doc: elaborate in Jitsi Meet SDK for Android readme 2018-05-30 16:51:18 +02:00
paweldomas
701552ec8f ref(mobile/wake-lock): convert middleware to a state listener
If CONFERENCE_LEFT would arrive with a delay while we're in
another conference already, then the wake lock could end up in
an incorrect state.
2018-05-30 16:29:27 +02:00
paweldomas
d26d1ff925 ref(mobile/proximity): convert middleware to a state listener 2018-05-30 16:29:27 +02:00
paweldomas
bcb955ea72 ref(full-screen/middleware): use StateListenerRegistry
Use state listener to simplify the logic and not care about the actions
since the fullscreen flag is calculated from the current conference
state.
2018-05-30 16:29:27 +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
d15753f719 [RN] Add indicator container 2018-05-30 12:13:32 +02:00
Bettenbuk Zoltan
bced38cefc feat(recording): Move RECORDER_STATE_CHANGED handling to Redux 2018-05-30 12:13:32 +02:00
Bettenbuk Zoltan
5499599720 [RN] Add RecordingLabel indicator for mobile 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
virtuacoplenny
ead62a5dde fix(livestreaming): show separate message for live streaming not enabled (#3063) 2018-05-29 18:53:52 -07:00
Zoltan Bettenbuk
455660c891 Merge pull request #3042 from saghul/android-audiofocus
[Android] Handle audio focus changes while in a conference
2018-05-29 21:29:16 +02:00
Leonard Kim
7de8b96a07 feat(filmstrip): participant on stage displays with transparent video, not hidden 2018-05-29 14:27:07 -05:00
Aaron van Meerten
ca4c7129f1 Merge pull request #3061 from jitsi/update-post-load-error-handler-params
Passes the asset that fail to load to postLoadErrorHandler.
2018-05-29 13:49:33 -05:00
damencho
ad7728a599 Passes the asset that fail to load to postLoadErrorHandler. 2018-05-29 13:41:15 -05:00
Bettenbuk Zoltan
5c7b7cd625 [RN] Add ongoing label to calendar notifications for past meetings 2018-05-29 17:16:17 +02: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
paweldomas
380909371f fix(AudioMuteButton): ensure track on unmute
If "startWithAudioMuted" option is used we need to make sure that new
local audio track will be created on unmute.
2018-05-27 15:07:23 -05:00
virtuacoplenny
d4d5ef202a ref(small-video): use css to set component visibility (#3039) 2018-05-25 13:19:51 -07:00
Bettenbuk Zoltan
c95cb0e9cf [RN] Disable filmstrip separation on Android
This zOrder change fixes the issue that the scrollable filmstrip videos
rendered in front of the local participant, however there is still an
issue that needs to be fixed later: The rendered videos should have
overflow: 'hidden' property applied so then they don't get rendered when
scrolled out of the ScrollView, that property however doesn't seem to
work for Video components.
2018-05-25 09:21:26 -05:00
Saúl Ibarra Corretgé
ab83a97fd5 [Android] Handle audio focus changes while in a conference 2018-05-25 15:33:36 +02:00
Jacob MacElroy
9e2a101089 Changing the status strings for call flows to be lowercased where possible.
This should allow us to have a consistent convention and assist
with client translation of status strings.
2018-05-24 10:49:31 -05:00
Saúl Ibarra Corretgé
c8c198b0b1 [Android] Add support for USB headset detection
The API to gather these was introduced in API level 26.
2018-05-24 16:40:11 +02:00
Daniel Ornelas
4bb6e5aefd Implement a delegate of PiPViewCoordinator to notify when user exits Picture in Picture mode 2018-05-23 17:56:16 -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
f12ba37cf3 fix(presence-status): Use lower case for call flow related statuses. 2018-05-23 15:22:01 -05:00
hristoterezov
d4d2c25499 [RN] Add rejected ringtone sound assets to build 2018-05-23 15:22:01 -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
hristoterezov
2b1c875b91 feat(presence-status): Add more statuses. 2018-05-23 15:22:01 -05:00
Дамян Минков
5b4a16cf6b Updates lib-jitsi-meet that uses strophe.js 1.2.15. (#3020) 2018-05-23 11:08:47 -07:00
Zoltan Bettenbuk
480fe53001 Merge pull request #3009 from jitsi/state-listener
[RN] Prevent multiplying remote thumbnails
2018-05-23 18:48:16 +02:00
Lyubo Marinov
2ecacf6c3e [RN] Fix a "TypeError: Cannot read property handlers of undefined" in ImageCache
With some of the preceding commits in the "multiplying remote
thumbnails" story line, I started hitting this error with 100%
reproducibility:

1. Have a remote participant prepared in conferenceA. Web will do as
well.
2. On iOS prepare to join conferenceB in Safari and use the same device
for step 3.
3. Join conferenceA on the iOS device from step 2 with audio-only. The
audio-only is so that avatars are always visible. Wait for the remote
participant prepared in step 1 to appear.
4. Switch to Safari and hit "Continue in the app" to have the app leave
conferenceA and join conferenceB.

What happens:
After the iOS device joins conferenceB in the Jitsi Meet app, the local
participant is on the large video (as expected) but the avatar of the
local participant is the default audo-generated auto-colored
placeholder. That's because this error was hit and the avatar couldn't
be "fetched".
2018-05-23 10:26:59 -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
Lyubo Marinov
6b3da4a4a4 redux 4.0.0, react-redux 5.0.7 2018-05-23 08:48:13 -05:00
Zoltan Bettenbuk
8ecd6e6ced Merge pull request #3028 from saghul/rn-improve-styles
[RN] Simplify absolute fill styles
2018-05-23 15:28:07 +02:00
Saúl Ibarra Corretgé
f7c4133fb7 [RN] Use a SafeAreaView for OverlayFrame 2018-05-23 14:30:42 +02: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
Zoltan Bettenbuk
31864b95ab Merge pull request #3005 from saghul/fix-ios-dev-debug
[iOS] Fix running in Debug mode on a device
2018-05-23 12:36:22 +02:00
Zoltan Bettenbuk
33a748b569 Merge pull request #3013 from saghul/toolbox-disabled-button
[RN] Toolbox disabled button styles
2018-05-23 12:02:49 +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
Zoltan Bettenbuk
62cc44f791 Merge pull request #3012 from saghul/overflow-menu-dismiss
[RN] Dismiss OverflowMenu after selecting an option
2018-05-22 17:57:23 +02:00
Saúl Ibarra Corretgé
b4c95bec39 [RN] Adjust button labels to reflext the actual state 2018-05-22 12:02:05 +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é
a8b1ca38dc [RN] Dismiss OverflowMenu after selecting an option 2018-05-22 11:33:03 +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
virtuacoplenny
f608ad4e5e feat(toolbar): add beta tag to live streaming button (#3007)
* feat(toolbar): add beta tag to live streaming button

* tweak colors and border radius
2018-05-21 15:16:38 -07:00
Saúl Ibarra Corretgé
0d81e677bf [iOS] Fix running in Debug mode on a device
Thsi fixed a regression in 8f75c2e279

The bundler script doesn't do anything (it literally exits right at the top)
when skipping the bundle. This is arguably wrong, because it doesn't generate
"ip.txt", the file with the bundler IP address either!

So, generate that ourselves. While ding this, also drop the need for xip.io,
which has also been removed from RN, since it gives more trouble than it solves.
2018-05-21 14:05:58 +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
Lyubo Marinov
75c7cfd9e1 Coding style: comments, formatting, sorting order 2018-05-20 19:01:59 -05:00
Saúl Ibarra Corretgé
ef7fb1a7b0 [RN] Make all delegate / listener methods run in the main / UI thread 2018-05-20 16:46:44 -05:00
Lyubo Marinov
ccbf3efa38 Coding style: comments, sorting order 2018-05-18 15:36:43 -05:00
Saúl Ibarra Corretgé
39e46bacf6 [RN] Avoid Toolbox changing size on first render
Wait until the right button size has been calculated before rendering it.
2018-05-18 15:36:43 -05:00
Leonard Kim
12d7ab9026 ref(layout): use css to make video layout containers fit window
Instead of using JS, just use CSS 100% width and height. This
also resolves a jitter that occurs on edge when a modal's
container appends to the body.
2018-05-18 15:34:40 -05:00
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
Saúl Ibarra Corretgé
8f75c2e279 [iOS] Don't bundle the React resources in Debug mode
It significantly speeds up debug builds, putting them on par with Android, where
we also don't bundle the React resources.
2018-05-18 14:36:03 +02:00
hristoterezov
add89e2488 fix(dial-in-info): Qiuck fix of JitsiMeetJS undefined error. 2018-05-17 15:07:03 -05:00
Saúl Ibarra Corretgé
284d09eae7 [RN] Add ringtone sound assets to build 2018-05-17 08:31:46 -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
Mark Madlangbayan
b037e1d736 Updated nodejs requirement 2018-05-16 09:48:47 +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é
52da5010cc [Android] Make sure we use the react-native version in node_modules
Releases are also published to jcenter, and due to how the dependency is
declared, we are picking the latest release from there, which is arguably not
what we want.
2018-05-15 13:48:34 -05:00
Saúl Ibarra Corretgé
362486cbea deps: update react-native-locale-detector
Includes a fix for compatibility with RN >= 0.47.
2018-05-15 13:48:34 -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
Lyubo Marinov
f64b511682 Fix "objc[59448]: Cannot form weak reference to instance (0x60c000039440) of class RNCallKit. It is possible that this object was over-released, or is in the process of deallocation." 2018-05-15 17:29:20 +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
Aaron van Meerten
1ba564f49c Merge pull request #2966 from jmacelroy/call-response
Adding cancel to mod_muc_call
2018-05-14 12:31:58 -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
Jacob MacElroy
f60559fb67 Adding cancel to mod_muc_call 2018-05-14 16:34:37 +00:00
hristoterezov
39ba83131b fix(ga): Change the cookieDomain parameter to 'auto'. (#2954) 2018-05-11 08:32:02 -07:00
Paweł Domas
b2ad8a95d4 fix(ios,build-ipa.sh): lib-jitsi-meet package sed escape (#2953)
It needs to be global and the old replace seems to escape only the first
occurrence.
2018-05-10 12:46:34 -07:00
Zoltan Bettenbuk
b797b0b201 Merge pull request #2946 from jitsi/fix-app-props-typeerror
[Android] Fix possible TypeError in multi-JitsiMeetView SDK consumers
2018-05-10 12:40:11 +02: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
Zoltan Bettenbuk
ab7e572162 Merge pull request #2932 from saghul/refactor-bottomsheet
[RN] Refactor SimpleBottomSheet
2018-05-09 10:59:34 +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
paweldomas
8f5ec20da8 fix(.travis.yml): xcode9.3 2018-05-08 10:38:17 -05:00
paweldomas
740817fdcf chmod +x on build-ipa.sh 2018-05-07 17:04:40 -05:00
paweldomas
8ca836c922 feat(iOS): build .ipa for PRs in Travis CI 2018-05-07 15:31:23 -05: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
Lyubo Marinov
85612b9ae1 [iOS] Namespace the public API of the feature invite 2018-05-06 22:42:32 -05:00
Daniel Ornelas
529e5e8938 [iOS] Fix nullability warnings/errors caused by the feature invite 2018-05-06 22:41:45 -05:00
hristoterezov
bcd9163284 chore(package.json): Update lib-jitsi-meet version. 2018-05-04 17:05:54 -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
Saúl Ibarra Corretgé
8656c7e760 doc: add a badge / link to the latest stable release 2018-05-04 07:49:55 -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
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
virtuacoplenny
c2e40f975e chore(deps): update lib to hide error on extension install cancel (#2911) 2018-05-03 16:56:44 -07: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
69eefc82a5 feat(iframe_api): Add invite functionality. 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
3091d9e6dd fix(feedback): remove textarea overflow hiding to allow scrolling
I'm unsure why all textareas need overflow hidden. Doing so
essentially overrides what I would expect to be standard textarea
behavior. I would rather remove the reset and fix any areas that
have issues.
2018-05-02 16:53:06 -05:00
Leonard Kim
19ce472d4d fix(large-video): enable canvas based background by default 2018-05-02 12:56:01 -05: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é
0bad2dffb4 [iOS] Dybamically enable addPeopleEnabled / dialOutEnabled
If the beginAddPeople delegate method is implemented, and they haven't been
explicitly set to NO, they willbe YES.
2018-05-02 10:56:41 -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é
cf6dd98b02 [iOS] Document invite module methods 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
virtuacoplenny
f450756337 chore(deps): update lib-jitsi-meet for getting youtube url (#2902) 2018-05-01 15:14:44 -07: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
Leonard Kim
0831c16d7e fix(large-video): apply blur to only one container 2018-05-01 17:11:16 -05:00
Leonard Kim
d94093a01e fix(hangup): remove device change listener
When closing and reopening a notebook, the browser will fire
a devicechange event. This event should not be listened to
after hangup because the current listener will call gum if
there is no current audio/video, which is the case after
hangup.

Initially this change was going to be remove all conference
listeners but then I noticed that the listener for devicechange
is set differently. It might be worthwhile future work, although
potentially unnecessary right now, to ensure all listeners
registered in conference.js are properly cleaned up on hangup.
2018-05-01 17:10:56 -05:00
zbettenbuk
1eac4c51ca [RN] Add missing key prop to Android page indicator 2018-05-01 12:57:03 -05:00
Leonard Kim
eaea0e5f49 fix(languages): remove trailing comma from json 2018-05-01 10:24:22 -05:00
smithgeek
b2971aa9be Fix name of display name change action. (#2468) 2018-05-01 17:13:18 +02:00
Tunc Kayikcioglu
f64fdb4a8f Updated available languages list (#2850) 2018-05-01 17:10:51 +02:00
damencho
31dec2cf99 Cleans libs folder before create it and deploy to it. 2018-05-01 09:15:57 -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
Дамян Минков
2ee8f1ef58 Updates postinst prosody (#2896)
* Creates conf.d in /etc/prosody if missing.

Fixes a problem installing prosody 0.10 when using prosody repositories.

* Cleanups certificates on purge.

There are various occasions where users purge packages and the new installations after that generate certificate which doesn't end up in the java trust store on the target machine.

* Generate jicofo user and component passwords if missing.

There are situations where if prosody is already installed, the order of configuring the packages is not in the correct order. In those situations jitsi-meet-prosody got configured before jicofo and the user password and the component secret are not available and we ask the user for that and later when jicofo is configured we generate new set of them. Now we will end up always generating them in jitsi-meet-prosody or jicofo and we will reuse them. See https://github.com/jitsi/jicofo/pull/283.
2018-04-30 15:19:30 -07: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
Saúl Ibarra Corretgé
d7103c1c4c feat(UI): simplify code (#2847)
Avoid branching on the same condition and remove unneeded showToolbar call on
filmstrip only mode.
2018-04-24 11:36:56 -07: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
Zoltan Bettenbuk
d82f172db8 Merge pull request #2846 from saghul/make-dev
misc: add helper make dev command
2018-04-20 14:08:42 +02:00
Saúl Ibarra Corretgé
169c47ac7f misc: add helper make dev command
Running webpack-dev-server is not enough, so add a helper which takes are of
doing the needful.
2018-04-20 11:37:28 +02: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
Shuai Li
ff9820a61b [react-native-webrtc] ios: fix build when using use_frameworks! 2018-04-19 16:32:42 -05:00
zbettenbuk
1ab107b238 [react-native-calendar-events] Null check empty cursor 2018-04-19 15:35:57 -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
Дамян Минков
172342cac3 Updates lib-jitsi-meet to 3077772. (#2845)
Fixes custom callstats script param name.
2018-04-19 09:18:19 -07:00
Zoltan Bettenbuk
f8941c846a Merge pull request #2838 from saghul/fix-statusbar-ios
[iOS] Fix statusbar color while in a conference
2018-04-19 13:21:46 +02: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
Leonard Kim
a86ca3f41c fix(toolbar): set recording icon size to prevent resizing flash
There is a slight moment when the recording icon is loading that
its container does not have width. Set the width of the container
so it doesn't collapse. Also, push it a little to the right so
it aligns better with other icons.
2018-04-18 13:57:53 -05:00
Leonard Kim
c029663b77 fix(toolbar): move chat counter and stop its pointer events
The chat counter needs to be moved out of the way of the chat
button. The counter started covering the button when all the
toolbar buttons were made smaller. Also, turning off the
counters pointer events should at least make the button
clickable if this ever happens again.
2018-04-18 13:57:45 -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
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
09482f053b ref(toolbar): remove main css for old toolbar 2018-04-17 20:22:00 +02: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
5b7b373e21 fix(keyboard-shortcuts): process Unidentified keys (#2813)
* fix(keyboard-shortcuts): process Unidentified keys

When processing keyboard events for keyboard shortcuts,
if the value of an event's "key" attribute is "Unidentified",
the event should be further processed instead of the "key"
being returned to be mapped to a registered keyboard shortcut.
This occurs on edge, where question mark has the key
"Unidentified" but has the proper keyCode of 191.

* squash: add comment
2018-04-16 16:33:26 -05:00
virtuacoplenny
8e42a7b034 fix(toolbar): make toolbar smaller (#2808) 2018-04-16 14:17:03 -07: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
6586be9a8e Fix plist file formatting 2018-04-15 23:16:44 -05: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
Daniel Ornelas
fd44721bac Clean up PiP mode for iOS 2018-04-13 16:04:51 -05: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
virtuacoplenny
2a55548b84 fix(info): hide anchor hover colors for the call url (#2807)
The call url is an anchor element so that right clicking it
can bring up the copy link option in the context menu.
Clicking on it does a no-op so the anchor was colored to
look like plain text. Hovering over it right now makes it
look like an anchor due to some atlaskit color, so supress
the coloring.
2018-04-13 10:15:29 -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
virtuacoplenny
907cb013a8 fix(hangup): ensure large video exists before getting displayed id (#2799)
On hangup while audio only, audio only is set to false on
conference leave to reset redux state on mobile. Large video will
update itself on conference leave, but large video has been cleaned
up by that time so trying to directly access the user ID on large
video will fail. Be defensive about this check, because its
callers are already defensive about its return value.
2018-04-12 14:23:03 -07:00
Leonard Kim
8828525511 chore(deps): update @atlaskit/tooltip to 9.1.1
Issues with tooltips not getting repositioned to display on
screen have been addressed.
2018-04-12 15:17:59 -05: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
Zoltan Bettenbuk
76c56339c4 Merge pull request #2794 from saghul/xcode-93
[iOS] Add new file created by Xcode 9.3
2018-04-11 12:29:43 +02:00
Saúl Ibarra Corretgé
95927c4804 [iOS] Add new file created by Xcode 9.3
Looks like it's a good idea to check it in: https://stackoverflow.com/a/49564624
2018-04-11 10:47:26 +02:00
Neil Brown
6c5482fb9d Update quick-install.md (#2657)
Add potential additional package to install, tested on fresh Debian 9 installation.
2018-04-11 10:42:27 +02: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
fe473bf426 ref(toolbar): remove old recording button logic 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
Leonard Kim
a5e4fb000f ref(toolbar): removed unused dialpad logic
The old toolbar had a dialpad button that did a no-op.
Remove the remnant of that logic.
2018-04-11 10:35:01 +02:00
paweldomas
27a1be1e1c chore: update lib-jitsi-meet to 39eea17e7e2f8ff4cc273239a6e73f2a149b96e2 2018-04-10 16:43:12 -05: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
Leonard Kim
3f99e80358 chore(deps): update Tooltip, InlineDialog, and InlineMessage 2018-04-10 16:42:46 -05:00
Leonard Kim
2ce3c2d459 ref(filmstirp): remove animate flag from resizeThumbnails
The flag is always false.
2018-04-10 16:18:45 -05:00
Leonard Kim
8363f3cfeb ref(toolbar): remove all jquery filmstrip animations
The animate flag is always being passed in as false, so
essentially the animation isn't needed, unless a setTimeout 0
behavior is for some reason required...
2018-04-10 16:18:45 -05:00
Leonard Kim
f8537dde6b fix(filmstrip): set SmallVideo styles instead of using animate
jquery animate during animations sets an element's overflow to
hidden and then back to the overflow declared before the start
of the animation. If multiple animations are fired, then the
overflow could be set to hidden permanently. No calls
to Filmstrip#resizeThumbnails have animate set to true, so the
animate call is not even needed.
2018-04-10 16:18:45 -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
Дамян Минков
60fde5efb8 deps: update node-sass to 4.8.3
Fixes #2762 #2237
2018-04-10 09:24:06 +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
Daniel Ornelas
84e5e657a0 [iOS] Fix RNFetchBlob calling UI API on a background thread
Update RNFetchBlob to use a commit that fixes issues with calling UI API
on a background thread. Note: The commit used is from a forked repo that
is not yet merged on the new source for this RN component, eventually we
should be consuming from this repo instead
https://github.com/joltup/react-native-fetch-blob
2018-04-09 16:27:06 -05: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
Jacob MacElroy
01e0dfe58a Adding a prosody module to support sip-style call flows.
When combined with mod_muc_poltergeist mod_muc_call allows
for enabling call features using a proper ext_events.lib.lua
implementation. By default when the module is configured only
stub implementations are used for ext_events.lib.lua as these
are unique between deployments.
2018-04-09 13:46:17 -05:00
virtuacoplenny
38c8a41634 fix(toolbar): etherpad button should say open when etherpad is hidden (#2769) 2018-04-09 11:02:21 -07:00
Guus der Kinderen
b2efcadeb8 deps: update react-native-webrtc 2018-04-09 12:08:57 +02: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
Leonard Kim
0cd32c8155 fix(filmstrip-only): override Atlaskit background for transparency 2018-04-06 15:18:05 -05:00
Leonard Kim
45adf3e26a fix(toolbar): adjust sizings and colors 2018-04-06 15:17:58 -05:00
Leonard Kim
58d1b69148 chore(deps): update lib-jitsi-meet to 7ab5434a 2018-04-06 15:17:50 -05:00
Leonard Kim
1f0dc6fcd8 fix(feedback): modify user-select none declaration for edge 2018-04-06 15:17:42 -05:00
Saúl Ibarra Corretgé
95e00405b6 feat(keyboard-shortcuts): fix removing shortcuts (#2749) 2018-04-06 08:11:21 -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
f8717a7135 fix(gum): add electron string for requesting gum permissions
Electron generally can bypass having to get permission for
audio and video. In the case it doesn't have it, and the
permission screen is displayed, a string should still display
prompting the user to click allow. Right now the string id
displays.
2018-04-02 16:13:57 -05:00
Leonard Kim
1b85442dba chore(deps): update lib-jitsi-meet to 6282e7a8
This update is explicitly for FF screenshare and
gum retry fixes.
2018-04-02 16:13:35 -05:00
George Politis
ea46cbc479 feat: enableTcc, enableRemb, minParticipants. 2018-04-02 15:37:53 -05: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
e7223c49ef fix(feedback): let star label color be inherited from atlaskit 2018-03-30 14:23:01 -05:00
Leonard Kim
02a31746fb fix(toolbar): do not use toggle class for recording 2018-03-30 13:07:38 -05:00
Leonard Kim
40154b1feb fix(toolbar): tweak chat backgrounds to be darker 2018-03-29 13:38:42 -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
virtuacoplenny
b353b8fffb chore(deps): update lib-jitsi-meet to ef0e14b (#2679) 2018-03-29 13:42:42 +02: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
Boris Grozev
8492aad7d6 npm: Updates lib-jitsi-meet to cab2fabd56e9591148997c78a82da433ecf28dec. 2018-03-28 16:08:54 -05: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
Leonard Kim
b4eae56eed fix(toolbar): css hacks to raise notifications 2018-03-28 13:52:04 -05:00
Saúl Ibarra Corretgé
eb69fb69cb feat(conference): lower the redirect timeout after feedback submission (#2673) 2018-03-28 07:35:26 -07:00
virtuacoplenny
2b7cdbc6a8 ref(toolbar): use new toolbar by default (#2666) 2018-03-27 19:39:42 -05:00
jitsi-pootle
f3a90f048a New files added from translate.jitsi.org based on templates 2018-03-27 23:38:51 +00:00
virtuacoplenny
8bf69d30b7 fix(toolbar): make darker for better text contrast (#2667)
* fix(toolbar): make darker for better text contrast

* squash: borrow some atlaskit colors
2018-03-27 15:30:04 -07: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
Shuai Li
962df14382 [iOS] Fix launching the app after the introduction of Swift in sdk 2018-03-26 23:14:45 -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
Дамян Минков
6cc8800016 Update poltergeist's presence with identity information. (#2650) 2018-03-23 13:58:05 -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
fd787abf85 Change deployment target of JitsiMeet iOS SDK to 10.0 2018-03-22 16:40:46 -04: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
de0a7bfcd3 Some improvements for handling completion of transitions. Fixed a wrong conferenceEnded value when user left the conversation. 2018-03-22 00:04:25 -04:00
Daniel Ornelas
5858859838 Addressing feedback from PR 2018-03-22 00:04:25 -04:00
Daniel Ornelas
8428dd95c2 Implement Exit PiP mode in PiPWindow 2018-03-21 22:00:43 -04:00
Daniel Ornelas
a26ccf195e Added initialization of JitsiMeetManager components 2018-03-21 22:00:43 -04:00
Daniel Ornelas
0a5f60c637 Refactor PiP code into its own components 2018-03-21 22:00:43 -04:00
Daniel Ornelas
f8163de765 Implement Jitsi meet presentation interface that supports custom PiP solution 2018-03-21 22:00:43 -04:00
Daniel Ornelas
181580871f Initial work for testing PiP mode 2018-03-21 22:00:43 -04:00
damencho
ea431ca90c Adds new text for Firefox screen-sharing permission denied error. 2018-03-21 18:06:17 -05:00
damencho
a902540167 Removes Firefox extension handle (removed in FF newer than latest ESR). 2018-03-21 18:06:17 -05: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
6a066c3079 squash: update package-lock again for integrity shas 2018-03-20 16:06:50 -05:00
Leonard Kim
71e368f70e squash: override atlaskit styles for dropdowns to display clearer 2018-03-20 16:06:50 -05:00
Leonard Kim
134ff71c78 feat(modals): use dark theme 2018-03-20 16:06:50 -05:00
bbaldino
fef1d8b520 add a prosody module to insert identity information (when available) … (#2627)
* add a prosody module to insert identity information (when available) into
presence

prosody will check for jitsi_meet_context_user and
jitsi_meet_context_group in the session and, if they are present, insert
them into presence (we do this in prosody so they cannot be spoofed).

* remove unused 'presence' variable

* refactor to modify presence message in place

* make object member access consistent

* make the group information optional
2018-03-20 15:27:39 -05:00
virtuacoplenny
309fcf9672 fix(filmstrip): fix local video alignment with no invite button (#2629)
Hardcoding an offset from the bottom of 32px causes issues in
horizontal filmstrip when there is no invite button, because
then the local video just displays 32px from the bottom as there
is no button to take up space above it. Instead leverage flex
alignments to align the bottom of the video to the bototm of
the filmstrip.
2018-03-20 12:28:09 -07:00
virtuacoplenny
2eafbacdd4 chore(deps): update lib-jitsi-meet to 0503ec4d for edge p2p progress (#2631) 2018-03-20 11:34:57 -07:00
virtuacoplenny
26ea667170 Merge pull request #2628 from jitsi/welcome_page_analytics
fix(analytics): Init analytics for the web welcome page.
2018-03-20 10:02:07 -07:00
jitsi-pootle
5f43e8f8c7 New files added from translate.jitsi.org based on templates 2018-03-20 15:52:21 +00:00
Shikhar Agnihotri
9ef83702cf Update CONTRIBUTING.md (#2601) 2018-03-20 09:49:35 -05:00
hristoterezov
fda2548a38 fix(analytics): Init analytics for the web welcome page. 2018-03-19 17:51:22 -05:00
Дамян Минков
eb53944a4d Adds poltergeist support for locked rooms. (#2626) 2018-03-19 16:20:44 -05:00
Saumeya Katyal
2334eb9967 doc: Add dev server steps (#2610)
* doc: Add webpack-dev-server steps
2018-03-19 10:16:01 -05:00
Emil Ivov
04bd4a9038 Merge pull request #2617 from virtuacoplenny/lenny/info-dialog-again
fix(info): update copy text to find correct var
2018-03-15 12:16:20 -05:00
virtuacoplenny
eb8f34cee8 Merge pull request #2612 from jitsi/no_protocol_in_intent_uri
feat(UnsupportedMobileBrowser): do not include protocol in the intent
2018-03-15 10:01:31 -07:00
Leonard Kim
b9379f5996 fix(info): update copy text to find correct var 2018-03-15 09:42:39 -07: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
bfb45ed0e8 fix(large-video): do not try to show background on safari with webrtc (#2606)
The animation for toggling filmstrip visibility was lagging on
Safari. Even though the background video is set to hidden, it is
still causing issues. Setting the background to display none
instead does help but might interfere with animations. So instead
do the easy thing and re-use logic used for Firefox to not show
the background video.
2018-03-13 14:37:35 -07: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
Saúl Ibarra Corretgé
ff8386e931 debian: fix setting the auth domain certificates
In 94813bc0fd (diff-6e9552c9bd8e61c8f277c21220160234)
two local variables got removed (AUTH_KEY_FILE and AUTH_CRT_FILE), which are used by the sed command
below to configure the virtualhost for auth.
2018-03-11 16:05:14 -05: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
Shuai Li
5cde674eff fix(android): webrtc progurd rule
The new libwebrtc.jar contains an extra unused class file, when proguard is enabled result in the following warning:

org.chromium.build.BuildHooksAndroidImpl: can't find superclass or interface org.chromium.build.BuildHooksAndroid
2018-03-09 12:29:49 -08:00
Lyubo Marinov
c018252eee [Android] Fix RuntimeException in RNImmersiveModule
java.lang.RuntimeException: Tried to access a JS module before the React instance was fully set up. Calls to ReactContext#getJSModule should only happen once initialize() has been called on your native module.
	at com.facebook.react.bridge.ReactContext.getJSModule(ReactContext.java:102)
	at com.rnimmersive.RNImmersiveModule.emitImmersiveStateChangeEvent(RNImmersiveModule.java:74)
	at org.jitsi.meet.sdk.JitsiMeetView.onWindowFocusChanged(JitsiMeetView.java:504)
	at android.view.View.dispatchWindowFocusChanged(View.java:10257)
	at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1193)
	at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1197)
	at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1197)
	at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1197)
	at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1197)
	at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1197)
	at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1197)
	at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3602)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loop(Looper.java:154)
	at android.app.ActivityThread.main(ActivityThread.java:6119)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
2018-03-09 13:50:07 -06:00
George Politis
c8cab1560c Merge pull request #2589 from jitsi/update-lib-jitsi-stats
Updates lib-jitsi-meet to d4b78721.
2018-03-09 12:44:53 -06:00
damencho
d218abfd97 Updates lib-jitsi-meet to d4b78721.
Implements the promised based getStats. Enables them for Safari and FF.
2018-03-09 12:03:01 -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
damencho
5dca9e08f4 Bumps uglifyjs-webpack-plugin and its dependencies.
Solves a GitHub warning in lib-jitsi-meet about a vulnerability in a
uglifyjs-webpack-plugin dependency.
2018-03-08 15:12:15 -06:00
Lyubo Marinov
d3a1f7d4f7 [iOS] Fix uncaught NSInvalidArgumentException in RTCPeerConnection's createAnswer
WebRTC used to report createAnswer (and createOffer) NSError with key
"error". But now the key's called "NSLocalizedDescription".

Additionally, NSMutableDictionary doesn't accept nil.
2018-03-07 15:23:20 -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
0d3b4eedf8 fix(info): make some text selectable for manual copying 2018-03-06 13:47:55 -06:00
Leonard Kim
824a8a8864 fix(info): respect path when linking to dial in page 2018-03-06 13:47:55 -06:00
virtuacoplenny
45c1438fe6 Merge pull request #2567 from jitsi/bgrozev-patch-1
doc: Add clarifying text to the top of the readme.
2018-03-06 11:29:25 -08:00
bgrozev
8caeabf6b4 doc: Add clarifying text to the top of the readme. 2018-03-06 11:45:11 -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
hristoterezov
e05f2a9027 chore(package.json): Update lib-jitsi-meet. 2018-03-02 21:19:16 -06:00
George Politis
0d5cc8898d chore(lib-jitsi-meet): Update version. 2018-03-02 16:33:04 -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
Emil Ivov
df9d17ba18 Merge pull request #2523 from bgrozev/whitelist-ss-fps
config: Whitelists the desktopSharingFrameRate config key.
2018-02-26 13:18:20 -06: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
Leonard Kim
6fbe78eb34 fix(welcome-page): change font family and spacing 2018-02-23 11:35:02 -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
Lyubo Marinov
94473e5660 [Android] Allow accessing react-native's in-app developer menu (in the emulator) 2018-02-23 11:21:25 -06:00
virtuacoplenny
7f78050513 Merge pull request #2434 from slavakisel/external-notification-screen-sharing
Implement external API notification about screen sharing status
2018-02-22 17:39:03 -08: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
Leonard Kim
68b710a222 fix(dial-in): allow text select in numbers page 2018-02-22 17:29:03 -06:00
brian baldino
9fea5e89b3 don't show 'user has left' notification for hidden users 2018-02-22 13:41:24 -06:00
Slava Kisel
e1d849e3a0 Implement external API notification about screen sharing status 2018-02-22 10:25:03 +03: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
Leonard Kim
5d31532cbb fix(chat): return formatted body to show smileys 2018-02-12 15:34:21 -07:00
virtuacoplenny
423c8d3f53 Merge pull request #2479 from bgrozev/ga-tweaks
Ga tweaks
2018-02-12 12:35:23 -08:00
Boris Grozev
a1ba7beff9 feat: Do not include the callstats name in google analytics. 2018-02-12 14:00:15 -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
Дамян Минков
a505c01e9e Update uninstall documentation.
The package jitsi-meet-prosody was missing from the list of packages.
2018-02-09 10:28:01 +01:00
damencho
990b1eddf2 Adds strophe.js and plugin-disco as a dependency to fix build problem.
Bumps lib-jitsi-meet to latest. There was a problem that jitsi-meet build fail if anybody touches package.json (including PR testing), this happen after start using custom strophe.js from github:jitsi/strophejs.
The error:
    ERROR in ../strophejs-plugin-disco/lib/strophe.disco.js
    Module not found: Error: Can't resolve 'strophe.js' in '/Users/dminkov/dev/jitsi-meet/node_modules/strophejs-plugin-disco/lib'
     @ ../strophejs-plugin-disco/lib/strophe.disco.js 4:126-147 4:196-227
     @ ./modules/xmpp/xmpp.js
     @ ./JitsiConnection.js
     @ ./JitsiMeetJS.js
     @ ./index.js

Without strophejs-plugin-disco jitsi-meet builds but on runtime loading fail with:
Error: Missing strophe-plugins (disco plugin is required)!

FIXME: We should remove this once strophe.js releases new version and we are back to the official one inside lib-jitsi-meet.
2018-02-08 23:50:45 -06:00
damencho
abbfd3de9a Adds strophe.js as a dependency to fix build problem.
Bumps lib-jitsi-meet to latest. There was a problem that jitsi-meet build fail if anybody touches package.json (including PR testing), this happen after start using custom strophe.js from github:jitsi/strophejs.
The error:
    ERROR in ../strophejs-plugin-disco/lib/strophe.disco.js
    Module not found: Error: Can't resolve 'strophe.js' in '/Users/dminkov/dev/jitsi-meet/node_modules/strophejs-plugin-disco/lib'
     @ ../strophejs-plugin-disco/lib/strophe.disco.js 4:126-147 4:196-227
     @ ./modules/xmpp/xmpp.js
     @ ./JitsiConnection.js
     @ ./JitsiMeetJS.js
     @ ./index.js

FIXME: We should remove this once strophe.js releases new version and we are back to the official one inside lib-jitsi-meet.
2018-02-08 22:48:25 -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
bgrozev
d481c6f736 chore: Updates lib-jitsi-meet to 5f8c0a662af086e7bcc19c010f1129afc9b6… (#2460)
* chore: Updates lib-jitsi-meet to 5f8c0a662af086e7bcc19c010f1129afc9b6d650

* squash: revert changes to package-lock.json except for the lib-jitsi-meet version change.
2018-02-06 21:21:39 -07: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
hristoterezov
083f6b400b chore(capabilities.json): deploy 2018-02-01 17:21:52 -06:00
Saúl Ibarra Corretgé
dd5ae49217 Merge pull request #2407 from zbettenbuk/new-welcome-screen
Add URL validation and larger distance behind the back button
2018-01-31 16:26:09 +01:00
zbettenbuk
6a9e6db3be [RN] Validate the URL in app-settings 2018-01-31 16:06:24 +01:00
virtuacoplenny
c4468cb7b8 chore(deps): update lib-jitsi-meet for connection quality logging (#2436) 2018-01-30 14:52:25 -08:00
Leonard Kim
80c4205fb8 chore(deps): update lib-jitsi-meet for ie11 browser caps fix 2018-01-29 16:16:21 -06:00
zbettenbuk
aa9efd6f69 [RN] Improve app-settings back button style 2018-01-29 10:58:46 +01:00
Piérre Reimertz
6f8f64ba48 [iOS] Fix crash if the app display name is not set
Fixes: #2377 #2267 #2158
2018-01-29 10:34:01 +01:00
Leonard Kim
1c3cef1eed fix(notifications): reduce duration of initially muted notification
The current notification for starting muted is 2 minutes, which
may seem like "forever" so reduce it to dismiss faster.
2018-01-28 18:48:56 -06: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
virtuacoplenny
4ab34589c8 Merge pull request #2431 from jitsi/recommended_browsers_link
fix(recommended-browsers): Fix link
2018-01-28 13:41:54 -08:00
hristoterezov
ed36132e94 fix(recommended-browsers): Fix link 2018-01-28 11:51:08 -06:00
virtuacoplenny
f43687944c Merge pull request #2429 from jitsi/fix_chromium
chore(lib-jitsi-meet): Update the version.
2018-01-27 11:45:46 -08:00
hristoterezov
dda0ea0ba9 chore(lib-jitsi-meet): Update the version. 2018-01-27 13:02:46 -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
Lyubo Marinov
b52e584327 "feat(TPC): append TPC ID to stream IDs" & "fix(RTC): protect from counter overflow" 2018-01-25 11:21:40 -06:00
hristoterezov
4c65262a87 fix(browser-caps): Deploy. 2018-01-25 10:44:24 -06:00
bgrozev
7ce670df0c doc: Add -f to update-ca-certificates 2018-01-25 10:42:43 -06:00
Boris Grozev
f5f341ca9e npm: Updates lib-jitsi-meet to e895c9b86f57a288f644dcc61f81771034b932da. 2018-01-24 14:15:52 -06:00
Lyubo Marinov
f29fbb6757 [iOS] WebRTC 63 with 2 backports to fix a crash 2018-01-24 13:37:54 -06:00
virtuacoplenny
e5e3c6c6c4 Merge pull request #2410 from bgrozev/set-product
feat: Sets the "product" field in the analytics handler constructor.
2018-01-23 15:25:59 -08:00
Boris Grozev
dc92fb5073 feat: Sets the "product" field in the analytics handler constructor. 2018-01-23 16:14:31 -06:00
damencho
2478176f23 Adds uiLoaded event in iframe API, fired when all resources are loaded. 2018-01-23 15:43:49 -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
Lyubo Marinov
bdf2ecfe4b [iOS] CocoaPods 1.4.0 2018-01-19 15:00:18 -06:00
Lyubo Marinov
fc36759114 [RN] WebRTC 63 2018-01-19 14:56:58 -06:00
Saúl Ibarra Corretgé
9c2849a663 [Android] Enable Java 1.8 compatibility support
It was recently introduced in WebRTC, so we we need to enable it project wide.
As for what features are supportd, see:
https://developer.android.com/studio/write/java8-support.html
2018-01-19 14:05:25 -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é
41aa704e1f [RN] Update React Native to version 0.51.0 2018-01-11 11:04:28 -06:00
Saúl Ibarra Corretgé
e00ea353e8 Merge pull request #2380 from saghul/app-settings-kbd
[RN] Use the "email" keyboard for the email field
2018-01-10 15:52:27 +01: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
Leonard Kim
64c5ae1c48 fix(close): use string concatenation for ie11 2018-01-08 16:26:54 -06:00
bgrozev
259004b8bf fix: Fixes the user ID read from JWT. (#2366) 2018-01-08 11:27:08 -06:00
ibauersachs
4fea22676b Commit from translate.jitsi.org by user ibauersachs.: 410 of 410 strings translated (0 fuzzy). 2018-01-08 16:03:42 +00:00
zbettenbuk
05a492241f Fix local participant details on web 2018-01-05 12:58:58 -06:00
virtuacoplenny
8ec4697a27 Merge pull request #2353 from jitsi/suboptimal_experience
feat(notification): Add suboptimal browser exp notification.
2018-01-04 14:36:58 -08:00
hristoterezov
a357b0cf14 feat(notification): Add suboptimal browser exp notification. 2018-01-04 15:57:17 -06:00
virtuacoplenny
9eff669b0b Merge pull request #2357 from bgrozev/analytics-update
Analytics update
2018-01-04 12:32:07 -08: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
bbaldino
871ef9ff0e change TPC logs to info by default 2018-01-04 08:14:40 -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
Дамян Минков
30b51ff384 Adds warning to manual-install doc. 2018-01-02 17:18:06 -06:00
ibauersachs
c109199e06 Commit from translate.jitsi.org by user ibauersachs.: 409 of 410 strings translated (0 fuzzy). 2017-12-29 15:21:18 +00:00
ibauersachs
0ed31f0ae8 Commit from translate.jitsi.org by user ibauersachs.: 399 of 399 strings translated (0 fuzzy). 2017-12-29 15:01:39 +00:00
jitsi-pootle
006e6cc851 New files added from translate.jitsi.org based on templates 2017-12-28 23:44:49 +00:00
Leonard Kim
0680c086df chore(deps): update lib-jitsi-meet for ie11 stringify failure 2017-12-28 14:26:35 -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
jitsi-pootle
6146c12533 New files added from translate.jitsi.org based on templates 2017-12-26 20:48:41 +00:00
damencho
eb64b74493 Commit from translate.jitsi.org by user damencho.: 399 of 399 strings translated (0 fuzzy). 2017-12-26 20:47:35 +00:00
bgrozev
1255b3349b doc: Adds a note on security (as suggested in #409). (#2322) 2017-12-26 10:49:46 -08: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
Lyubo Marinov
9591cb54a2 [iOS] 1024x1024 AppIcon required by Apple 2017-12-20 12:38:11 -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
05de599739 [iOS] Update projects to Xcode recommended settings 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
3aedce11f2 fix(filmstrip): prevent error on updating indicators for shared video
Shared video (youtube videos) do not have indicator icons about
dominant speaker and raised hand. Add a check to see if the
indicator icon container exists before trying to attach react
icons to it. The error thrown didn't seem to be causing any
UI issues though.

While this truthy check before doing ReactDOM.render seems
like it should be a general practice, I'm hesistatnt to make
the change broadly because it hasn't been a problem so far.
2017-12-19 17:14:42 -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
Saúl Ibarra Corretgé
9a3f98a4a0 Merge pull request #2256 from jitsi/wifistats
[Android] WiFi stats for mobile
2017-12-19 11:10:27 +01:00
damencho
2f3ea1b458 [Android] Add module that provides getWiFiStats 2017-12-19 11:07:11 +01:00
Leonard Kim
ceeefb33c1 fix(display-name): allow editing only if guest 2017-12-18 23:16:38 -06:00
hristoterezov
d6c3ab64fa fix(aot): Unmount AlwaysOnTop to remove listeners (#2307) 2017-12-18 14:35:56 -08:00
George Politis
eee87bc546 Merge pull request #2303 from jitsi/update-lib-ff-stats-fix
Updates to latest lib-jitsi-meet f71ff66.
2017-12-15 16:05:03 -06:00
damencho
9a42b866ba Updates to latest lib-jitsi-meet f71ff66.
Updates also to latest react-callstats 3.27.0 as lib-jitsi-meet already updated to it.
2017-12-15 15:24:58 -06:00
Saúl Ibarra Corretgé
b920140488 android: update Gradle plugin version for AS 3.0.1 2017-12-14 15:20:05 -06:00
Saúl Ibarra Corretgé
49acd6bf6a android: simplify using the Google Maven repo reference
Also remove mavenLocal since we don't need it.
2017-12-14 15:20:05 -06: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é
4a0e55b1f4 deps: update lib-jitsi-meet dependency 2017-12-13 11:11:06 -06:00
Lyubo Marinov
73cc9a68c7 Full commit hash 2017-12-13 10:15:48 -06:00
Saúl Ibarra Corretgé
e9c91d194c android: update appcompat version 2017-12-13 09:35:34 -06:00
Saúl Ibarra Corretgé
3460fe03e5 android: update target SDK version
Android Oreo (API level 26) is supported since React Native 50.
2017-12-13 09:35:34 -06:00
Saúl Ibarra Corretgé
e65566ad03 Merge pull request #2288 from saghul/rn-i18n
[RN] Build react-native-locale-detector
2017-12-13 11:35:42 +01:00
Saúl Ibarra Corretgé
57206cc36a [RN] Build react-native-locale-detector
Upstream lacked a CocoaPods podspec file, PR:
https://github.com/DylanVann/react-native-locale-detector/pull/3
2017-12-13 10:17:05 +01: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
Saúl Ibarra Corretgé
f6ace61674 doc: document required proguard rules 2017-12-12 10:48:51 -06:00
Saúl Ibarra Corretgé
63d661ad5e ios: remove needless method
We just call the parent class' method, so just get rid of it.
2017-12-12 11:57:18 +01:00
Дамян Минков
e0e2104723 Updates mobile browser page buttons. (#2281) 2017-12-11 15:45:57 -08:00
Lyubo Marinov
6f0b828512 Fix crash caused by "[Android] Handle disposed VideoTrack in WebRTCView" 2017-12-11 14:24:17 -06:00
virtuacoplenny
1984f8d0c0 fix(vertical-filmstrip): scope previous Firefox scroll fixes (#2276)
In aa93a783, remote videos not scrolling on Firefox, IE, and
Edge was worked around using CSS. The CSS selector is too vague
and also catches horizontal filmstrip. The selector should
apply to vertical filmstrip only.
2017-12-11 11:03:24 -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
hristoterezov
ee1ec42463 fix(external_api): Request feedback when using the API (#2271) 2017-12-11 09:43:52 -08:00
Saúl Ibarra Corretgé
76fb3b3c63 Merge pull request #2262 from virtuacoplenny/lenny/welcome-page-espanol
fix(welcome-page): fix alignment issues
2017-12-11 10:05:51 +01:00
damencho
b49e600267 Cleanup, removes unused obsolete files. 2017-12-07 11:14:21 -06:00
damencho
5a3f952a2f Uses prosodyctl default inputs. 2017-12-07 11:14:21 -06:00
damencho
3ac41bb0c3 Updates manual install doc with auth.domain certs instructions. 2017-12-07 11:14:21 -06:00
damencho
94813bc0fd Changes owner to prosody of newly created certificates. Fixes #2244. 2017-12-07 11:14:21 -06:00
Leonard Kim
457b4255b9 fix(welcome-page): leverage existing table display to vertical align 2017-12-06 15:55:32 -08:00
Leonard Kim
bed9bd1d5a fix(welcome-page): use inline-block for alignment 2017-12-06 15:51:21 -08:00
jitsi-pootle
0d4dcffbac New files added from translate.jitsi.org based on templates 2017-12-06 16:44:57 +00: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
Saúl Ibarra Corretgé
15bf6b9e30 deps: update React to 16.2.0 2017-12-05 14:38:57 -06:00
damencho
67ac0e8b8a Updates the unsupported mobile browser page. 2017-12-05 09:52:44 -06:00
Leonard Kim
b74b29e8a0 fix(css): load css before js
Currently all.css is loaded after app.js. This means there may
not be a guarantee that the css is loaded before the js, which
is bad because the js does dom querying for sizes on elements,
but some element sizes will be affected by js. So instead load
css upfront and let the browser block as needed or at least
give the css a head start in racing javascript to load.
2017-12-05 08:50:13 -06:00
Leonard Kim
b258a9fc5e ref(css): move aui css to jitsi-meet 2017-12-05 08:50:13 -06:00
Leonard Kim
a653816f90 fix(vertical-filmstrip): prevent shared videos from displaying under avatars
- Modify Etherpad and SharedVideo so their resizing takes into account
  the width of the filmstrip in vertical filmstrip mode.
- Modify Filmstrip's getFilmstripWidth to account for when the filmstrip
  is hidden.
- modify VideoContainer so in vertical filmstrip mode it centers the
  shared desktop stream in the middle of the available space not taken
  by filmstrip.
- Also allow clickthrough on the secondary toolbar itself while still
  allowing clicks on the toolbar's buttons. This allows clicks on
  shared videos to go through.
2017-12-05 08:45:45 -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
40df5f97d4 fix(vertical-filmstrip): no scrollbars on Firefox from single thumbnail
Something is causing firefox to show scrollbars on the remote videos
container even though there is plenty of room. I lost this battle
and just made the container taller...
2017-12-04 21:12:57 -06:00
Leonard Kim
aa93a78372 fix(vertical-filmstrip): allow overflow scrolling on firefox, edge, and ie
Using column-reverse prevents proper scrolling on browsers other than Safari
and Chrome. Additionally, Firefox has an issue where flex containers have
dimensions set to auto, preventing resize. So, add hacks to maintain Chrome
and Safari's behavior while allowing for some kind of scrolling on other
browsers.
2017-12-04 21:12:57 -06:00
Leonard Kim
6b8b929d92 ref(build): remove aui javascript from imports 2017-12-04 16:19:18 -06: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
61e653a510 Upgrade NPM dependencies/packages 2017-12-04 00:17:35 -06:00
Lyubo Marinov
ac3a74c47e Fix(Android): peerconnection removeStream is not working 2017-11-30 16:49:36 -06:00
Lyubo Marinov
bf7b723891 feat(conference): hide user media permission overlay when tracks are created 2017-11-29 22:47:24 -06:00
Saúl Ibarra Corretgé
4829b86352 feat(conference): hide user media permission overlay when tracks are created
Don't wait for the connection to be made, since in some cases, when auth is
rquired, for instance, that won't happen until the user inputs their
credentials, but the dialog would be overshadowed by the overlay.
2017-11-29 22:39:15 -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
Lyubo Marinov
d88b57d35c webpack & UglifyJS w/ cache & parallel 2017-11-29 13:41:57 -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
Дамян Минков
345fcefa7d On adding participant show the initial status text if any. (#2220)
* On adding participant show the initial status text if any.

When participant joins and there is an initial status we show it, instead of the connected notification. If initial status is missing proceed with the default user connected notification.

* Updates to latest lib-jitsi-meet (365bd886ee).

* Adds a fixme comment.

* Updates to latest lib-jitsi-meet (365bd886ee).
2017-11-27 15:05:53 -08:00
yanas
8e8edb0793 Renames Invite people button to Invite. 2017-11-27 15:21:13 -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
George Politis
83b6dc1518 Merge pull request #2208 from jitsi/cs-update
Updates to latest lib-jitsi-meet (1c743d65ee).
2017-11-22 16:58:42 -06:00
damencho
09a952c390 Updates to latest lib-jitsi-meet (1c743d65ee). 2017-11-22 16:09:12 -06:00
George Politis
d5752afd96 Merge pull request #2207 from jitsi/ljm-update-dc3397b18b3c3c41ee8d17224f9af9318b844c43
npm: Updates lib-jitsi-meet to dc3397b18b3c3c41ee8d17224f9af9318b844c43.
2017-11-22 14:39:45 -06: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
George Politis
045a922482 npm: Updates lib-jitsi-meet to dc3397b18b3c3c41ee8d17224f9af9318b844c43. 2017-11-22 10:39:43 -06:00
virtuacoplenny
03e68b0e4b feat(video-quality): hide if recorder or interfaceConfig specified it (#2166) 2017-11-22 11:18:08 +01:00
linkmauve
980aa9b39a Remove duplicated line in config.js (#2159) 2017-11-22 10:56:51 +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
28b153facf ref(remote-video): remove redundant method 2017-11-21 15:06:30 -06:00
Leonard Kim
c2f5afe9c2 fix(large-video): switch to dominant speaker with no video
On DOMINANT_SPEAKER_CHANGED events, switch to the new
dominant speaker regardless of if the speaker has video;
it's okay to show the speaker's avatar.
2017-11-21 15:06:30 -06:00
Leonard Kim
fcb3ca836f fix(large-video): return to dominant speaker without video
Always switch to the dominant speaker after unpinning
instead of conditionally checking if the current dominant
speaker has video.
2017-11-21 15:06:30 -06: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é
90e4291751 [iOS] Update Podfile.lock 2017-11-21 11:46:35 +01:00
bgrozev
8f59b6f215 npm: Updates lib-jitsi-meet. (#2199) 2017-11-20 13:46:29 -08:00
Saúl Ibarra Corretgé
81ac1bf4a5 [RN] Translate AudioRoutePickerDialog 2017-11-20 07:54:05 -06:00
Lyubo Marinov
81094ba7fd [Android] Fix NullPointerException in AudioModeModule 2017-11-19 21:58:24 -06:00
Lyubo Marinov
3acf0c7f64 [Android] Fix UnsupportedOperationException in AudioModeModule 2017-11-19 21:58:24 -06:00
Leonard Kim
917fdcaa10 ref(deps): remove jquery-ui
After looking at the jquery-ui documentation, I believe it
is being used only in one place, when toggling the smiley
menu. That toggling has been quickly replaced with a normal
jquery call.

Note: @atlassian/aui also uses jquery-ui but killing that
off will be more difficult due to its CSS being used.
2017-11-17 16:49:10 -06:00
Lyubo Marinov
3f350be805 [Android] Handle disposed VideoTrack in WebRTCView 2017-11-17 14:23:11 -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
18d677e2f5 npm update 2017-11-16 13:26:40 -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
Lyubo Marinov
713700456e [iOS] Configuration-specific AppIcons
While having configuration-specific AppIcons may be of questionable use,
I'm more interested in using the Debug version for enterprise
distribution and the Release version for AppStore distribution.
2017-11-15 16:07:36 -06:00
Leonard Kim
77f9a0641a fix(welcome-page): allow scrolling
Overflow on body was set to hidden, likely because of
various tricks used to hide elements off screen in the
SPA. Overflow hidden also has the benefit of hiding
scroll bounce when using a MacBook touchpad. The
welcome page is the exception that needs scrolling,
so style welcome page to scroll.

A couple others had made pull requests to addrses this issue
but there hasn't been follow up.
2017-11-15 15:07:04 -06:00
Leonard Kim
b37bbcc622 fix(filmstrip): allow pinning of participants without streams
Click handling was added to the local thumbnail only after
receiving video. Click handling was added to remote thumbnails
only after receiving a stream. To allow for pinning through
the filmstrip in any case, always attach the click handler
on thumbnail init.
2017-11-15 14:56:59 -06:00
Leonard Kim
3d5fbefe7e fix(display-name): disable spell check on editing local name 2017-11-15 14:56:59 -06:00
Leonard Kim
95fcc7702f fix(video-layout): contact list click behaves like thumbnail click
Checks exist when clicking a contact list to prevent the pinning
UI from updating if a remote thumbnail has not loaded video.
This was unexpected UX so instead go ahead and pin. This is
accomplished by having contact list clicks to more directly
trigger the flow of a thumbnail being clicked.
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
fc3bc21eea [RN] Reproducible (CocoaPods) builds
Now that we have package-log.json for the sake of reproducible builds,
we should lock CocoaPods as well.
2017-11-15 09:25:56 -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
bbaldino
90dcb251c3 Merge pull request #2169 from virtuacoplenny/lenny/remove-button-group-lock
chore(deps): update package-lock and package.json
2017-11-14 11:34:22 -08:00
Leonard Kim
ea2abc1102 chore(deps): upgrade lib-jitsi-meet to 41959be 2017-11-14 09:54:35 -08:00
hristoterezov
eb30ea9693 fix(alwaysontop): URLs for the additionally loaded resources. 2017-11-14 10:46:08 -06:00
Leonard Kim
aec22b8ed9 fix(shared-video): hardcode shared video name
The YouTube api removed player#getVideoData years ago.
I am completely baffled as to how the feature kept working.
The title of the video is no longer obtainable through
the player itself, so instead call the bot participant
"YouTube."
2017-11-13 19:56:41 -06:00
Leonard Kim
ac27e464f9 chore(deps): remove button-group from package-lock 2017-11-13 16:07:43 -08: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
damencho
f3798cc2b6 chore(deps): update lib-jitsi-meet to 6b12dc 2017-11-13 16:06:44 -06:00
Leonard Kim
0f9e22380d chore(deps): update lib-jitsi-meet to 50c956 2017-11-13 12:16:15 -06:00
Дамян Минков
6991eff963 Show local video if both iAmRecorder and iAmSipGateway are set. (#2157) 2017-11-10 13:40:53 -08:00
Дамян Минков
5dbabbe44a Hides call info and invite button in iAmRecorder mode. (#2154) 2017-11-10 11:43:40 -08:00
hristoterezov
3b35bbd5cf chore(Makefile): add alwaysontop.js to Makefile 2017-11-10 12:02:13 -06: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
Leonard Kim
81e36b2a26 fix(external-api): build with polyfill for IE11 2017-11-09 12:37:16 -06: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
Boris Grozev
c4239ad7f9 npm: Updates lib-jitsi-meet to 9eaf57f1571f369c7b1432b97f58f5c77bf59aa1. 2017-11-08 10:35:51 -06:00
Saúl Ibarra Corretgé
b838a2be05 Merge pull request #2140 from virtuacoplenny/lenny/ie11-analytics
fix(analytics): use string concatenation for ie11
2017-11-08 08:25:07 +01:00
Leonard Kim
c6b11ed55d fix(analytics): use string concatenation for ie11 2017-11-07 20:09:37 -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
ibauersachs
2b46c37077 Commit from translate.jitsi.org by user ibauersachs.: 105 of 399 strings translated (10 fuzzy). 2017-11-06 08:22:16 +00:00
ibauersachs
7a9aef874e Commit from translate.jitsi.org by user ibauersachs.: 361 of 399 strings translated (6 fuzzy). 2017-11-06 08:22:04 +00:00
ibauersachs
9bbb237ca8 Commit from translate.jitsi.org by user ibauersachs.: 315 of 399 strings translated (8 fuzzy). 2017-11-06 08:21:52 +00:00
ibauersachs
c3b52548af Commit from translate.jitsi.org by user ibauersachs.: 322 of 399 strings translated (9 fuzzy). 2017-11-06 08:21:40 +00:00
ibauersachs
2802b9721d Commit from translate.jitsi.org by user ibauersachs.: 361 of 399 strings translated (6 fuzzy). 2017-11-06 08:21:29 +00:00
ibauersachs
6a85563f2c Commit from translate.jitsi.org by user ibauersachs.: 361 of 399 strings translated (6 fuzzy). 2017-11-06 08:21:19 +00:00
ibauersachs
b35992077c Commit from translate.jitsi.org by user ibauersachs.: 360 of 399 strings translated (6 fuzzy). 2017-11-06 08:21:08 +00:00
ibauersachs
79b45ce1a0 Commit from translate.jitsi.org by user ibauersachs.: 177 of 399 strings translated (29 fuzzy). 2017-11-06 08:20:45 +00:00
ibauersachs
ff58237e5c Commit from translate.jitsi.org by user ibauersachs.: 398 of 399 strings translated (0 fuzzy). 2017-11-06 08:20:22 +00: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
hristoterezov
c3efa4f088 Add package-lock.json and lock lib-jitsi-meet 2017-11-02 19:17:40 -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
Дамян Минков
90070d9e9f Fixes a problem not showing remote video menu in case of all moderators. (#2130)
Removes hasRemoteVideoMenu from RemoteVideo.
In some cases where mod_muc_allowners is enabled we do not see the remote video menu. The problem was in the order of initialization of remote video component.
RemoteVideo#constructor -> Remotevideo#addaddRemoteVideoContainer -> Remotevideo#addRemoteVideoMenu  -> RemoteVideo#hasRemoteVideoMenu = true
Then in VideoLayout#showModeratorIndicator -> !remoteVideo.hasRemoteVideoMenu -> remoteVideo.addRemoteVideoMenu().
2017-11-02 12:07:31 -07: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
Saúl Ibarra Corretgé
4943eabd1b Merge pull request #2105 from jitsi/react_native_49
Update to react 16 react-native 49
2017-11-02 15:02:49 +01:00
paweldomas
cbd2bb0140 fix(JitsiMeetView): fix rotation on iOS
The root view was not adjusting it's bounds after device rotation.
2017-11-02 14:32:35 +01:00
paweldomas
3f6f5e7eb9 fix(JitsiMeetView): use setAppProperties 2017-11-02 14:32:35 +01: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
Leonard Kim
c345c0d5e8 fix(filmstrip): do not apply flex on local video for horizontal mode
Firefox flex behaves differently from chrome. In firefox, flex
is not allowing the local video and invite button to exceed
the height of the parent, causing the local video to display
shorter than expected due to the invite button. Flex doesn't
need to be applied for local video in horizontal filmstrip
mode as it's only needed in vertical filmstrip mode to
flip the position of the invite button from above the local
video to below. Honestly, this could be better off done
declaratively in the html, but that's not as straigtforward
in this jquery+react world.
2017-10-31 14:42:16 -05:00
Leonard Kim
a8cc65ab9a fix(filmstrip-only): do not re-align local video for invite button
The bottom alignment of the local video container is adjusted
in horizontal filmstrip mode so that the videos remain evenly
aligned at the top but the invite button sticks out. With
the invite button hidden in filmstrip only, this only caused
misalignment. Re-adjust the local video container back down
and put transitions on the filmstrip wrapper itself, instead
of on the thumbnail wrapper level to avoid transitions
when re-adjusting.
2017-10-31 14:42:16 -05:00
Leonard Kim
9233a1026a fix(filmstrip-only): first and last toolbar buttons get rounded edges
All toolbar buttons (which have the class .button) got wrapped
in additional elements due to atlaskit tooltips. This changed
parent/child relationships within the html hierarchy, and the
filmstrip only toolbar selectors needed updating.
2017-10-31 14:42:16 -05:00
Lyubo Marinov
0550858653 [Android] Maven artifact publishing documentation 2017-10-30 16:04:37 -05:00
Lyubo Marinov
34f7e39148 Coding style: consistency
It seems to me that npm 5 starting adding github: as the protocol of
dependencies in package.json which are from GitHub. I personally don't
know which npm version supports these and whether we care about such a
support. Anyway, having some use github: and most not is not consistent.
2017-10-30 13:56:28 -05:00
hristoterezov
bade2ae719 chore(babel): Use babel-preset-env instead of babel-preset-es2015. 2017-10-30 13:41:05 -05:00
damencho
fda52f7160 Moves login state of dialog to be first, to be the initial state.
By default impromptu uses the first state as the default one to show.
2017-10-30 13:01:06 -05:00
Saúl Ibarra Corretgé
561d1909ca Revert "misc: remove duplicated declarations"
This reverts commit 7e831117b6.
2017-10-30 16:24:11 +01:00
Saúl Ibarra Corretgé
4845f80dc8 misc: fix order in package.json 2017-10-30 14:35:29 +01:00
Saúl Ibarra Corretgé
7e831117b6 misc: remove duplicated declarations 2017-10-30 14:07:05 +01:00
Saúl Ibarra Corretgé
b4b2d6f630 [iOS] Remove unneeded imports 2017-10-30 14:06:20 +01:00
hristoterezov
178235513b fix(DesktopPicker): Issues with selection (#2113) 2017-10-27 10:25:28 -07:00
damencho
98111c3593 On token verification failure return error, reason and stop processing.
This was broken with commit c1fb1a7def, which splits the result in order to print the error reason and in case of error was not returning the error and the message to prosody internals.
2017-10-26 14:01:21 -05:00
Saúl Ibarra Corretgé
5308f78c9a [Android] Fix Android Studio 3.0 (final) 2017-10-26 10:04:52 +02:00
bbaldino
e2b812a7bc use central jitsi eslint config (#2108) 2017-10-25 16:02:14 -07:00
Saúl Ibarra Corretgé
a14cc60e30 [Android] Specify build tools version
Android Studio won't build the app otherwise. Since the gradle plugin 3.0 beta7,
the minimum supported build tools version is 26.0.2, so set it to that. Also
bump compileSdkVersion to 26 since they need to match (in the major number, that
is).

The target API is still 25. Android Oreo (26) brought some changes in overlay
permissions which I haven't figured out yet.
2017-10-25 15:16:09 -05:00
Saúl Ibarra Corretgé
84fd7825c1 [iOS] Import React headers in a consistent way 2017-10-25 14:53:45 -05:00
Saúl Ibarra Corretgé
ae0e37be34 [Android] Fix Android Studio 3.0 RC2 2017-10-25 16:17:23 +02:00
Lyubo Marinov
499ee7985b [RN] Fix redux state cleanup
The preceding commit "fix(auth.native): trigger conference left on
cancel" did not correctly clean the redux state up on CONFERENCE_LEFT.
2017-10-24 13:58:08 -05:00
paweldomas
dedd10c62a fix(auth.native): trigger conference left on cancel
Triggering the 'conference left' action when the wait for owner dialog
is dismissed will let the Call Kit implementation end the call, after
a recoverable conference failed event was emitted.

Also fixes conference state reduction when 'conference left' is emitted
by room lock or auth features where the conference has not been joined
yet.
2017-10-24 12:38:37 -05:00
Saúl Ibarra Corretgé
f1cc057bde Merge pull request #2079 from jitsi/update_strophe
ref(strophe): Remove and cleanup all strophe related code.
2017-10-24 16:21:12 +02:00
hristoterezov
a4e7f3d992 ref(strophe): Remove and cleanup all strophe related code.
Everything strophe related is now handled in lib-jitsi-meet project.
2017-10-23 16:27:30 -05:00
paweldomas
6890414bad fix(LoginDialog.web): 'states' is passed as undefined 2017-10-23 15:25:00 -05:00
Saúl Ibarra Corretgé
23550d377e feat(dark-theme): fix breakage on mobile
e09949be9f introduced the dark theme globally, but
it only applies to web, so move the logic to App.web.js
2017-10-23 09:12:31 -05:00
virtuacoplenny
205822ac31 Merge pull request #2077 from jitsi/device-changes
Fixes few changes around changing devices
2017-10-20 15:55:43 -07:00
damencho
7f7200b599 Fixes stopping desktop sharing when changing video device to use. 2017-10-20 17:25:58 -05:00
damencho
ade5290013 Fixes changing device unmutes you in a conference. 2017-10-20 17:25:44 -05:00
damencho
beffdb1e9b Fixes unplugging unused device mutes local audio and video. 2017-10-20 16:59:09 -05:00
virtuacoplenny
cd68a97b95 Merge pull request #2095 from jitsi/change-conn-hide-config
fix(config): Auto hide connection indicators by default
2017-10-20 14:19:00 -07:00
virtuacoplenny
56887eb2fa Merge pull request #2038 from jitsi/apply-dark-theme
feat(dark-theme): Applies dark theme on inline-dialogs, tooltips, flags and more
2017-10-20 13:56:43 -07:00
yanas
47d72c64c1 fix(config): Auto hide connection indicators by default 2017-10-20 15:44:20 -05:00
yanas
e09949be9f feat(dark-theme): Applies dark theme on inline-dialogs, tooltips, flags and more 2017-10-20 15:29:16 -05:00
virtuacoplenny
d3e8856896 Merge pull request #2094 from jitsi/device_selection_popup_error
Fix device selection popup
2017-10-20 13:15:31 -07:00
hristoterezov
96efa7759b fix(analytics): analytics undefined error due to circular dependency 2017-10-20 14:39:02 -05:00
virtuacoplenny
20d140a3ce Merge pull request #2090 from jitsi/desktop_picker_dialog
feat(desktop-picker): Add spinner and disable button if sources aren't initialized.
2017-10-20 12:37:30 -07:00
hristoterezov
c7b0028652 feat(desktop-picker): Add spinner and disable button if sources aren't initialized. 2017-10-20 13:52:48 -05:00
virtuacoplenny
40377634f2 Merge pull request #2091 from jitsi/remote_control_disable
fix(desktop_sharing): if remote control is disabled
2017-10-20 09:45:51 -07:00
hristoterezov
b869e53713 fix(desktop_sharing): if remote control is disabled 2017-10-20 10:51:12 -05:00
Lyubo Marinov
6f0fe06ba6 [RN] No CallKit failure on recoverable errors 2017-10-19 13:29:25 -05:00
Lyubo Marinov
4f2346aac9 [RN] CONFERENCE_FAILED with AUTHENTICATION_REQUIRED is recoverable
The feature authentication affords recovery from CONFERENCE_FAILED
caused by AUTHENTICATION_REQUIRED. (Like the feature room-lock afforded
recovery from CONFERENCE_FAILED caused by PASSWORD_REQUIRED.)
2017-10-19 13:25:44 -05:00
Lyubo Marinov
8948c837d3 Coding style 2017-10-18 13:21:46 -05:00
Lyubo Marinov
ce1a8e7567 [RN] Don't tell everyone we're called "me"
Recently/as part of the work on taking into account the user defined by
JWT, the local participant (on mobile) started telling the remote
participants that he/she had the display name "me". Obviously, that's
incorrect. Do not store the default display name in redux. While it may
be argues that redux is the place for all states, base/participants and
the name property of Participant is not meant to be that display name
because that is being sent to remote participants, the default name
needs to be internationalized, etc. So it's better to not store the
default display name at this time at all because it's not used by mobile
anyway and Web already deals with remote participants who don't share
their display names.
2017-10-18 13:15:49 -05:00
virtuacoplenny
095e4d7aa6 Merge pull request #2078 from jitsi/contactlist_displayname
fix(ContactListPanel): default display name
2017-10-18 09:12:47 -07:00
Saúl Ibarra Corretgé
bbfb7b8f21 Merge pull request #2081 from jitsi/clean_deps
chore(deps): remove unused.
2017-10-18 04:19:39 -07:00
hristoterezov
0b50578de9 style(analytics): sendEvent -> sendAnalyticsEvent 2017-10-17 19:33:32 -05:00
Lyubo Marinov
5e01abf6fb Flow, coding style 2017-10-17 17:12:39 -05:00
Lyubo Marinov
0205b9f49a Remove obsolete source code 2017-10-17 17:12:39 -05:00
Lyubo Marinov
a561d4f302 [RN] CONFERENCE_LEFT upon canceling PasswordRequiredPrompt 2017-10-17 17:12:39 -05:00
hristoterezov
c0162dcd81 chore(deps): remove unused. 2017-10-17 15:11:59 -05:00
paweldomas
8bddaeb6d7 fix(ContactListPanel): default display name 2017-10-17 14:17:27 -05:00
virtuacoplenny
9135f654ba Merge pull request #2067 from jitsi/cs-applicationName
Adds application name to the initJitsiConference options.
2017-10-17 10:42:24 -07:00
damencho
c3e42e0162 Adds application name to the initJitsiConference options. 2017-10-16 16:35:26 -05:00
damencho
654c5c44f4 Adds the displayName if available to the conference options on create. 2017-10-16 16:20:09 -05:00
Lyubo Marinov
5d313a8cd8 Coding style
A few occurrences of coding style/formatting which I noticed while
reviewing 'feat(eslint): Enable for non react files'. These are
definitely not all occurrences I could've noticed during the review
but... we're talking about files outside react/ anyway.
2017-10-16 15:37:13 -05:00
hristoterezov
969f5d67ab feat(eslint): Enable for non react files 2017-10-16 14:36:29 -05:00
damencho
b1b3807e9b Fixes display name for incoming chat messages, sender doesn't have nick. 2017-10-15 18:35:55 -05:00
Lyubo Marinov
003eb68e28 Flow, coding style 2017-10-13 14:34:09 -05:00
paweldomas
8a4e6a7ec0 feat: override email, display name and avatar on mobile
Will override email, display name and avatar URL with the values
provided in 'context.user' structure of the JWT token.

Settings will no longer be used to retrieve local display name,
email and avatar URL. Now those values will be obtained from
the /features/base/participants Redux state.

fix(jwt/middleware): use const for default name

fix: wrong default display name on web

ref(base/participants): remove getDisplayName functions

ref(jwt): do not accept unknown user fields
2017-10-13 14:31:44 -05:00
hristoterezov
0eddef4d62 feat(mute): Add analytics and console logs for audio/video mutes 2017-10-13 09:50:48 -05:00
hristoterezov
df1437f018 ref(analytics): Use analytics from features/analytics 2017-10-13 09:50:48 -05:00
hristoterezov
a3a871d4b3 fix(lib-jitsi-meet): Use the exported constants 2017-10-13 09:50:48 -05:00
hristoterezov
f050e7026d fix(media_actions): remove unused actions 2017-10-13 09:50:48 -05:00
damencho
64b11b571f Fixes error in case prosody host config is missing in conf.d folder. 2017-10-13 08:43:00 -05:00
Saúl Ibarra Corretgé
3c3b05e3ea Add ability to disable h264 (#2061)
* doc: document disableH264 option

* [RN] Override disableH264 config option

We never want it disabled on mobile.
2017-10-12 15:42:55 -07:00
Lyubo Marinov
da03b49754 Flow, coding style 2017-10-12 14:59:11 -05:00
paweldomas
122be9e0e0 ref: move 'jwt' feature to 'base' 2017-10-12 14:43:09 -05:00
Leonard Kim
887e1b6828 ref(info): be explicit when opening the dialog with a timeout
Instead of assuming the initial info dialog open should auto
close, explicitly call opening of the dialog with a flag for
auto closing. This better facilitates the auto close timeout
being set at any time.

The changes led to refactoring out state in the InfoDialogButton
in preference for always clearing the timeout instead of
first checking for interaction before clearing.
2017-10-11 15:51:58 -05:00
Leonard Kim
f539240840 fix(info): show dialog after joining the conference
Delay showing the dialog until after joining the conference
instead of as soon as possible. This resolves a few issues.
One is the dialog displaying right before the permissions
overlay is shown. Another is that logically it does not
make sense to show the invite options when unable to invite.
It also sidesteps the initial react UI bootstrapping that
can cause race conditions with toolbar re-renders causing
misalignment. Lastly, it prepares prematurely for what I
assume will be changes for when the info dialog will
actually be shown automatically.
2017-10-11 15:51:58 -05:00
Leonard Kim
323d38ac94 ref(conference): move mousemove handler to react 2017-10-11 15:51:58 -05:00
damencho
90451a640c Fixes sending logs to callstats.
When _setLoggingConfig is invoked for the first time old and new config
are equal and _initLogging is not called. Currently, there is no way to
detect when the first time we call it is. We could use APP.logCollector
but it should go away at some point in the future.
2017-10-11 15:04:22 -05:00
Saúl Ibarra Corretgé
9452f06b27 [RN] Use JWT callee name in CallKit
Fallback to the room name otherwise. This allows us to have better entries in
the phone history.
2017-10-11 13:05:18 -05:00
Lyubo Marinov
af53a5c48c [iOS] Fix iOS 9 after CallKit
Revert "[RN] Remove unnecessary source code" (commit
a3441030a3). But since the project file
needs to explicitly mention the CallKit and Intents framework, do not
use the semantic @import as that's confusing in the case.
2017-10-11 12:20:11 -05:00
Saúl Ibarra Corretgé
20a6a61b45 [iOS] Add icon for CallKit in-call UI 2017-10-11 09:15:44 -05:00
Leonard Kim
fafffb519b fix(filmstrip-only): prevent stats display 2017-10-10 12:47:19 -05:00
Saúl Ibarra Corretgé
8e59660f33 [iOS] Update Xcode project file
CocoaPods has made some updates to the bundled resource files.
2017-10-09 15:38:31 -05:00
Saúl Ibarra Corretgé
e25c38d716 Merge pull request #2045 from saghul/fix-fullscreen
[RN] Fix setting full-screen when joining a conference
2017-10-09 13:14:17 -05:00
Saúl Ibarra Corretgé
d57b0547f3 [RN] Fix setting full-screen when joining a conference
HIDE_DIALOG happens between WILL_JOIN and JOINED so get the joining conference
from the state instead of the action.
2017-10-09 11:13:01 -05:00
Lyubo Marinov
2d73e9ace4 Flow, coding style 2017-10-09 10:39:31 -05:00
Saúl Ibarra Corretgé
bb39ffe562 [RN] Fix selecting the local participant in the large view
Never show the local participant in the large view unless it's the only
participant.

This fixes 2 issues:

- selecting the local participant when the camera permission wasn't granted
- selecting the other participant when they join a 1-1 call with video muted
2017-10-09 10:39:31 -05:00
bgrozev
8b0cd310e3 Merge pull request #2042 from jitsi/prosody-config-update
Updates prosody config to have certificates for the auth. domain.
2017-10-09 10:18:02 -05:00
virtuacoplenny
5c819c7ffd Merge pull request #2043 from jitsi/fix-shared-video-popup
fix(defaultToolbarButtons): Fixes mute popup warning
2017-10-06 21:56:16 -07:00
yanas
dfe4e5e3a1 fix(defaultToolbarButtons): Fixes mute popup warning
Fixes exception when trying to unmute in the scenario, where someone else is sharing a video with you.
2017-10-06 17:13:49 -05:00
damencho
3e1cd6151d Updates prosody config to have certificates for the auth. domain.
The certificates are generated on new install or upgrade and added to the current configuration and also to the trusted certificates on the local machine.
2017-10-06 16:51:30 -05:00
Lyubo Marinov
5a5f6816c6 [RN] Leave Conference on room-lock "Password required" cancellation 2017-10-06 15:38:00 -05:00
Lyubo Marinov
2eb36c4053 Flow, coding style 2017-10-06 15:26:49 -05:00
Lyubo Marinov
d4d2cb4aad [RN] No CONFERENCE_FAILED in SDK for recoverable errors 2017-10-05 13:25:17 -05:00
Lyubo Marinov
c98e7a204c CONFERENCE_FAILED error as object 2017-10-05 13:25:17 -05:00
Lyubo Marinov
3d32c2de89 [RN] Secure entry, no automatic correction for room-lock passwords 2017-10-05 13:25:17 -05:00
Lyubo Marinov
7a7abdac2f [RN] Fix the submission of room-lock Dialogs 2017-10-05 13:25:17 -05:00
Lyubo Marinov
f53c79ab24 Flow, coding style 2017-10-05 13:25:17 -05:00
Leonard Kim
4c00d39bf2 fix(info): use openDialog to open AddPeopleDialog
openAddPeopleDialog() got removed so instead call openDialog
with the AddPeopleDialog.
2017-10-04 09:58:02 -05:00
Lyubo Marinov
cb514b90e9 Update NPM dependencies/packages 2017-10-03 20:45:43 -05:00
Lyubo Marinov
e0b73fdd1c [Android] Fix Android Studio 3.0 Beta 7 2017-10-03 20:45:43 -05:00
Lyubo Marinov
c2ca345dec [RN] Fix TypeError that getDefaultButtons is not a function 2017-10-03 17:26:13 -05:00
Lyubo Marinov
1834fc63d2 Fix incorrect React Component state assignment 2017-10-03 14:43:05 -05:00
Lyubo Marinov
5561a9c031 Partially prepare for eslint-plugin-flowtype 2.37.0 2017-10-03 14:41:54 -05:00
Lyubo Marinov
8f97da3265 flow-typed 2017-10-03 14:25:39 -05:00
bbaldino
1ef3e4b7dc Merge pull request #2024 from virtuacoplenny/lenny/no-resolution
ref(stats): do not modify stats object from lib
2017-10-03 10:50:39 -07:00
yanas
86fcfcc535 WiP(invite-ui): Initial move of invite UI to invite button (#1950)
* WiP(invite-ui): Initial move of invite UI to invite button

* Adjusts styling to fit both horizontal and vertical filmstrip

* Removes comment and functions not needed

* [squash] Addressing various review comments

* [squash] Move invite options to a separate config

* [squash] Adjust invite button styles until we fix the whole UI theme

* [squash] Fix the remote videos scroll

* [squash]:Do not show popup menu when 1 option is available

* [squash]: Disable the invite button in filmstrip mode

* feat(connection-indicator): implement automatic hiding on good connection (#2009)

* ref(connection-stats): use PropTypes package

* feat(connection-stats): display a summary of the connection quality

* feat(connection-indicator): show empty bars for interrupted connection

* feat(connection-indicator): change background color based on status

* feat(connection-indicator): implement automatic hiding on good connection

* fix(connection-indicator): explicitly set font size

Currently non-react code will set an icon size on ConnectionIndicator.
This doesn't work on initial call join in vertical filmstrip after
some changes to support hiding the indicator. The chosen fix is
passing in the icon size to mirror what would happe with full
filmstrip reactification.

* ref(connection-stats): rename statuses

* feat(connection-indicator): make hiding behavior configurable

The original implementation made the auto hiding of the indicator
configured in interfaceConfig.

* fix(connection-indicator): readd class expected by torture tests

* fix(connection-indicator): change connection quality display styling

Bold the connection summary in the stats popover so it stands out.
Change the summaries so there are only three--strong, nonoptimal,
poor.

* fix(connection-indicator): gray background on lost connection

* feat(icons): add new gsm bars icon

* feat(connection-indicator): use new 3-bar icon

* ref(icons): remove icon-connection and icon-connection-lost

Both have been replaced by icon-gsm-bars so they are not
being referenced anymore. Mobile looks to have connect-lost
as a separate icon in font-icons/jitsi.json.

* fix(defaultToolbarButtons): Fixes unresolved InfoDialogButton component problem

* [squash]: Makes invite button fit the container

* [squash]:Addressing invite truncate, remote menu position and comment

* [squash]:Fix z-index in horizontal mode, z-index in lonely call

* [squash]: Fix filmstripOnly property, remove important from css
2017-10-03 11:30:42 -05:00
Lyubo Marinov
dfebd692f3 eslint 4.8.0
ESLint 4.8.0 discovers a lot of error related to formatting. While I
tried to fix as many of them as possible, a portion of them actually go
against our coding style. In such a case, I've disabled the indent rule
which effectively leaves it as it was before ESLint 4.8.0.

Additionally, remove jshint because it's becoming a nuisance with its
lack of understanding of ES2015+.
2017-10-02 18:12:38 -05:00
Lyubo Marinov
d280f90676 Update NPM dependencies/packages 2017-10-02 18:12:37 -05:00
virtuacoplenny
1996ac4e02 Merge pull request #2023 from jitsi/remote_menu_analytics
feat(remote_menu): Add analytics
2017-10-02 14:41:28 -07:00
Lyubo Marinov
4bf19d73fd [RN] Fix documentation comments
* Javadoc introduced @code as a replacement of <code> and <tt> which is
  better aligned with other javadoc tags such as @link. Use it in the
  Java source code. If we switch to Kotlin, then we'll definitely use
  Markdown.

* There are more uses of @code in the JavaScript source code than <tt>
  so use @code for the sake of consistency. Eventually, I'd rather we
  switch to Markdown because it's easier on my eyes.

* Xcode is plain confused by @code and @link. The Internet says that
  Xcode supports the backquote character to denote the beginning and end
  of a string of characters which should be formatted for display as
  code but it doesn't work for me. <tt> is not rendered at all. So use
  the backquote which is rendered itself. Hopefully, if we switch to
  Markdown, then it'll be common between JavaScript and Objective-C
  source code.
2017-10-01 01:35:19 -05:00
Lyubo Marinov
b3cef401f2 [Android] Fix Android Studio 3.0 Beta 6 2017-10-01 00:18:25 -05:00
Leonard Kim
eb1a44f5ba ref(stats): do not modify stats object from lib
This is more of a principle change than a necessary one.
In lib-jitsi-meet, when a getStats call finishes, the
stats are processed and first emitted (and received by
jitsi-meet) and then processed again for sending to
remote participants. Modifying the stats in place changes
the structure of stats before the second processing,
which maybe be unexpected.
2017-09-29 18:41:49 -07:00
hristoterezov
29d1d448f2 feat(remote_menu): Add analytics 2017-09-29 16:27:53 -05:00
virtuacoplenny
cfe4564ab3 feat(info): automatically show the info dialog (#2018)
* ref(info): be able to open dialog through store

* feat(info): automatically show the info dialog

Conditions:
- Lonely call
- Has not opened the info dialog yet

* squash: change to show on start, hide later

* squash: update naming and comment
2017-09-29 15:27:23 -05:00
virtuacoplenny
802d347574 ref(contact-list): remove invite functionality (#2017)
* ref(contact-list): remove invite functionality

Removing becuase there is already a toolbar button dedicated
to opening the invite dialog. Now the contact list focuses
on showing current participants.

* squash: remove unused strings and styling

* squash: add plural to panel title
2017-09-29 13:29:44 -05:00
Lyubo Marinov
a3441030a3 [RN] Remove unnecessary source code 2017-09-29 12:43:42 -05:00
Lyubo Marinov
3b5ee2d4c6 [iOS] Add initial CallKit support 2017-09-29 12:00:13 -05:00
Saúl Ibarra Corretgé
8d11b3024e [iOS] Add initial CallKit support
This commit adds initial support for CallKit on supported platforms: iOS >= 10.

Since the call flow in Jitsi Meet is basically making outgoing calls, only
outgoing call support is currently handled via CallKit.

Features:
 - "Green bar" when in a call.
 - Native CallKit view when tapping on the call label on the lock screen.
 - Support for audio muting from the native CallKit view.
 - Support for recent calls (audio-only calls logged as Audio calls, others show
   as Video calls).
 - Call display name is room name.
 - Graceful downgrade on systems without CallKit support.

Limitations:
 - Native CallKit view cannot be shown for audio-only calls (this is a CallKit
   limitaion).
 - The video button in the CallKit view will start a new video call to the same
   room, and terminate the previous one.
 - No support for call hold.
2017-09-28 16:36:39 -05:00
Lyubo Marinov
2e2129fa44 Import PropTypes from prop-types
Prepare for React 16.
2017-09-27 16:24:53 -05:00
ibauersachs
9834e8ac7b Commit from translate.jitsi.org by user ibauersachs.: 384 of 385 strings translated (0 fuzzy). 2017-09-27 20:25:04 +00:00
Lyubo Marinov
e1222e947b [RN] Documentation, comments 2017-09-27 13:08:37 -05:00
Saúl Ibarra Corretgé
341e7e01aa [RN] Add the ability to set the default URL in the SDK 2017-09-27 11:59:00 -05:00
Lyubo Marinov
964061fa5c [RN] Make it easier to disable yellow and red boxes in Debug 2017-09-27 11:23:35 -05:00
Saúl Ibarra Corretgé
b8a629ead6 [RN] Don't hardcode app name when sharing a room 2017-09-27 11:02:43 -05:00
Lyubo Marinov
b55faab33e Coding style 2017-09-27 11:01:27 -05:00
Saúl Ibarra Corretgé
3fdffa7497 [RN] Add AppInfo module
It provides access to the app's display name and version.
2017-09-27 10:32:07 -05:00
Lyubo Marinov
d521deecc4 Coding style 2017-09-26 23:39:30 -05:00
Saúl Ibarra Corretgé
d03a815572 [RN] Add ability to start a call in audio-only mode 2017-09-26 23:39:30 -05:00
Lyubo Marinov
41c6759a23 Coding style 2017-09-26 23:39:30 -05:00
Saúl Ibarra Corretgé
f62288ae17 feat(conference): add helper function to check for audio-only muted status 2017-09-26 23:39:30 -05:00
virtuacoplenny
98aa0b6ad9 Merge pull request #2019 from jitsi/local_storage_error
fix(JitsiLocalStorage): Handle local storage error
2017-09-26 15:10:59 -07:00
hristoterezov
01031ff0a7 fix(JitsiLocalStorage): Handle local storage error 2017-09-26 16:14:07 -05:00
Leonard Kim
eae3bead87 fix(toolbar): fix proptype warning
The implementation of ToolbarButtonWithDialog expects a
constructor function for now, not the object returned
from calling a constructor function.
2017-09-26 11:56:43 -05:00
virtuacoplenny
483e2ee202 feat(connection-indicator): implement automatic hiding on good connection (#2009)
* ref(connection-stats): use PropTypes package

* feat(connection-stats): display a summary of the connection quality

* feat(connection-indicator): show empty bars for interrupted connection

* feat(connection-indicator): change background color based on status

* feat(connection-indicator): implement automatic hiding on good connection

* fix(connection-indicator): explicitly set font size

Currently non-react code will set an icon size on ConnectionIndicator.
This doesn't work on initial call join in vertical filmstrip after
some changes to support hiding the indicator. The chosen fix is
passing in the icon size to mirror what would happe with full
filmstrip reactification.

* ref(connection-stats): rename statuses

* feat(connection-indicator): make hiding behavior configurable

The original implementation made the auto hiding of the indicator
configured in interfaceConfig.

* fix(connection-indicator): readd class expected by torture tests

* fix(connection-indicator): change connection quality display styling

Bold the connection summary in the stats popover so it stands out.
Change the summaries so there are only three--strong, nonoptimal,
poor.

* fix(connection-indicator): gray background on lost connection

* feat(icons): add new gsm bars icon

* feat(connection-indicator): use new 3-bar icon

* ref(icons): remove icon-connection and icon-connection-lost

Both have been replaced by icon-gsm-bars so they are not
being referenced anymore. Mobile looks to have connect-lost
as a separate icon in font-icons/jitsi.json.
2017-09-26 11:55:09 -05:00
Lyubo Marinov
e08d240a89 [RN] Render bold text in WaitForOwnerDialog 2017-09-25 14:42:15 -05:00
Lyubo Marinov
f9f194d6fe Coding style 2017-09-25 12:46:22 -05:00
Lyubo Marinov
cfd6209a20 [Android] Work around fetch-induced app breakage 2017-09-25 12:46:22 -05:00
Lyubo Marinov
03d337612b [Android] Hardware back in Conference and Dialog 2017-09-25 12:33:35 -05:00
Leonard Kim
46b75e5178 ref(info): new component for showing meeting info 2017-09-25 08:42:00 -05:00
Lyubo Marinov
266d8f72c5 [RN] Reduce authentication actions 2017-09-25 00:23:15 -05:00
paweldomas
9ae26a087e feat(auth): add UPGRADE_ROLE_LOGIN_OK action 2017-09-25 00:09:25 -05:00
hristoterezov
66da77bcf5 fix(profile_button): unclickable 2017-09-24 21:50:30 -05:00
Lyubo Marinov
70de9a683f [RN] Prepare for LoadingIndicator in LoginDialog 2017-09-24 17:25:58 -05:00
Lyubo Marinov
4e0761a46a CONNECTION_FAILED error as object
Gradually, we exploded the error of CONNECTION_FAILED in multiple
redux state properties. The explosion makes maintenance harder because
the properties have to be updated in sync. Collect them in an object
resembling an Error instance.
2017-09-24 16:51:43 -05:00
paweldomas
f8b607e92e fix(LoginDialog.native): no 'password incorrect' initially
Do not show the 'Password is incorrect' message when the LoginDialog
opens for the first time.
2017-09-24 14:25:03 -05:00
jitsi-pootle
da3e59571e New files added from translate.jitsi.org based on templates 2017-09-24 13:42:12 +00:00
virtuacoplenny
c196f8007b Merge pull request #2008 from jitsi/videoquality_label
fix(videoquality_label): tooltip text for audio only mode
2017-09-22 16:14:44 -07:00
hristoterezov
c5436428e5 fix(videoquality_label): tooltip text for audio only mode 2017-09-22 17:18:14 -05:00
paweldomas
628dc99bfe fix(conference/reducer): clear 'authRequired' on connection will connect
It is required to clear the flag, before the connection attempt.
Otherwise the app may confuse deployments without guest access with
a one with guess access if it was visited previously and
the WaitForOwnerDialog was canceled. That's because there will be no
conference related event that clears the flag.
2017-09-22 16:47:59 -05:00
Lyubo Marinov
a12984ed6f [RN] Power to Dialog
* Implement disabling buttons (like Web had the ability).
* Use consistent colors (e.g. for the buttons) like the rest of the app
  (e.g. WelcomePage).
* Enable AbstractDialog to await a thenable from onSubmit and Dialog to
  render a LoadingIndicator in place of the OK/submit button text.
2017-09-22 15:09:15 -05:00
Lyubo Marinov
1ea62215f6 [RN] Increase contrast and consistency in LoadingIndicator use cases 2017-09-22 15:07:06 -05:00
Lyubo Marinov
6fb5c4bc29 Fix jsdocs 2017-09-22 15:01:51 -05:00
paweldomas
b5212bb6cd fix(WaitForOwnerDialog): undefined method and reg expr 2017-09-22 09:29:17 -05:00
Lyubo Marinov
ec58aa9959 [Android] Implement DefaultHardwareBackBtnHandler
* Regardless of whether the SDK client/consumer employs
  JitsiMeetActivity or JitsiMeetView, default to finishing the
  associated Activity upon invoking the back button (which is what
  Activity#onBackPressed() is documented to do).

* Do not break the public API of JitsiMeetView and, thus, Jitsi Meet SDK
  for Android.
2017-09-21 23:57:16 -05:00
paweldomas
35dab19b30 [Android] Implement DefaultHardwareBackBtnHandler
If the JS side chooses to not handle the back button press call
'super.onBackPressed()' to close the app.
2017-09-21 23:56:43 -05:00
Saúl Ibarra Corretgé
720ae18194 [RN] LoadingIndicator while joining a conference 2017-09-21 16:15:14 -05:00
Paweł Domas
e553e61f04 feat(AddPeopleDialog): invite rooms (#2001)
* feat(AddPeopleDialog): invite rooms

Distinguish between 'user' and 'videosipgw' search result items and
invite them with using different method.

* squash: fix typo in AddPeopleDialog.web.js
2017-09-21 13:24:56 -07:00
Emil Ivov
a0a4fbf566 Instructions for Let's encrypt 2017-09-21 00:36:38 -05:00
Saúl Ibarra Corretgé
ca13a9b914 [RN] LoadingIndicator on WelcomePage
It will replace the "Join" text button while appNavigate lasts.

Note about the implementation: when appNavigate completes the component
may have been unmounted and thus we cannot touch its state. In order to
avoid this problem I added a 'mounted' instance variable which gets set
and reset in componentWillMount / Unmount respectively. This is to avoid
using isMounted, which is highly discouraged.
2017-09-20 16:01:49 -05:00
Saúl Ibarra Corretgé
35da39becf [RN] NetworkActivityIndicator
The basic indicator is extracted into a LoadingIndicator component,
which then NetworkActivityIndicator displays (or not) based on network
activity.
2017-09-20 15:59:56 -05:00
Leonard Kim
21d419e517 fix(pinning): bind the callback for contact list clicking 2017-09-20 10:35:29 -07:00
Lyubo Marinov
6a1eff917c Adds os and version to react-native userAgent. 2017-09-20 10:05:07 -05:00
damencho
6d62e91ff1 Adds os and version to react-native userAgent. 2017-09-20 09:08:21 -05:00
Lyubo Marinov
241dc3b147 [RN] Support XMPP authentication 2017-09-19 23:04:45 -05:00
paweldomas
141acea194 [RN] Support XMPP authentication 2017-09-19 14:38:45 -05:00
paweldomas
80329e8ffe [RN] CONFERENCE_FAILED error message in redux
In order to support XMPP authentication, we'll need the message
accompanying the error and carried by lib-jitsi-meet's
CONFERENCE_FAILED in the redux store. We already carry the message in
the redux action and we've got the error in the redux store.
2017-09-19 14:37:09 -05:00
paweldomas
9621ba03f3 feat(overlay): Clear redux state on CONNECTION_WILL_CONNECT 2017-09-19 14:36:31 -05:00
virtuacoplenny
04a1da2cea Merge pull request #1995 from jitsi/fix-local-thumbnail
fix(Filmstrip.js): Make sure the local thumbnail is there
2017-09-19 12:24:26 -07:00
virtuacoplenny
bd24135d76 Merge pull request #1990 from jitsi/fix-chat-disabled
fix(conference.js): Add message listeners only when chat is enabled
2017-09-18 19:58:09 -07:00
yanas
0c08f96755 fix(Filmstrip.js):Make sure the local thumbnail is there before getting the height 2017-09-18 17:26:24 -05:00
yanas
984085ac54 fix(conference.js): Add message listeners only when chat is enabled 2017-09-18 16:29:03 -05:00
Lyubo Marinov
9c47a7e972 Add Dialog utilities
In order to accommodate the requirements of the work on supporting XMPP
authentication on mobile/react-native, make dealing with Dialog a
little more generic and a little easier.
2017-09-18 16:00:00 -05:00
Leonard Kim
088fe87e31 fix(dominant-speaker): update dominant speaker in redux
Without dominant speaker in redux, the wrong user will be
selected after an unpin event.
2017-09-18 15:00:00 -05:00
Leonard Kim
f3783efc48 squash: remove unused prop, update comment 2017-09-18 13:22:15 -05:00
Leonard Kim
1e84f993b4 fix(device-selection): use non-connect video preview
Filmstrip only mode displays a device selection dialog that
does not have access to the redux/connect. However, the current
VideoTrack extends from AbstractVideoTrack, which assumes a
redux connection. The fix is to move video display logic into
a separate component and have device selection use that, while
the existing VideoTrack remains connected to redux but
uses the new video display component.
2017-09-18 13:22:15 -05:00
Lyubo Marinov
03b4a32dd7 Coding style 2017-09-18 11:21:45 -05:00
paweldomas
70fc727b92 [RN] Prevent a possible TypeError 2017-09-18 09:48:53 -05:00
Lyubo Marinov
d0476991a6 [RN] Support children in Dialog 2017-09-18 02:12:27 -05:00
Lyubo Marinov
2496b3ec02 [Android] Don't require camera, autofocus
Don't require autofocus because that prevents the app from appearing in
Google Play Store for some devices.

Don't require camera for the same reason but also because camera/video
is not a mandatory feature of the app, it's merely likely very
desirable.
2017-09-14 12:16:46 -05:00
Lyubo Marinov
bf915fe886 Coding style, formatting 2017-09-14 12:14:54 -05:00
Saúl Ibarra Corretgé
46ccefdfe9 feat(external_api): set permissions for cross-origin iframe
In Chrome M63 a warning is shown, permissions won't be automatically allowed
afterwards. Reference:
https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes

Setting this early makes us future proof, while working with current versions
too: Chrome < 63 gives an error because it doesn't understand the option and
Firefox seems to ignore it, so both continue to work as before.
2017-09-13 15:38:30 -05:00
Lyubo Marinov
f86f21beb2 [Android] Fix VerifyError on Android 4
The class ReflectiveOperationException used in ExternalAPIModule was
introduced in API level 19.
2017-09-13 14:32:32 -05:00
Saúl Ibarra Corretgé
fe8f383a41 [Android] Update gradle plugin version for Android Studio 3 beta 5 2017-09-13 14:35:21 +02:00
Lyubo Marinov
72c9933e73 [RN] SDK building, installing, and publishing
Based on work authored by Shuai Li <sli@atlassian.com>, Daniel Ornelas
<dornelas@atlassian.com>, and Lyubo Marinov <lmarinov@atlassian.com>.
2017-09-11 20:12:56 -05:00
Leonard Kim
4b2795502c fix(contact-list): call getAvatarURL directly
Instead of going through the Avatar object, call the getAvatarURL
directly so that the code flows consistently use the participant
representation within redux.
2017-09-11 11:33:22 -05:00
Leonard Kim
082fe711f2 fix(contact-list): enable avatars by default 2017-09-11 11:33:22 -05:00
Saúl Ibarra Corretgé
ba49c7955a [Android] Fix gradle and plugin versions with Android Studio 3.0 Beta 4 2017-09-08 10:47:08 +02:00
Lyubo Marinov
354fa36f44 Update npm dependencies/package versions 2017-09-07 20:11:45 -05:00
Lyubo Marinov
2a75d67be9 Webpack with scope hoisting 2017-09-07 20:06:34 -05:00
Lyubo Marinov
5e6cea63fb [RN] Polyfill sessionStorage via Storage 2017-09-07 12:49:35 -05:00
Lyubo Marinov
0d3927fed1 Coding style 2017-09-07 12:49:35 -05:00
Lyubo Marinov
9049f52402 [RN] Allow share-room ToolbarButton to not be rendered 2017-09-07 12:49:35 -05:00
Lyubo Marinov
c2ae7999ef Coding style
In certain scenarios we do need to import files instead of features but
even then it is our coding style to not write the file extension.
2017-09-07 12:49:35 -05:00
Leonard Kim
5a50932174 fix(contact-list): fix typo in empty file name 2017-09-07 10:54:22 -05:00
Lyubo Marinov
53e1160a1c [webpack-dev-server] Serve more local resources/files 2017-09-07 09:34:53 -05:00
Lyubo Marinov
15ab7a292c Reduce the dependencies of the Web ExternalAPI
We broke external_api.min.js by importing react/features/util which
imported react/features/base/lib-jitsi-meet.

1. To reduce the risks of such a breakage until we add
   external_api.min.js to the torture tests, import as little as
   possible in modules/API/external/external_api.js.
2. Use the global JitsiMeetJS on Web in react/features/base/util.
2017-09-06 23:20:04 -05:00
Lyubo Marinov
fce0e4c22c [RN] Report loadConfigError with locationURL to the SDK consumers 2017-09-06 20:34:46 -05:00
Lyubo Marinov
4dc78ce458 [RN] Increase the coverage of JitsiMeetViewListener
JitsiMeetViewListener is an integral part of the public API of Jitsi
Meet SDK for Android. Utilize it in the Debug configuration of the Jitsi
Meet app for Android in order to increase (1) awareness of API breakages
and (2) API coverage.

The same goes for JitsiMeetViewDelegate in Jitsi Meet SDK and app for
iOS.
2017-09-06 16:31:15 -05:00
Lyubo Marinov
67edaac1c9 [RN] Coding style 2017-09-06 16:31:15 -05:00
Lyubo Marinov
e830b80b6b [RN] Fix documentation 2017-09-06 16:31:15 -05:00
Saúl Ibarra Corretgé
284e4e543e [RN] Detect errors when loading the configuration
The error is stored in the redux store in base/config so other components can
consult it. It is also broadcasted as a new event in the external API for the
SDK.
2017-09-06 16:31:14 -05:00
Lyubo Marinov
1d8ee9d32f [RN] Reduce maintenance
JitsiMeetViewListener currently has methods of one and the same pattern
so adding new methods i.e. events i.e. redux action types is a question
of repetition in the Java source code. Speed up the support of new
events by trying to deal with them in a generic way.

The same goes for JitsiMeetViewDelegate.
2017-09-06 15:57:00 -05:00
Lyubo Marinov
6982506acc [RN] Remove duplication 2017-09-06 14:48:53 -05:00
Lyubo Marinov
d818436645 [RN] Fix import breakage caused by Web 2017-09-06 14:39:34 -05:00
Leonard Kim
31729d7949 feat(contact-list): convert to react
- Remove references to the model ContactList.
- Replace ContactListView with an empty element for attaching
  the React Component ContactListPanel, which has the same
  features as the old ContactListView.
- Create new selector for getting non-fake participants for
  ContactListPanel's props.
- Create a ParticipantCounter component to place in the contact
  list button. Previously ContactListView updated that but now
  it's a react component hooked into the participant state.
- Remove pub/sub that was used only by ContactListView.
2017-09-06 12:11:33 -05:00
Lyubo Marinov
ed53f54628 [RN] Fix the visibility of the local video on the WelcomePage 2017-09-06 08:22:39 -05:00
Saúl Ibarra Corretgé
9833965a27 [RN] Extract a function 2017-09-05 22:49:22 -05:00
Lyubo Marinov
8cdd73b987 [RN] Reverts to own properties for Storage 2017-09-05 18:55:54 -05:00
Lyubo Marinov
a7ee632f43 [RN] LocalVideoTrackUnderlay
Implement a React Component which displays children as an overlay of
local video. The WelcomePage implemented such a component inside of it
among other WelcomePage-specific logic so I split
LocalVideoTrackUnderlay out of it. The new Component is used on the
BlankPage which may be displayed in the future not only when the
WelcomePage is disabled but also when there are long running network
requests, for example.
2017-09-05 17:45:20 -05:00
Lyubo Marinov
b304ad5808 [RN] Weaken the coupling between WelcomePage and AbstractWelcomePage 2017-09-05 16:27:12 -05:00
Lyubo Marinov
86e4876df2 Coding style 2017-09-05 15:56:59 -05:00
Saúl Ibarra Corretgé
034518a6a0 [RN] Cache configurations in localStorage
This only helps iff there is a short transient network error which prevents the
configuration from being loaded. In such case, use the cached version in
localStorage, which may not match the shard, but it's (probably!) better than
nothing.

In case there is no Internet connectivity, an error will be produced as soon as
the XMPP connection is attempted anyway.
2017-09-05 14:58:26 -05:00
Lyubo Marinov
bf523711df [RN] Prepare to polyfill sessionStorage 2017-09-05 13:56:33 -05:00
Saúl Ibarra Corretgé
bfeaf329e1 [RN] Add polyfill for localStorage
It's built on top of React Native's AsyncStorage. They have differing APIs, so
we implement a synchronous API on top of an asynchronous one. This is done by
being optimistic and hoping that operations will happen asynchronously. If one
such operation fails, the error is ignored and life goes on, since operations
are performed in the in-memory cache first.

Note to reviewers: LocalStorage.js lacks Flow annotations because indexable
class declarations are not yet supported:
https://github.com/facebook/flow/issues/1323 and yours truly couldn't find a way
to make the required syntax work without making it unnecessarily complex.
2017-09-05 10:42:42 -05:00
Saúl Ibarra Corretgé
0e234bfd82 doc: mention "npm install" is required on mobile
Specially prior to pod install.
2017-09-05 11:00:40 +02:00
Saúl Ibarra Corretgé
8fc095039e analytics: lower log severity when we fail to create a handler
It'snot the end of the world, we can move on.
2017-09-05 10:48:57 +02:00
Saúl Ibarra Corretgé
eca04de348 Simplified code 2017-09-04 11:35:09 +02:00
Saúl Ibarra Corretgé
18d1572dab [RN] Load config.js only when the room is known
This patch loads the config later than we used to, that is, only once we
know the room the user is about to join.

Due to architectural limitations in lib-jitsi-meet, it needs to be
initialized with a configuration in order to properly function. This is
unfortunate because we need to create a video track in the welcome page,
but don't know the room (hence no config) yet. In order to circumvent
this problem an empty configuration is used, which is later swapped with
the appropriate one, once loaded.

Some interesting side-effects of this change are a perceived speed
increase when the app starts or a conference is hangup. They are both
due to the fact that no config needs to be fetched from a remote server
in those cases.
2017-09-02 13:26:07 -05:00
Lyubo Marinov
45a1ae26ca [RN] Prepare to display BlankPage more
For example, while config.js and other files are being loaded before the
navigation to Conference is feasible.
2017-09-02 13:26:06 -05:00
Lyubo Marinov
6545a7a1bb Remove duplication 2017-09-01 23:55:25 -05:00
Lyubo Marinov
ec9c05e401 [RN] Load config.js with ?room=
In order to load the configuration from the shard that will actually
host the conference, it's imperative that we add the room= query
parameter:

https://meet.jit.si/config.js?room=example

This implies a departure from our current model, where the config is
discarded if the domain for the next conference is different, but kept
otherwise.
2017-09-01 23:55:25 -05:00
virtuacoplenny
bf03e73876 feat(filmstrip): show thumbnails with toolbar and on hover (#1944)
* feat(filmstrip): show thumbnails with toolbar and on hover

* squash: reduce verbosity of logic for when to display

* squash: remove check for fake participant

Before fake participant (youtube video) would make the filmstrip
always displayed. However, youtube videos already dock the
toolbar, so filmstrip will remain displayed, so the check is
redundant.

* squash: change mouse hover listener targets
2017-09-01 16:40:05 -05:00
Дамян Минков
6682543691 Moves analytics loading to react. (#1945)
* feat(analytics): move to React

The analytics handlers have been moved to JitsiMeetGlobalNS, so now they are
stored in `window.JitsiMeetJS.app.analyticsHandlers`.

The analytics handlers are re-downloaded and re-initialized on every
lib-jitsi-meet initialization, which happens every time the config is changed
(moving between deployments in the mobile app).

* Adds legacy support for old analytics location.
2017-09-01 14:14:03 -05:00
Lyubo Marinov
8d81f1d69f Update npm dependencies/package versions 2017-08-31 20:08:12 -05:00
Lyubo Marinov
8436f23e05 Comments 2017-08-31 19:31:46 -05:00
Leonard Kim
2ae354530e fix(contact-list): remove parens from member count string 2017-08-31 16:21:31 -05:00
Leonard Kim
4938d1b6de fix(contact-list): update avatar sizing
With interfaceConfig.SHOW_CONTACTLIST_AVATARS, the avatars in the
contact list are too big and will overlap each other. Constrain
the avatar sizes and make each contact a little taller to better
space each out.
2017-08-31 16:21:31 -05:00
hristoterezov
cd3dad956b fix(peopleSearch): queryTypes are defined in config.js 2017-08-31 15:04:29 -05:00
Saúl Ibarra Corretgé
328da08b3a [RN] Remove obsolete comment
We have already made the implicit decision not to pursue what the
comment describes. If we ever revisit it, it probably won't be handled
where the comment is anyway.
2017-08-31 11:50:18 -05:00
virtuacoplenny
a94e38e890 Merge pull request #1951 from jitsi/watermark-config
Make watermark size configurable
2017-08-30 13:01:37 -07:00
yanas
b9f2ab7692 Make watermark size configurable 2017-08-30 14:01:41 -05:00
Leonard Kim
05f8c69fe6 ref(toolbar): add wrapper around buttons for torture tests
The torture tests were looking for the anchor tag within each
button. However, that anchor could get blown away from a react
re-render. So instead, expose a way for the torture tests
to find the root node of the button.
2017-08-30 11:31:15 -05:00
Leonard Kim
7063f144ef feat(tooltips): add for video quality label and feedback button 2017-08-30 11:10:28 -05:00
Leonard Kim
af92ba5e86 fix(toolbar): push buttons further from top of side toolbar 2017-08-30 11:10:28 -05:00
Leonard Kim
5e4f921e1b ref(video-quality-label): do not show quality dialog 2017-08-30 11:10:28 -05:00
Leonard Kim
126f8e6d88 ref(strings): change user-facing references of "participant" to "member" 2017-08-30 11:10:28 -05:00
Lyubo Marinov
7f8e8177d0 [RN] Refactor "Keep track of ongoing network requests" and "Show a progress indicator in the BlankPage"
I'm not saying that the two commits in question were wrong or worse than
what I'm offering. Anyway, I think what I'm offering brings:

* Compliance with expectations i.e. the middleware doesn't compute the
next state from the current state, the reducer does;

* Clarity and/or simplicity i.e. there's no global variable (reqIndex),
there's no need for the term "index" (a.k.a "reqIndex") in the redux
store.

* By renaming net-interceptor to network-activity feels like it's
preparing the feature to implement a NetworkActivityIndicator React
Component which will take on more of the knowledge about the specifics
of what is the network activity redux state exactly, is it maintained by
interception or some other mechanism, and abstracts it in the feature
itself allowing outsiders to merely render a React Component.
2017-08-29 18:54:04 -05:00
Saúl Ibarra Corretgé
e33030582f [RN] Show a progress indicator in the BlankPage
It will only be shown when there are ongoing network requests.
2017-08-29 18:54:04 -05:00
Saúl Ibarra Corretgé
d669a6c73c [RN] Keep track of ongoing network requests
Works only for XHR requests, which is the only network request mobile performs
(WebRTC traffic aside). The fetch API is implemented on top of XHR, so that's
covered too.

Requests are kept in the redux store until they complete, at which point they
are removed.
2017-08-29 18:54:04 -05:00
Saúl Ibarra Corretgé
8eebfcad72 [RN] Add support for callstats on mobile
The global.performance.now polyfill is removed since it's polyfilled by
react-native-callstats.
2017-08-29 18:47:35 -05:00
virtuacoplenny
ef1b8fdb77 ref(1-on-1): move remote video visibility to a selector (#1922)
* ref(1-on-1): move remote visibility to a selector

Derive whether or not remote videos should display using a selector
to look across different states. A selector was chosen over using
memoized selectors (reselect) or subscribers as a first step
approach, avoiding additional mutations caused by a subscriber
updating the filmstrip state and avoiding additional api overhead
introduced by reselect.

* rename selector
2017-08-29 10:08:16 -05:00
Saúl Ibarra Corretgé
c0f648b1ab [RN] Remove no longer needed fetch API fallback 2017-08-29 10:30:09 +01:00
Saúl Ibarra Corretgé
531b638a8a [RN] Switch default avatars to meeples 2017-08-29 09:27:28 +01:00
Saúl Ibarra Corretgé
4e3d033ff2 deps: use latest jsSHA
callstats no longer depends on it and it doesn't break when we use the latest.
2017-08-28 18:52:51 -05:00
virtuacoplenny
77e8c75795 Merge pull request #1939 from bbaldino/edge_fixes
few tweaks to fix some exceptions in edge
2017-08-28 15:56:04 -07:00
Saúl Ibarra Corretgé
9559df1b13 Merge pull request #1940 from jitsi/fix_aot
fix(external_api): isAudioMuted and isVideoMuted
2017-08-29 00:26:21 +02:00
hristoterezov
f93c1b5748 fix(external_api): isAudioMuted and isVideoMuted 2017-08-28 16:56:27 -05:00
bbaldino
f616b0b71b few tweaks to fix some exceptions in edge 2017-08-28 21:52:52 +00:00
hristoterezov
70422f4a47 fix(alwaysontop): change the size of the toolbar 2017-08-28 14:52:31 -05:00
virtuacoplenny
735a596afe ref(recording): convert recording label to react (#1915)
* ref(recording): convert recording label to react

- Create a RecordingLabel component for displaying the current
  recording state, as reflected in the redux store. This is
  needed for 1-on-1 mode to be completely in redux.
- Update the store with the recording state so RecordingLabel
  can update itself.
- Remove previous logic for updating the non-react label, which
  includes event emitting for filmstrip visibility changes,
  as RecordingLabel is hooked into redux updates.

* ref(recording): use status and type constants from lib

* make label really dumb, move logic back to Recording
2017-08-25 11:45:30 -05:00
Saúl Ibarra Corretgé
e04129bf4d Merge pull request #1916 from virtuacoplenny/lenny/no-custom-debounce
ref(toolbar): replace custom debounce with lodash throttle
2017-08-25 15:31:16 +02:00
Leonard Kim
85f0ad2791 feat(popover): create a wrapper around InlineDialog 2017-08-24 22:00:14 -05:00
Leonard Kim
c54879d605 fix(video-quality-label): push around z-indexes for firefox 2017-08-24 22:00:14 -05:00
Leonard Kim
fdee6dc360 fix(inline-dialog): reimplement popover display on mouse move
Create empty elements within InlineDialog content that can be
used to bridge mouse movement from the InlineDialog trigger to
the InlineDialog content. The empty elements are positioned
absolute so they can break out of the InlineDialog container
and not affect popper's position calculations.
2017-08-24 22:00:14 -05:00
Saúl Ibarra Corretgé
5f55b3198c [Android] Update gradle plugin version for Android Studio 3 beta 2 2017-08-24 15:04:31 +02:00
Дамян Минков
5b6d7a3040 Skips creating duplicate poltergeists for the same user. (#1925) 2017-08-23 16:14:44 -05:00
virtuacoplenny
1ca485f1a8 Merge pull request #1924 from jitsi/status-message-clear
Skips showing empty statuses. Updates poltergeist to report connected.
2017-08-23 14:12:02 -07:00
damencho
6e37fe175d Skips showing empty statuses. Updates poltergeist to report connected. 2017-08-23 14:10:10 -05:00
Lyubo Marinov
24db52ef0f [RN] Remove denied permission alert from WelcomePage 2017-08-22 16:38:14 -05:00
Lyubo Marinov
0b8c12de0e Simplify route navigation
I see it as the first step in simplifying the route navigate of the
JavaScript app by removing BlankWelcomePage from _getRouteToRender. From
a faraway point of view, the app is at the route at which it is not in a
conference. Historically, the route was known as the Welcome page. But
mobile complicated the route by saying that actually it may not want to
see the room name input and join button.

Additionally, I renamed BlankWelcomePage to BlankPage because I don't
think of it as a WelcomePage alternative but rather as a more generic
BlankPage which may be utilized elsewhere in the future.

I plan for the next steps to:
* Merge Entryway, _interceptComponent, and _getRouteToRender in one
React Component rendered by AbstractApp so that the whole logic is in
one file;
* Get rid of RouteRegistry and routes.
2017-08-22 16:38:14 -05:00
Lyubo Marinov
cb5b93fb6e Switch to prop-types 2017-08-22 16:38:14 -05:00
Lyubo Marinov
7114614697 Remove obsolete workaround 2017-08-22 16:38:14 -05:00
Aaron van Meerten
45b8693a3e Merge pull request #1921 from jitsi/rayo_filter_subdomains_support
Adds multidomain support to rayo filter module.
2017-08-22 15:22:08 -05:00
damencho
360283aa34 Adds multidomain support to rayo filter module. 2017-08-22 15:00:40 -05:00
ibauersachs
fb556edb9d Commit from translate.jitsi.org by user ibauersachs.: 339 of 379 strings translated (1 fuzzy). 2017-08-22 19:40:36 +00:00
ibauersachs
28e5230472 Commit from translate.jitsi.org by user ibauersachs.: 117 of 379 strings translated (19 fuzzy). 2017-08-22 19:40:30 +00:00
ibauersachs
73ea42f49f Commit from translate.jitsi.org by user ibauersachs.: 297 of 379 strings translated (7 fuzzy). 2017-08-22 19:40:24 +00:00
ibauersachs
255ddbd344 Commit from translate.jitsi.org by user ibauersachs.: 307 of 379 strings translated (6 fuzzy). 2017-08-22 19:40:18 +00:00
ibauersachs
df1b2c41cf Commit from translate.jitsi.org by user ibauersachs.: 126 of 379 strings translated (15 fuzzy). 2017-08-22 19:40:11 +00:00
ibauersachs
8752cc40e2 Commit from translate.jitsi.org by user ibauersachs.: 136 of 379 strings translated (15 fuzzy). 2017-08-22 19:40:05 +00:00
ibauersachs
e42d209401 Commit from translate.jitsi.org by user ibauersachs.: 285 of 379 strings translated (7 fuzzy). 2017-08-22 19:39:59 +00:00
ibauersachs
cd31aad2fd Commit from translate.jitsi.org by user ibauersachs.: 339 of 379 strings translated (1 fuzzy). 2017-08-22 19:39:53 +00:00
ibauersachs
81d7a3147b Commit from translate.jitsi.org by user ibauersachs.: 230 of 379 strings translated (20 fuzzy). 2017-08-22 19:39:47 +00:00
ibauersachs
ac909dce4c Commit from translate.jitsi.org by user ibauersachs.: 378 of 379 strings translated (0 fuzzy). 2017-08-22 19:39:39 +00:00
ibauersachs
6a040d2e67 Commit from translate.jitsi.org by user ibauersachs.: 0 of 379 strings translated (0 fuzzy). 2017-08-22 19:39:33 +00:00
ibauersachs
3ab9765e6b Commit from translate.jitsi.org by user ibauersachs.: 137 of 379 strings translated (16 fuzzy). 2017-08-22 19:39:27 +00:00
ibauersachs
1025ce75bd Commit from translate.jitsi.org by user ibauersachs.: 348 of 379 strings translated (1 fuzzy). 2017-08-22 19:39:20 +00:00
ibauersachs
2e0faa8715 Commit from translate.jitsi.org by user ibauersachs.: 296 of 379 strings translated (7 fuzzy). 2017-08-22 19:39:14 +00:00
ibauersachs
0f6541c07b Commit from translate.jitsi.org by user ibauersachs.: 2 of 379 strings translated (1 fuzzy). 2017-08-22 19:39:07 +00:00
ibauersachs
7466a03a7d Commit from translate.jitsi.org by user ibauersachs.: 347 of 379 strings translated (1 fuzzy). 2017-08-22 19:39:00 +00:00
ibauersachs
e781f4f02d Commit from translate.jitsi.org by user ibauersachs.: 194 of 379 strings translated (24 fuzzy). 2017-08-22 19:38:52 +00:00
ibauersachs
08d9f28cc4 Commit from translate.jitsi.org by user ibauersachs.: 297 of 379 strings translated (7 fuzzy). 2017-08-22 19:38:43 +00:00
ibauersachs
a5b94e5534 Commit from translate.jitsi.org by user ibauersachs.: 378 of 379 strings translated (0 fuzzy). 2017-08-22 19:37:18 +00:00
Leonard Kim
7cea557416 ref(shared-video): move SharedVideoThumb to own file 2017-08-22 10:27:34 -05:00
Leonard Kim
52ee8fd473 ref(small-video): remove some global jquery dom querying
Create a reference to the jquery element instead of querying for
it globally. This is to better encapsulate the small video
component.
2017-08-22 10:27:34 -05:00
Leonard Kim
670d575bcb ref(remote-video): set inner html instead of creating elements
This better mimics declarative jsx.
2017-08-22 10:27:34 -05:00
Leonard Kim
16fbf90a00 ref(local-audio): remove rendering of local audio
The local audio stream is attached to an audio element that is
always muted. As such, local audio is not being rendered and
the attaching may just not be needed at all.
2017-08-22 10:27:34 -05:00
Leonard Kim
ec22329408 ref(local-video): generate html instead of hardcoding in filmstrip
This would better mimic React behavior where each component has
its own markup, instead of relying on markup existing elsewhere.
2017-08-22 10:27:34 -05:00
Saúl Ibarra Corretgé
26f0f7f89c [RN] Alert the user when they need to manually grant a permission 2017-08-22 07:28:19 -05:00
Saúl Ibarra Corretgé
9bca0e3b3d [RN] Create tracks right when they are required
When do we need tracks?

- Welcome page (only the video track)
- Conference (depends if starting with audio / video muted is requested)

When do we need to destroy the tracks?

- When we are not in a conference and there is no welcome page

In order to accommodate all the above use cases, a new component is introduced:
BlankWelcomePage. Its purpose is to take the place of the welcome page when it
is disabled. When this component is mounted local tracks are destroyed.

Analogously, a video track is created when the (real) welcome page is created,
and all the desired tracks are created then the Conference component is created.
What are desired tracks? These are the tracks we'd like to use for the
conference that is about to happen. By default both audio and video are desired.
It's possible, however, the user requested to start the call with no
video/audio, in which case it's muted in base/media and a track is not created.

The first time the app starts (with the welcome page) it will request permission
for video only, since there is no need for audio in the welcome page. Later,
when a conference is joined permission for audio will be requested when an audio
track is to be created. The audio track is not destroyed when the conference
ends. Yours truly thinks this is not needed since it's a stopped track which is
not using system resources.
2017-08-22 07:28:19 -05:00
Saúl Ibarra Corretgé
3102ea6818 [RN] Try to create local tracks when unmuting, if track is missing
This is only desired when the unmuting action took place due to a manual user
intervention or the audio-only mode being disengaged.
2017-08-22 07:28:19 -05:00
Leonard Kim
ec7c10c99b ref(toolbar): replace custom debounce with lodash throttle
The current custom debounce function sets a timeout and ensures
additional calls are not executed while the timeout is pending.
Regulating the call of a function while also ensuring it gets
called at a certain time is a throttle.
2017-08-21 17:20:52 -07:00
Leonard Kim
28b4595561 ref(tooltips): remove old tooltips 2017-08-21 15:16:09 -05:00
Leonard Kim
e3361e2f3b feat(tooltips): convert popup tooltips to InlineDialog 2017-08-21 15:16:09 -05:00
Leonard Kim
c3a4a38414 feat(toolbar): use AtlasKit tooltip 2017-08-21 15:16:09 -05:00
Leonard Kim
38e2443ab7 feat(small-video): use AtlasKit tooltip 2017-08-21 15:16:09 -05:00
Lyubo Marinov
2356238887 [Android] Reduce boilerplate/duplication 2017-08-21 13:58:13 -05:00
Saúl Ibarra Corretgé
c42f1704ff [RN] Rename createInitialLocalTracks to createLocalTracks
The name better suits its purpose, since it can be called at any time.
2017-08-21 08:15:55 -05:00
Leonard Kim
5358f022ff fix(config): override config values instead of merging
Iterate over objects and copy over primitives and arrays
instead of using _.merge, as merge will not replace a config
entry completely. For arrays in a target object, the arrays
will have its indices replaced. This means if a source array
is empty, the target array will be left alone. Similarly,
if the target array is longer than a source array, there
will be indices not touched in the target array.
2017-08-21 07:07:18 -05:00
hristoterezov
5ef914602f fix(remotecontrol): Handle screen sharing cancel 2017-08-21 10:41:24 +01:00
Lyubo Marinov
2818520c8f [RN] Make react-native-img-cache optional at bundle time 2017-08-18 14:54:25 -05:00
Lyubo Marinov
131e5af01e [RN] Fix a strange import of a feature by itself 2017-08-18 14:52:41 -05:00
Lyubo Marinov
90e7804834 Coding style 2017-08-18 14:47:15 -05:00
Lyubo Marinov
c0de88ba8c [RN] Remove unnecessary import 2017-08-18 14:45:00 -05:00
Paweł Domas
99ce46cfa8 feat(conference, toolbox, API) get rid of {audio,video}Muted' flags
* ref: video muted state

Get rid of 'videoMuted' flag in conference.js

* ref: audio muted state

Get rid of 'audioMuted' flag in conference.js

* fix(conference.js|API): early audio/video muted updates

* ref(conference.js): rename isVideoMuted

Rename isVideoMuted to isLocalVideoMuted to be consistent with
isLocalAudioMuted.

* doc|style(conference.js): comments and space after if

* ref: move 'setTrackMuted' to functions

* fix(tracks/middleware): no-lonely-if

* ref(features/toolbox): get rid of last argument

* ref(defaultToolbarButtons): rename var
2017-08-18 13:30:30 +02:00
George Politis
e0e3e873b8 Update turn.md 2017-08-18 13:21:02 +02:00
George Politis
e4f959e400 Create turn.md 2017-08-18 13:18:28 +02:00
Leonard Kim
27deb97c5c ref(filmstrip): hook filmstrip to redux for 1-on-1 mode
- Remove non-redux paths for hiding and showing remote videos.
- Hook web filmstrip to redux to know when to hide remote videos.
  This works, even though VideoLayout is handling RemoteVideo
  appending, because react is only monitoring filmstrip's declared
  JSX which does not change except for attributes (css classes).
2017-08-17 17:27:30 -05:00
Leonard Kim
20379da236 ref(css): remove unused popover.scss 2017-08-17 17:22:38 -05:00
hristoterezov
378a8d014e feat(remotecontrol): Prevent multiple remote control sessions (#1875) 2017-08-17 09:43:22 -07:00
Lyubo Marinov
31dd3da2b6 Remove obsolete file 2017-08-16 17:07:38 -05:00
Lyubo Marinov
ba61876b13 Log an error using less scary words 2017-08-16 16:38:07 -05:00
Lyubo Marinov
f54e87d975 Coding style 2017-08-16 16:36:46 -05:00
Lyubo Marinov
c1fbbc4571 Reduce duplication 2017-08-16 16:28:39 -05:00
yanas
3d397a28e6 Updates default avatar image 2017-08-16 14:42:41 -05:00
Lyubo Marinov
6003b560ae [RN] Fix opening the same URL multiple times
Deep/universal linking now utilizes loadURL (when possible). But loadURL
is imperative in the native source code while its JavaScript counterpart
i.e. React App Component prop url is declarative. So there's the
following bug: open a URL, leave the conference (by tapping the hangup
button, for example), and then opening the same URL actually leaves you
on the Welcome page (if enabled; otherwise, a black screen).

The implementation has a flow though: opening the same URL twice in a
row without an intervening leave will leave the first opening and join
the new opening. Which can be improved by not leaving and joining if the
conference is joined, joining, an not leaving. But that can be done
separately as an improvement independent of the current implementation
details.
2017-08-15 17:32:37 -05:00
Lyubo Marinov
207393d98e [RN] Coding style 2017-08-15 17:32:37 -05:00
Lyubo Marinov
571958cf26 Start the switch to prop-types
As https://facebook.github.io/react/docs/typechecking-with-proptypes.html
says, React.PropTypes have moved into the npm package prop-types since
React v15.5. I've already failed to update certain devDependencies
because they mandate the use of prop-types so I'd rather we (gradually
at least) move to prop-types rather than face a lot of work later on.
2017-08-15 17:32:37 -05:00
Lyubo Marinov
4a39a630a4 Update npm dependencies 2017-08-15 17:32:37 -05:00
virtuacoplenny
3e3577766d fix(quality-slider): prevent resizing by making p2p warning hidden (#1890)
* fix(quality-slider): prevent resizing by making p2p warning hidden

Instead of removing and appending the p2p warning, make it always
appended but toggle visibility so it always takes up space. This
should prevent resizing when the warning appears. Margin and
padding were adjusted to account for the empty space displayed
by a hidden p2p warning.

* let vertical size change
2017-08-15 15:22:32 -05:00
Leonard Kim
5e4d3de8fd fix(filmstrip): re-adjust z-indexes for tooltip display 2017-08-15 14:36:53 -05:00
virtuacoplenny
1b7973a28e ref(invite): use AtlasKit for invite modal buttons and inputs (#1868)
* ref(invite): use AtlasKit for invite modal buttons and inputs

- Convert button to AK Button.
- Convert inputs to AK FieldText.

* remove noop, replace with custom empty func
2017-08-15 14:30:57 -05:00
Leonard Kim
830ec3d097 fix(video-quality): change click handler location on label
This will prevent the quality dialog from closing when changing
desired quality level.
2017-08-14 15:13:29 -05:00
Leonard Kim
995a25ee15 fix(video-quality-label): adjust z-indexing clashes with filmstrip
With AtlasKit InlineDialog, the filmstrip z-index in vertical
filmstrip mode was adjusted as it had to be set to fixed position
for the dialogs to automagically be position fixed. This left
behind a regression where the filmstrip z-index was the same as
the video quality label, but came later in the dom, so the label
was not clickable. This commit modifies the z-index of the
vertical filmstrip to account for clicking of the video quality
label.
2017-08-14 15:12:06 -05:00
virtuacoplenny
725d39ddcd feat(jitsipopover): convert to InlineDialog (#1804)
* feat(small-video): use InlineDialog for stats and remote menu

- Remove JitsiPopover and use InlineDialog instead.
- Bring the remote menu icon into react.
- Make vertical filmstrip position:fixed so popper (AtlasKit
  dependency) sets InlineDialogs and eventually tooltips to
  position:fixed.

* ref(remote-menu): hook KickButton to redux

* ref(remote-menu): hook MuteButton to redux

* modify padding, toggle dialogs

* pixel push margins to align dialogs, adjust padding of dialogs

* add comment about margin for dialog, add file I forgot

* modify indicator markup so the icon can be moved down while trigger stays at top of toolbar
2017-08-14 10:02:58 -05:00
Aaron van Meerten
cd910e3074 docs: document the services which jitsi meet can consume
* new documentation for the services which jitsi meet can consume for conference mapping to dial-in numbers

* attempted markdown link for swagger file from documentation file
2017-08-14 16:20:20 +02:00
Saúl Ibarra Corretgé
2e3a5b1c35 [RN] Fix jsdocs 2017-08-14 12:23:46 +02:00
hristoterezov
1b0bffe251 fix(remotecontrol): Stop scroll events during the remote controll session 2017-08-14 09:13:38 +01:00
hristoterezov
1782030936 feat(alwaysontop): Toolbar. 2017-08-11 17:07:24 -07:00
hristoterezov
382b328262 fix(postmessagebackend): JS error when response is sent. 2017-08-11 17:07:24 -07:00
hristoterezov
b81dc4e59b ref(toolbar): Implement stateless toolbar 2017-08-11 17:07:24 -07:00
hristoterezov
53f675fbe0 ref(ToolbarButton): Remove unnecessary check. 2017-08-11 17:07:24 -07:00
hristoterezov
f18b42b286 fix(ToolbarButton): Don't register shortcut if APP is not defined. 2017-08-11 17:07:24 -07:00
hristoterezov
91e75bf7b9 ref(UIUtil): Move all tooltip functions into another file 2017-08-11 17:07:24 -07:00
hristoterezov
fe59084979 ref(isButtonEnable): UIUtil -> toolbox 2017-08-11 17:07:24 -07:00
hristoterezov
025f7204d5 ref(ToolbarButton): Remove dispatch 2017-08-11 17:07:24 -07:00
hristoterezov
da9e3fb63e feat(external_api): Return external resources for the always on top. 2017-08-11 17:07:24 -07:00
Leonard Kim
d7bccd0c93 ref(pinning): remove pinnedId state from VideoLayout
Instead have VideoLayout reach into redux.
2017-08-11 10:43:35 +01:00
Leonard Kim
f1f46e0af5 feat(pinning): move web pinning logic into redux
- Re-use the native redux pinning implementation for web
- Remove pinning logic from conference.js
- To the native pinning add a check for sharedVideo so
  youtube videos do not send a pin event
- Add shared videos as a participant to enable pinning and
  so they can eventually get added to the filmstrip
- Emit UIEvents.PINNED_ENDPOINT from middleware
2017-08-11 10:43:35 +01:00
Saúl Ibarra Corretgé
19d9b3f023 feat(config): reorganize and thoroughly document config.js
- Document each option.
- Group options semantically.
- Remove no longer existing options.
- Add some missing options.
- Fix punctuation here and there.

NOTE: This is a first step towards a full configuration overhaul, once it
materializes each of the "semantic sections" will be a JS object.
2017-08-10 07:44:53 -05:00
virtuacoplenny
d8cd3e75b4 feat(quality-slider): initial implementation (#1817)
* feat(quality-slider): initial implementation

- Add new menu button with an Inline Dialog slider for
  selecting received video quality.
- Place P2P status in redux store for the Inline Dialog
  to display a warning about not respecting video quality
  selection.
- Respond to data channel open events by setting receive
  video quality. This is for lonely call cases where a
  setting is set before the data channel is open.
- Remove dropdown menu from video status label and clean
  up related js and css.

* first pass at addressing feedback

- Move VideoStatusLabel to video-quality directory.
- Rename VideoStatusLabel to VideoQualityLabel.
- Open VideoQualitydialog from VideoQualityLabel.
- New CSS for making VideoQualityLabel display properly.
- Do not render VideoQualityLabel in filmstrip only instead of hiding with css.
- Remove tooltip from VideoQualityLabel.
- Show LD, SD, HD labels in VideoQualityLabel.
- Remove action SET_LARGE_VIDEO_HD_STATUS from conference.
- Create new action UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION in large-video.
- Move VideoQualityButton into video-quality directory.
- General renaming (medium -> standard, menu -> dialog).
- Render P2P message between title and slider.
- Add padding to slider for displacement caused by P2P message's new placement.
- Fix display issue with VideoQualityButton displaying out of line in the
  primary toolbar.

* second pass at addressing feedback

- Fix p2p inline message color
- Force labels to break on words
- Resolve rebase issues, including only dispatching quality
  update on change. Before there was double calling of dispatch
  produced by an IE11 workaround. This breaks now when setting
  audio only mode to true twice.
- Rename some instances of quality to definition

* rename to data channel opened

* do not show p2p in audio only

* stop toggle audio only icon automatically

* remove fixme about toolbar button

* find closest resolution for label

* toggle dialog on button click

* redo last commit for both button and label
2017-08-09 14:40:03 -05:00
damencho
c1fb1a7def Installs required basexx when token package is installed. Fixes #1870.
Adds some debug messages when token verification fails for some reason.
2017-08-08 23:13:25 +03:00
Saúl Ibarra Corretgé
ca80839094 [Android] Fix gradle and plugin versions with Android Studio 3.0 Canary 9 2017-08-08 14:48:43 -05:00
Paweł Domas
194b3ac9d3 [RN] Add local tracks before joining the conference
* ref(base/conference): add tracks before join

Sometimes it will be suboptimal to add local tracks to the conference,
after the room has been joined. It may slow down the session initiation
process by having to send unnecessary 'source-add' notifications.

* squash: fix typos/comments
2017-08-08 09:27:44 -05:00
hristoterezov
cfe7e30550 fix(SS): Add toggle parameter 2017-08-08 14:18:45 +01:00
virtuacoplenny
ff442853a2 feat(feedback): convert to react and redux (#1833)
* feat(feedback): convert to react and redux

- For styles, remove "aui-dialog2" nesting so existing styles
  can be reused.
- Remove Feedback.js and replace with calls to redux for state
  storing and accessing.
- Add dispatching to FeedbackButton instead of relying on jquery
  clicking handling so the button can be hooked into redux.

* address feedback

* remove calling to not show feedback for recorder and filmstrip
2017-08-07 11:20:44 -05:00
Lyubo Marinov
85a168d51b [RN] base/media is intent, base/tracks is reality 2017-08-04 16:07:48 -05:00
Saúl Ibarra Corretgé
d600504d85 [RN] Refactor video muting
Simplify the code by using a bitfied instead of a couple of boolean flags. This
allows us to mute the video from multiple places and only make the unmute
effective once they have all unmuted.

Alas, this cannot be applied to the web without a massive refactor, because it
uses the track muted state as the source of truth instead of the media state.
2017-08-04 16:07:48 -05:00
Leonard Kim
bd4766648a fix(filmstip-only): apply background color to toolbar 2017-08-04 13:55:42 -05:00
Saúl Ibarra Corretgé
d200abb8db [RN] Polyfill window.location.search
Currently lib-jitsi-meet looks there in case the `anonymousdomain` config option
was specified.

While this commit alone doesn't add support for authenticated deployments, it
avoids a failure if `anonymousdomain` was set, regardless of authentication being
turned on or not.

Fixes: https://github.com/jitsi/jitsi-meet/issues/1858
2017-08-04 11:35:03 -05:00
Leonard Kim
002e48b886 feat(display-name): convert prompt to react
Create a new component that uses Dialog. Reuse existing actions
for updating a participant's display name.
2017-08-04 10:21:18 -05:00
Saúl Ibarra Corretgé
1c1604bee7 [Android] Don't mute the microphone under any circumstance
It's a global action, and if we do that other applications won't be able to use
it. I experienced this with the system camera. We do, however, make sure to
enable it when we need to.

Note that enabling it doesn't mean we are *using* it. It just means we *can*,
and that we will get actual audio when we do.
2017-08-03 13:45:41 -05:00
Saúl Ibarra Corretgé
99fd325a51 [Android] Fix gradle warning
This setting is no longer used.
2017-08-03 13:45:41 -05:00
Saúl Ibarra Corretgé
4f6ec920cd [Android] Set targetApiVersion to 25
We keep being compatible with versions all the way down to 16 for now, but this
will disable internal compatibility shims when running on 25.
2017-08-03 13:45:41 -05:00
Saúl Ibarra Corretgé
0d33844d51 [Android] Use an appropriate Android support library version
It must match the compileSdkVersion major number.
2017-08-03 13:45:41 -05:00
Lyubo Marinov
0836f2cefd [RN] Prefetch remote avatar images 2/2 2017-08-03 13:45:41 -05:00
Lyubo Marinov
97832e0eef [RN] Prefetch remote avatar images 1/2 2017-08-03 13:45:41 -05:00
Lyubo Marinov
00e058d392 [RN] Cache avatars and provide a default in case load fails (2)
Refactors the previous "[RN] Cache avatars and provide a default in
case load fails" for the purposes of simplification but also modifies
its functionality at the same time. For example:

- Always displays the default avatar immediately which may be seen if
  the remote avatar needs to be downloaded.
- Does not use random colors.
- Uses a default avatar image which is not transparent and ugly but at
  least it's the same image that's used on Web. I've started talks to
  have images/avatar2.png replaced with a transparent and beautiful
  so that will land later on and we'll see the automagic colors in all
  their glory then.
2017-08-03 13:45:41 -05:00
Lyubo Marinov
504646fff0 Coding style 2017-08-03 13:45:41 -05:00
Saúl Ibarra Corretgé
122ebe48c7 [RN] Cache avatars and provide a default in case load fails
Avatars are cached to the filesystem and loaded from there when requested again.
The cache is cleaned after a conference ends and on application startup
(defensive move).

In addition, implement a fully local avatar system, which is used as a fallback
when loading a remote avatar fails. It can also be forced using a prop.

The fully local avatars use a user icon as a mask and apply a background color
qhich is picked by hashing the URI passed to the avatar. If no URI is passed a
random color is chosen.

A grace period of 1 second is also implemented so a default local avatar will be
rendered if an Avatar component is mounted but has no URI. If a URI is specified
later on, it will be loaded and displayed. In case loading the remote avatar
fails, the locally generated one will be used.
2017-08-03 13:45:41 -05:00
Дамян Минков
fe8ac0fff9 Merge pull request #1852 from virtuacoplenny/lenny/device-error-notifications
feat(device-errors): move device error dialogs to notifications
2017-08-02 14:55:18 -05:00
Leonard Kim
cd66a7fcb7 ref(notifications): bring hiding of notifications into redux 2017-08-02 11:19:38 -07:00
Leonard Kim
74ddae4a6a feat(device-errors): move device error dialogs to notifications
- Create a notification component for displaying a toggle.
- Create an action for showing the component if allowed by
  the local storage setting and for saving the setting to
  local storage.
- Remove all notifications having a timeout by default so the
  device error notification must be dismissed manually.
- Split the camera and mic error dialog into two separate
  notifications.
2017-08-01 16:33:00 -07:00
Lyubo Marinov
1ad8436cb5 [Android] Use loadURL in the app 2017-08-01 12:07:22 -05:00
Lyubo Marinov
6b2a93909b [iOS] Use loadURL in the app 2017-08-01 06:31:03 -05:00
Lyubo Marinov
c259551d9a [RN] Handle multiple schemes/protocol in URLs 2017-08-01 06:31:03 -05:00
Lyubo Marinov
377be4272a [RN] Fix the conference URL delivered to JitsiMeetView's listeners 2017-08-01 06:31:03 -05:00
Lyubo Marinov
737419dbe8 Do not require domain in SDK and ExternalAPI 2017-08-01 06:31:03 -05:00
Lyubo Marinov
1748049322 [RN] Remove unncessary characters from the invite URL 2017-08-01 06:31:03 -05:00
Lyubo Marinov
caea02a322 [RN] Mitigate 'Not joining a new URL while in a conference' 2017-08-01 06:31:03 -05:00
bgrozev
d778b716be Merge pull request #1850 from jitsi/iframe_api_doc
doc(iframe_api): Fix the names of the properties in the options object.
2017-08-01 00:51:44 -05:00
hristoterezov
4dcbe5c6a0 doc(iframe_api): Fix the names of the properties in the options object. 2017-08-01 08:48:50 +03:00
virtuacoplenny
c04ef05058 feat(presence): display status in thumbnail and large video (#1828)
* feat(presence): display status in thumbnail and large video

- Create a React Component for displaying presence. It currently
  connects to the store for participant updates but in the future
  should not be as smart once more reactification occurs.
- Modify filmstrip css so the presence status displays horizontal
  center and below the avatar.
- Modify videolayout css so the presence status displays horizontal
  centered and with a rounded background.
- Dispatch presence updates so the participant state can be update.
- Update message position on large video update to ensure message
  positioning is correct.

* squash: do not show presence message if connection message is displayed
2017-07-31 18:33:22 -05:00
Дамян Минков
82117a0aef Handles disabled dial-out codes. (#1847)
Hides the UI component showing dialout codes and uses the dial input without validating it.

Skips printing error when dial-in numbers is not configured.
2017-07-31 12:44:50 -07:00
Leonard Kim
9c6afc2062 fix(dial-out): appease FieldText warning for onChange prop 2017-07-31 13:21:49 -05:00
Lyubo Marinov
dcc6ce025f Convert a function to an asynchronous redux action creator 2017-07-31 12:26:39 -05:00
paweldomas
40c9f583fa ref(tracks): remove duplication in mute/unmute 2017-07-31 12:26:39 -05:00
Leonard Kim
3e84d8b3b6 ref(dial-out): use AtlasKit FieldText for inputs
- Swap the telephone input with FieldText.
- Swap the dropdown trigger input with FieldText for styling
  consistency with the telephone input.
- Wrap the dropdown trigger so it can be modified with jitsi css.
- Use flexbox to have the trigger and input align horizontally
  but have the input take up width if the trigger is not displayed.
2017-07-31 11:44:56 -05:00
Saúl Ibarra Corretgé
0983ef48b5 [RN] Fix root component's prop types 2017-07-31 15:30:31 +02:00
virtuacoplenny
da1c760abf feat(notifications): implement a react/redux notification system (#1786)
* feat(notifications): implement a react/redux notification system

* squash into impl explicit timeout, style

* ref(notifications): convert toastr notifications to use react

* ref(toastr): remove library

* squash into conversion: pass timeout

* squash into clean remove from debian patch
2017-07-28 12:56:49 -05:00
paweldomas
e818fa1e9e fix(API): early audio muted status
Apply the same early audio muted logic as for the video.
2017-07-28 12:06:42 -05:00
paweldomas
d2e8b13add feat: add config.startWithAudioMuted config.startWithVideoMuted 2017-07-28 12:06:42 -05:00
paweldomas
68f4a4ae9f ref: enable/disable microphone button
Make toolbar's microphone button enabled whenever there are any
'audioinput' devices available and allow to add audio during
the conference even if microphone permissions were denied on startup.
2017-07-28 12:06:42 -05:00
Saúl Ibarra Corretgé
bfa5f4c953 [Android] Fix resource leak when JitsiMeetView is destroyed
In iOS this is automagically done in the view destructor, bunt we don't have
that luxury in Java we have to do it manually.

The new disponse() method MUST be called when the Activity holding the view is
going to be destroyed, typically in the onDestroy() handler.
2017-07-28 10:50:12 -05:00
Saúl Ibarra Corretgé
03b043ca2b [Android] Destroy containes when they are not visible
Whatever I've tried so far ends up failing in really weird ways, so let's admit
defeat, for now. Destroy containers only on Android.

This shall be revisited when we update RN to version >= 0.43 and we have
"display: 'none'" available.
2017-07-28 10:25:46 -05:00
Saúl Ibarra Corretgé
d00ee3d7b6 [Android] Add an example for loadURLObject 2017-07-28 09:19:07 -05:00
Saúl Ibarra Corretgé
aaf5dd75fa [iOS] Fix loading initial URL when app is closed
We must not pass nil as the URL, that will translate to null and we won't be
able to load the initial URL which is passed as the launch parameters.
2017-07-28 09:18:35 -05:00
Saúl Ibarra Corretgé
f1c9e57b43 [RN] startWithAudioMuted & startWithVideoMuted 2017-07-27 16:48:38 -05:00
Lyubo Marinov
e542af28a2 [RN] Converge with Web's ExternalAPI a bit
Web's ExternalAPI accepts an object with properties as one of its
constructor arguments and from which it generated a URL. Mobile's
JitsiMeetView.loadURLObject is supposed to accept pretty much the same
object.
2017-07-27 16:48:38 -05:00
damencho
9778aabe98 Uses languages.json to obtain supported languages. 2017-07-27 16:36:22 -05:00
Saúl Ibarra Corretgé
1fae0ee780 [RN] Update react-native-background-timer dependency
Our fixes have been applied upstream and a release has been made.
2017-07-27 11:50:01 +02:00
Saúl Ibarra Corretgé
1fb31b6773 [iOS] Fix crash when a nil URL is loaded
NSDictionary doesn't support nil values, they must be objects, so use NSNull
instead, which is the kosher way to do it.
2017-07-27 11:33:56 +02:00
Lyubo Marinov
9871580e6d [iOS] Completeness (maybe) 2017-07-26 15:54:58 -05:00
Lyubo Marinov
3546cf4915 Fixes jsdocs, formatting 2017-07-26 15:54:57 -05:00
Lyubo Marinov
a2c2d3bee1 [RN] Alternative to JitsiMeetView.loadURL w/o URL
Introduces loadURLObject in JitsiMeetView on Android and iOS which
accepts a Bundle and NSDictionary, respectively, similar in structure to
the JS object accepted by the constructor of Web's ExternalAPI. At this
time, only the property url of the bundle/dictionary is supported.
However, it allows the public API of loadURLObject to be consumed. The
property url will be made optional in the future and other properties
will be supported from which a URL will be constructed.
2017-07-26 15:53:35 -05:00
Lyubo Marinov
e5e7b59f43 Upgrade NPM dependencies/packages 2017-07-26 12:08:20 -05:00
Lyubo Marinov
980d48e00b Fix typo 2017-07-26 10:40:05 -05:00
Saúl Ibarra Corretgé
51934dac1b [Android] Fix gradle version with Android Studio 3.0 Canary 8 2017-07-26 17:30:45 +02:00
Lyubo Marinov
f0ab835b46 [RN] Add loadURLString to JitsiMeetView
Initializing a new URL/NSURL instance is a chore especially when one
takes into account that the JavaScript side (1) is loading the URL
asynchronously and (2) is capable of parsing strings that may or may not
be represented as URL/NSURL.

The Android method loadURLString(String) may have been called
loadURL(String) to overload loadURL(URL) but I didn't want to do that
because:

1. It would not be compatible with existing source code such as
loadURL(null) which would have become ambiguous.

2. I wanted to achieve better convergence with the iOS API.
2017-07-25 19:07:01 -05:00
Lyubo Marinov
6c488cc613 [RN] Simplify hiding Container components 2017-07-25 13:58:45 -05:00
Saúl Ibarra Corretgé
d3c408ae2e [RN] Simplify hiding Container components
When a Container is not visible there is no need for it to react to touch
events, thus avoid wrapping it in a touch component.

In addition, simplify the style needed for hiding the component. Moving the view
out of the window boundaries no longer works on RN 0.42 on iOS. Seting the size
to 0 works well on both platforms, but in the future (when we upgrade to RN >=
0.43) we should switch to display: none:
4d69f4b2d1
2017-07-25 13:58:44 -05:00
hristoterezov
e8223bbb4a fix(remotecontrol): Use own scope for the messages. (#1787) 2017-07-25 08:40:57 -07:00
Saúl Ibarra Corretgé
fa86d2ab9e Merge pull request #1815 from jitsi/fix_audio_only_off
fix(AudioOnly+web): crash when untoggle audio only
2017-07-25 14:05:09 +02:00
paweldomas
122a7f6346 fix(AudioOnly+web): crash when untoggle audio only
Because on web video track is stored both in redux and in 'localVideo'
field, video is attempted to be unmuted twice when turning off the audio
only mode. This will crash the app with 'unmute operation is already in
progress'. This commit will prevent from taking action from the web
world if the video track already exists and will make the redux side
rollback unmuted status in case unmute fails.
2017-07-25 11:05:02 +02:00
Lyubo Marinov
24eb37ae1e [RN] Fix jsdocs, formatting. Add flow 2017-07-24 16:08:46 -05:00
Saúl Ibarra Corretgé
2094b15432 [RN] Workaround for Android view clipping
In another installment of "how on earth?!", using a 1px border instead of a
0.2px border fixes view clipping on a device where it didn't work before
(Moto X Play).

Observations:

- When nothing was rendered, rotating the device made the buttons show up, this
  makes me think the Surface is not properly composited with the toolbar view
  for some reason. Why this happens in some devices and not in others remains a
  mistery.

Other approaches attempted:

- Setting View.collapsed to false so it will remain in the view hierarchy. It
  made no effect.

- Setting View.needsOffscreenAlphaCompositing to true. It made no effect.

Just like before, I came up with this workaround by accident, but couldn't find
another way, so here we go again.
2017-07-24 15:01:37 -05:00
Saúl Ibarra Corretgé
157eadc44a [RN] Don't destroy containers when they are not visible
This essentially reverts
023359b9d2

In the filmstrip we keep a container full of thumbnail views. Destroying these
every time we want we want to hide it is costly, as new renderers have to be
recreated, and they lack context, so there is an increased chance for "black
thumbnails".
2017-07-24 15:01:37 -05:00
Saúl Ibarra Corretgé
2525bb2805 Merge pull request #1802 from jitsi/start_in_audio_only
Start in audio only
2017-07-24 14:32:20 +02:00
paweldomas
e08171f602 fix: video muted out of sync
When video is unmuted when toggling off the audio only mode it
dispatches video muted status, but does not roll it back in case it
fails. That was causing toolbar button on Web to display incorrect
video muted status.
2017-07-24 13:54:38 +02:00
Lyubo Marinov
db88c555dc Fix warning 2017-07-21 17:40:09 -05:00
Lyubo Marinov
96e0c56bde [RN] Don't override config values 2017-07-21 17:40:09 -05:00
yanas
b0ffe2e63f Remove primary toolbar splitter (#1811) 2017-07-21 14:21:39 -07:00
yanas
06234066b6 Fixes some styles and variables (#1809)
* Fixes some toolbox/toolbar styles and variables

* [squash] Fixes variable name to fit better its purpose

* [squash] Fixes secondary toolbar variable name
2017-07-21 12:45:04 -07:00
Leonard Kim
1897c395ec fix(icons): set a size prop for AtlasKit icons
With the upgarde of @atlaskit/icon to 7.0.0, the size prop
essentially became required to maintain its appearance in the
jitsi app, otherwise it'll unexpectedly try to take up the
available space and cause minor display issues.
2017-07-21 14:25:39 -05:00
paweldomas
6ac23c8086 fix(conference): early video muted state
If muteVideo is called, before local tracks have been initialized it
will be synced up once the tracks are created (or not).
2017-07-21 15:05:09 +02:00
paweldomas
a5f61714bd fix: unmute video on audio only switch off
Will unmute local video (and ask for permissions if needed) in case user
started in audio only mode and is turing it off.
2017-07-21 15:04:37 +02:00
paweldomas
00d3d3c09a fix(VideoLayout): muted for no tracks
Will make the UI display audio/video muted icon for remote participants
with no audio/video track.
2017-07-21 15:04:03 +02:00
paweldomas
6493b09565 feat: add config.startAudioOnly
When the 'startAudioOnly' config option is set to true the conference
will start in the audio only mode.
2017-07-21 15:03:28 +02:00
Leonard Kim
955542f4a5 feat(speaker-status): update speaker status in redux
The speakerStatus field already exists as part of the objects
in the participant reducer. When the library updates the
connection status of a user, plumb that update through to redux.
2017-07-21 14:12:15 +02:00
George Politis
68d40b4fa4 Merge pull request #1738 from virtuacoplenny/lenny/connection-stats-pub-sub
ref(stats): process stats through one pub/sub
2017-07-21 12:22:55 +02:00
Aaron van Meerten
c369330054 Merge pull request #1797 from jitsi/module-poltergeist_update
Module poltergeist update
2017-07-20 16:06:50 -05:00
Aaron van Meerten
b6efdb533d Handles the async wrapping of the mod_muc_size functions
fixes handling of keyserver ASAP validation of tokens
wraps room and room-size APIs
2017-07-20 16:04:16 -05:00
Aaron van Meerten
22e9dc9893 Handles async context for all poltergeists
set up async context for all poltergeist calls
utils lib now has async wrapper for event handlers
2017-07-20 15:56:45 -05:00
damencho
8047fdf5a2 Makes possible for poltergeist to set status just before leaving. 2017-07-20 14:16:42 -05:00
damencho
2c873e8c7f Adds token verification for poltergeist accepted rest calls. 2017-07-20 13:56:55 -05:00
damencho
284b5f94b5 Adds initial status param when creating poltergeist. 2017-07-20 13:29:54 -05:00
bbaldino
6bcb9be364 Merge pull request #1806 from saghul/ff-simulcast-testing
config: document enableFirefoxSimulcast
2017-07-20 08:36:39 -07:00
Saúl Ibarra Corretgé
3c084c0082 config: document enableFirefoxSimulcast 2017-07-20 09:48:28 +02:00
bbaldino
a08ea37005 Merge pull request #1798 from virtuacoplenny/lenny/rename-hide-indicator
fix(connection-indicator): rename calls to hiding the indicator
2017-07-19 15:20:33 -07:00
Leonard Kim
2132cd6736 fix stat unsub, one loop for updating 2017-07-19 15:11:35 -07:00
Leonard Kim
44bbd26c96 ref(stats): process stats through one pub/sub
Instead of passing stats through UI then VideoLayout then the
SmallVideo, pass stats directly to what uses it--ConnectionIndicator.
This also bypasses adding the stats to the store, as they do not
seem to be something that needs to be shared or stored app-wide
just yet.
2017-07-19 15:11:35 -07:00
Saúl Ibarra Corretgé
1d90826098 [RN] Use a more resilient way for testing if we are on React Native
navigator.product is read-only, so we don't run into the risk of it being
changed.
2017-07-19 16:40:06 -05:00
Saúl Ibarra Corretgé
4efbbe14b1 [Android] Require OpenGL ES 2.0
This was already an implicit requirement, as it's the only version implemented
in libwebrtc.

The reason to add this is to (defensively) try to filter old devices which may
not implement it.

WebRTC's own Android demo app defines this.
2017-07-19 16:36:42 -05:00
Lyubo Marinov
0b5431b795 [RN] Bind event handler once per instance, not per render 2017-07-19 16:33:57 -05:00
Lyubo Marinov
e7fc4739c4 Fixes jsdocs 2017-07-19 16:25:06 -05:00
damencho
f40faecfbe Fixes using correct field for domain in multidomain mode. 2017-07-19 11:36:49 -05:00
Saúl Ibarra Corretgé
f72932d125 [RN] Fix audio / video mute buttons when permissions are not granted 2017-07-19 14:38:38 +02:00
Saúl Ibarra Corretgé
ffc12ccc0e [RN] Disable camera switch button when video is muted 2017-07-19 14:30:36 +02:00
Saúl Ibarra Corretgé
03da40b56a [RN] Disable video mute and camera switch buttons when in audio only mode 2017-07-19 11:58:08 +02:00
Saúl Ibarra Corretgé
055df1c12e [RN] Add ability to disable a ToolbarButton 2017-07-19 11:50:24 +02:00
Lyubo Marinov
d87b8823e9 [RN] Don't open the camera on startup when there is no welcome page 2017-07-18 23:42:08 -05:00
Saúl Ibarra Corretgé
8225600b61 [RN] Don't open the camera on startup when there is no welcome page
The end goal of this patch was to avoid opening the camera when there is no
welcome page.

In order to achieve this, the logic for creating the local tracks was
refactored:

Before this patch local tracks were created when lib-jitsi-meet was initialized,
and destroyed when it was deinitialized. As a side note, this meant that when a
conference in a non-default domain was joined, local tracks were destroyed and
recreated in quick succession.

Now, local trans are created and destroyed based on what the next route will be,
and this happens when the target room has been decided. This allows us to create
local tracks the moment we need to render any route, and destroy them when there
is no route to be rendered. As an interesting byproduct, this refactor also
avoids the destruction + recreation of local tracks when a conference in a
non-default domain was left.
2017-07-18 20:42:20 -05:00
Lyubo Marinov
b62b296080 Fix typos. Apply consistent formatting 2017-07-18 16:43:58 -05:00
Lyubo Marinov
a690b9d5e1 [RN] Handle denied getUserMedia permissions 2017-07-18 16:41:39 -05:00
Leonard Kim
364ab5431c fix(connection-indicator): rename calls to hiding the indicator 2017-07-18 13:27:48 -07:00
damencho
4a9a8eec9a Send poltergeist presence update reusing previous presences.
If we do not reuse previous presences we lose avatar and name and people joining after the poltergeist creation will not be updated with those values.
2017-07-18 13:08:18 -05:00
damencho
308360fbe0 Cleans poltergeists table on remove occupant and when muc is destroyed. 2017-07-18 11:11:14 -05:00
Saúl Ibarra Corretgé
c97daff506 Merge pull request #1775 from jitsi/start_screen
Add config.startScreenSharing
2017-07-18 13:51:57 +02:00
Saúl Ibarra Corretgé
7361151203 feat(dialog): add missing export for actionTypes
The full-screen module uses the HIDE_DIALOG action to re-engage the full-screen
mode.
2017-07-18 13:35:24 +02:00
paweldomas
8093043d39 style(conference.js): style fixes 2017-07-18 12:45:40 +02:00
paweldomas
3fbb022ffb ref(conference): use options in init tracks 2017-07-18 12:45:12 +02:00
damencho
e6840981ca Handles removing poltergeists.
Adds http method to remove poltergeists. Adds configurable timeout after which poltergeists automatically are removed from the room.
2017-07-17 19:29:00 -05:00
damencho
64bb5563bc Returns error when there is no query, but params expected. 2017-07-17 17:38:29 -05:00
damencho
0cffbdb967 Fixes wrong parameter name. 2017-07-17 17:26:47 -05:00
Lyubo Marinov
72691eb2dc misc: fix dispatching actions twice when mapDispatchToProps is used 2017-07-17 13:59:04 -05:00
Saúl Ibarra Corretgé
0bf9a78e4c misc: fix dispatching actions twice when mapDispatchToProps is used
The functions need not return anything, or it will be dispatched as another
action.
2017-07-17 13:51:35 -05:00
Aaron van Meerten
0c446026d6 Merge pull request #1788 from jitsi/module-poltergeist
module-poltergeist
2017-07-17 13:21:57 -05:00
Saúl Ibarra Corretgé
326ce4217f [Android] Fix gradle and plugin versions with Android Studio 3.0 Canary 6 2017-07-17 11:32:57 -05:00
Kolokotronis Panagiotis
5db605b0cf [Docs] Web server config on install 2017-07-17 10:26:12 -05:00
paweldomas
117d3bb110 ref(conference.js): show screensharing error first
If there will be microphone error it will cover any screensharing
dialog, but it's still better than in the reverse order where
the screensharing dialog will sometime be closing the microphone alert
($.prompt.close(); is called).
2017-07-17 15:32:03 +02:00
paweldomas
3926d705ad feat: add config.startScreenSharing
Will try to use screensharing instead of camera video from
the beginning.
2017-07-17 15:32:01 +02:00
paweldomas
5b5470ec66 ref(conference.js): createInitialLocalTracksAndConnect
Make 'createInitialLocalTracksAndConnect' not static.
2017-07-17 15:31:48 +02:00
Lyubo Marinov
7f041170f7 Consistent formatting 2017-07-16 03:44:07 -05:00
Lyubo Marinov
e54744e5ef [Android] Use target API 23 2017-07-16 02:26:09 -05:00
Saúl Ibarra Corretgé
96bfcafc97 [Android] Use target API 23
This reverts commit c9a29153dd.

Now that react-native-webrtc supports the permissions system in 23, use it since
it provides a more pleasant experience to users.

In addition, fix a bug in the previous code: the React Native view must be
loaded after we have acquired the permission to draw on top of other apps,
otherwise our app may crash while we accept the permission, since React may try
to draw.
2017-07-16 02:26:09 -05:00
Lyubo Marinov
9a295723cf Consistent formatting 2017-07-16 02:25:26 -05:00
damencho
58d06fe7e6 A poltergeist module.
Thanks to Matthew Wild for the initial help of creating these.
Module with REST interface to create poltergeist participants and change their statuses.
When user with same id joins the room, the poltergeist is removed.  We also make sure that that user uses same username when authenticates. This way we are sure that user will join the room with the same nick as the poltergeist.
2017-07-14 22:18:23 -05:00
damencho
cc79b073f0 Fires event before setting username, allows listeners to override it.
This is a hook to override the username that will be used when authenticating token users (which are using anonymous login with auto-generated username).
2017-07-14 22:12:56 -05:00
damencho
599d84a889 Stores the room name from the bosh url into the session. 2017-07-14 22:08:41 -05:00
damencho
2b1e8cdeff Creates util for modules and adds method get_room_from_jid in it. 2017-07-14 22:03:36 -05:00
virtuacoplenny
ea0c333f4b Merge pull request #1785 from jitsi/remove-styles
Remove unneeded css styles
2017-07-14 16:14:46 -07:00
virtuacoplenny
4eef52b84e Merge pull request #1784 from bbaldino/device_list_available_fix
fix an error when testing a result from a method that returns a promise
2017-07-14 15:44:58 -07:00
yanas
3e1dc298c8 Removes unneeded css styles 2017-07-14 14:49:28 -05:00
virtuacoplenny
244de8096f feat(local-video): convert to react (#1705)
* feat(local-video): convert to react

- Create a VideoTrack component for displaying a video element.
  This mirrors native also having a VideoTrack component.
- The VideoTrack component does not let React update it to prevent
  the video element from re-rendering, which could cause flickers
  and would not work with temasys's overriding of the video element.
- VideoTrack extends AbstractVideoTrack to mirror native
  implementation and to get the dispatch of the onplaying event.
- Remove the onclick handler on the video element. Honestly, I
  didn't get it to work, and did not try, but it is also unnecessary
  because another handler already exists on the video wrapper.

* ref(device-selection): VideoInputPreview uses VideoTrack to show video

* squash into conversion: change css selectors

* squash into conversion: mix in abstract props

* squash into conversion: change shouldComponentUpdate check

* squash: update comment about why triggerOnPlayingUpdate is used
2017-07-14 14:22:27 -05:00
bbaldino
7d99c54ec8 fix an error when testing a result from a method that returns a promise 2017-07-14 18:55:18 +00:00
virtuacoplenny
37328b3995 Merge pull request #1757 from jitsi/rc_dialog_to_notification
fix(remotecontrol): Replace info dialogs with notifications.
2017-07-14 11:32:54 -07:00
hristoterezov
b8d3e82ae7 fix(remotecontrol): Replace info dialogs with notifications. 2017-07-14 12:58:37 -05:00
hristoterezov
07a0e3d8ff fix(iframe_api): Remove min height/width. 2017-07-14 12:56:20 -05:00
hristoterezov
70122789e7 fix(iframe_api): Change the format of the arguments in the constructor 2017-07-14 12:56:20 -05:00
hristoterezov
3736d6ca78 fix(iframe_api): Remove unnecessary div that wraps the iframe 2017-07-14 12:56:20 -05:00
hristoterezov
07158e8071 style(iframe_api): Adds _ for every non public property 2017-07-14 12:56:20 -05:00
hristoterezov
cc6fcfd982 feat(iframe_api): Getter for the iframe 2017-07-14 12:56:20 -05:00
paweldomas
b84e910086 feat: add option to disable desktop sharing
config.disableDesktopSharing - when set to false will disable desktop
sharing

interfaceConfig.DESKTOP_SHARING_BUTTON_DISABLED_TOOLTIP - when value is
assigned, will not hide the desktop sharing button completely, but show
as disabled with this value used as the tooltip text.
2017-07-14 10:14:00 -05:00
virtuacoplenny
10766e6958 Merge pull request #1778 from jitsi/base-css-fix
Fix(base.scss): Don't restyle inputs, selects and buttons
2017-07-13 17:08:31 -07:00
Aaron van Meerten
d752e8b864 accept 'avatar' as well as 'avatarUrl' for avatar field 2017-07-13 15:49:25 -05:00
George Politis
d335669afe Merge pull request #1765 from jitsi/feat-local-remote-relayed
feat: Adds TURN indication.
2017-07-13 21:16:40 +02:00
yanas
7ebd2b2cd4 Fix(base.scss): Don't restyle inputs, selects and buttons 2017-07-13 14:15:07 -05:00
Aaron van Meerten
622d4ba89c added checks for audience and issuer values (#1772)
* added checks for audience and issuer values
default audience and issuer checks to validate only appId
added missing documentation lines from the previous PR for context_user and context_group session values

* support for accepting any audience
option set to accept any audience by default
2017-07-13 13:30:17 -05:00
Saúl Ibarra Corretgé
3de6f1cd7f feat(external_api): make sure the created iframe has no border 2017-07-13 13:05:30 -05:00
Saúl Ibarra Corretgé
7b1639569e feat(external_api): make height / width calculation more resilient 2017-07-13 13:05:30 -05:00
George Politis
62613ff02e feat: Adds TURN indication. 2017-07-13 17:00:27 +02:00
Leonard Kim
4eacbd9f61 fix(tracks): remove mute and videotype listeners on track remove
Listeners were set for when a track muted or changed its video
type, but the listeners were never removed. This would could
cause events to keep firing on the removed tracks, which would
cause redux to fire and error because the tracks were no longer
known. That the tracks still fire events after removal is
another issue...
2017-07-13 09:37:39 +02:00
virtuacoplenny
884509faee Merge pull request #1771 from jitsi/change-thumbnail-menu
Changes video thumbnail menu icon
2017-07-12 18:54:07 -07:00
yanas
2e2b1d47c0 Changes video thumbnail menu icon 2017-07-12 17:22:07 -05:00
Aaron van Meerten
fac6c30b1c use "sub" instead of "aud" to confirm tenant domain settings
stick user and group from token context into session if available
2017-07-12 12:57:55 -05:00
Leonard Kim
1ad614e812 fix(add-people): remove line break from searchPeople request
Chrome has deprecated line breaks in requests. The template
literal used for the searchPeople url has a line breaks. Instead
of line breaking the request url, concatenate it together.
2017-07-12 12:54:26 -05:00
paweldomas
21957c8bf2 fix(conference): disable video icon
Explicitly calls 'updateVideoIconEnabled' in case both audio and video
permission were not granted and device list changed callbacks will not
be executed (check in lib-jitsi-meet that it requires GUM call to
succeed at least once for device list changed events).
2017-07-12 10:29:18 -07:00
paweldomas
63377a2f76 ref(conference): try video only
Will make an attempt to create video only stream in case microphone
permissions were not granted.
2017-07-12 10:29:18 -07:00
paweldomas
de2eee2e61 ref(VideoLayout): reduce 'forceUpdate' usage 2017-07-12 10:29:18 -07:00
paweldomas
badbedf0f5 ref(LargeVideoManager): getCurrentContainer
Remove duplication and direct access to kind of private 'state' field by
introducing 'getCurrentContainer' method.
2017-07-12 10:29:18 -07:00
paweldomas
2281b1acd2 ref: enable/disable video button
Dynamically enables/disables the toolbar video button. Prior to that
commit if we would start with no video there would be no way to enable
it later on.
2017-07-12 10:29:18 -07:00
paweldomas
6655ae5a84 fix(conference): do not mute when screen sharing
Screen sharing video should not be muted if video input device is
disconnected.
2017-07-12 10:29:18 -07:00
paweldomas
c4c100e26a feat(conference): restore video after screen sharing
Will restore the camera video state from before screen sharing was
started (and will mute it if it was muted).
2017-07-12 10:29:18 -07:00
paweldomas
a7025c41f6 fix(conference): do not go back to video
Do not go back to video from screen sharing if there was no video stream
at the time when screen sharing was being started.
2017-07-12 10:29:18 -07:00
paweldomas
d84ab20a47 fix(conference): start camera later on
Instead of disabling the video button in the toolbar, mark it as muted,
so that the user can click it to try enable video later on, even if
joined without video (either declined permission or was starting with
screen streaming and dismissed the dialog).
2017-07-12 10:29:18 -07:00
paweldomas
751f27644f fix(VideoLayout): store userID in container
The container needs to store user's ID in order for the 'isOnLargeVideo'
logic to work correctly when user has no stream (previously it was
obtained from stream which can be null/undefined).
2017-07-12 10:29:18 -07:00
yanas
4ccd5c6072 Fix(AddPeopleDialog): Close dialog on submit (#1761)
* Fix(AddPeopleDialog): Fixes error state and close dialog

* (to-squash) Addresses comments
2017-07-12 08:35:00 -07:00
Saúl Ibarra Corretgé
bae609b296 Merge pull request #1763 from jitsi/dp_def_prop
fix(desktop_picker): Use defaultProps
2017-07-11 10:01:43 +02:00
Saúl Ibarra Corretgé
e78c70e53d misc: set supported Node version to >= 6 2017-07-10 17:45:25 -05:00
hristoterezov
cee523fbf1 fix(desktop_picker): Use defaultProps 2017-07-10 17:43:29 -05:00
virtuacoplenny
0481e4cf00 feat(indicators): move the "top toolbar" indicators to react (#1699)
* feat(indicators): move the "top toolbar" indicators to react

* wrap baseindicator
2017-07-10 17:29:44 -05:00
virtuacoplenny
fcda36a8e0 Merge pull request #1756 from jitsi/remote_control_mm
Remote control
2017-07-10 15:20:55 -07:00
yanas
f5d443d194 User Picker Implementation 2017-07-10 09:56:38 -07:00
yanas
47b6166d79 fix(StatelessDialog.web): Fixes stealing Enter events 2017-07-10 09:56:38 -07:00
Saúl Ibarra Corretgé
6fc1a3f45d [Android] Add comment on disabling JS packaging for dev builds 2017-07-10 17:42:39 +02:00
Saúl Ibarra Corretgé
ab7d1553db Merge pull request #1750 from jitsi/p2p_disabled
feat(config.js): add config.testing.
2017-07-10 10:13:25 +02:00
hristoterezov
1498245b9e fix(remotecontrol): Show error on cancel of desktop picker 2017-07-09 22:42:35 -05:00
hristoterezov
dc8198100b feat(remotecontrol): Make sure the receiver is always sharing entire screen 2017-07-09 16:34:08 -05:00
hristoterezov
1a9a8a2098 feat(SS): pass the source type to lib-jitsi-meet. 2017-07-07 17:45:24 -05:00
Saúl Ibarra Corretgé
2968f8edf8 [RN] Make the audio muted icon consistent with the web 2017-07-07 12:27:28 -05:00
Lyubo Marinov
5c094bf6e0 [RN] Fix disconnecting before the connection was established 2017-07-07 12:21:08 -05:00
Saúl Ibarra Corretgé
c4232b34ae [RN] Fix disconnecting before the connection was established
Keep track of the connection and conference objects so we can leave and / or
disconnect early, before the connection is established or the conference joined.
2017-07-07 09:37:04 -05:00
Saúl Ibarra Corretgé
99b856233d [iOS] Fix joining initial URL if app was closed
On iOS, if the app is closed the startup options are only passed as the
`launchOptions` dictionary of `applicationDidFinishLaunching`. Thus add a helper
method to be called from there by embedding applications so we can copy that
dictionary.
2017-07-07 08:57:49 -05:00
paweldomas
0f4c785705 feat(config.js): add config.testing. 2017-07-07 15:40:08 +02:00
hristoterezov
814d56c25c feat(remotecontrol): multi monitor support 2017-07-06 21:20:35 -05:00
Saúl Ibarra Corretgé
f878f54b4d [RN] Toggle audio-only icon based on state 2017-07-06 17:18:49 -05:00
Saúl Ibarra Corretgé
46a87e42ce [RN] Update audio-only icon
Match the one on the web.
2017-07-06 17:14:00 -05:00
Saúl Ibarra Corretgé
db26aa652b [RN] Update jitsi font icon selection 2017-07-06 17:14:00 -05:00
Saúl Ibarra Corretgé
8d1d3a9c42 [RN] Use same video mute indicator icon as on the web 2017-07-06 17:10:32 -05:00
Saúl Ibarra Corretgé
d5e89a60b7 [RN] Fix passing url prop to Root and App components
React (pun intended) to prop changes, that is, load the new specified URL.

In addition, fix a hidden bug in loading the initial URL from the linking
module: we prefer a prop to the URL the app was launched with, in case somehow
both are specified. We (the Jitsi Meet app) are not going to run into this
corner case, but let's be defensive just in case.
2017-07-06 15:54:56 -05:00
Lyubo Marinov
948d18f954 [Android] Fix "Minimum supported Gradle version is 4.1-milestone-1" 2017-07-06 15:20:09 -05:00
Lyubo Marinov
7dbba59dee [RN] Disconnect/hangup before joining a new URL 2017-07-06 15:00:29 -05:00
Lyubo Marinov
61fd4e4ce4 [RN] Fix passing url prop to Root and App components 2017-07-06 14:59:57 -05:00
Lyubo Marinov
9bd6bbfd95 Fix jsdocs. Simplify the source code 2017-07-06 14:59:57 -05:00
Saúl Ibarra Corretgé
cc9249ba1a [RN] Fix passing url prop to Root and App components
React (pun intended) to prop changes, that is, load the new specified URL.

In addition, fix a hidden bug in loading the initial URL from the linking
module: we prefer a prop to the URL the app was launched with, in case somehow
both are specified. We (the Jitsi Meet app) are not going to run into this
corner case, but let's be defensive just in case.
2017-07-06 14:59:57 -05:00
Boris Grozev
35fddfa8f4 fix: Removes the inclusion of local.html. 2017-07-06 10:51:44 -05:00
Saúl Ibarra Corretgé
82e10e1a00 [iOS] Don't bring the packager to the foreground upon launch 2017-07-06 14:07:20 +02:00
virtuacoplenny
84ae7df8f1 fix(filmstrip-only): vertically align center the toolbar (#1700)
* fix(filmstrip-only): vertically align center the toolbar

Use top 50% to position the toolbar's top at the vertical center
of the iframe. Then use transform 50% to move the toolbar itself
up 50% so its middle matches the middle of the iframe.

* squash: toolbox should center with filmstrip
2017-07-05 21:07:00 -05:00
bbaldino
5c199e2195 Merge pull request #1740 from bgrozev/refactor-deployment-info
Refactor deployment info
2017-07-05 18:41:38 -07:00
Lyubo Marinov
9aaf9a484d [RN] Fix TypeError: undefined is not an object (evaluating 'this.options.p2p.useStunTurn') 2017-07-05 16:34:06 -05:00
Saúl Ibarra Corretgé
4e4a9012c2 [RN] Fix iOS lockups / resprings
Apparently iOS doesn't like dangling background tasks very much, so update the
background timers plugin with a version which fixes this.

https://github.com/ocetnik/react-native-background-timer/pull/38

Also accomodate for the API changes upstream.

Credits to @lyubomir for finding the needle in the haystack.
2017-07-05 16:34:06 -05:00
Boris Grozev
4840db67ca fix: adds a hasOwnProperty check, uses "let". 2017-07-05 16:31:50 -05:00
Boris Grozev
b09613b943 ref: Uses config.deploymentInfo instead of window.jitsiDeploymentInfo. 2017-07-05 16:07:16 -05:00
Emil Ivov
66eac19058 Merge pull request #1739 from bgrozev/no-tabnabbing
No tabnabbing
2017-07-05 15:44:20 -05:00
Boris Grozev
aee5a9ca43 fix: Use https for links without a scheme. 2017-07-05 15:39:53 -05:00
Leonard Kim
129e54e262 fix(remote-menu): position volume slider in vertical center for firefox 2017-07-05 15:34:11 -05:00
Leonard Kim
0d4b77d7b1 fix(popover): set display before calculating width
Popover works by first creating a DOM element with display none
then having jquery calculate its width and new position and
then setting display to table. This does not work with p2p
connection stats, which are much wider than the default width
of the popover. What will happen is when display table is set,
the width will increase greatly so the positioning will be off.
The workaround here is to set display table as the default
display but toggle visibility instead.
2017-07-05 15:34:11 -05:00
Boris Grozev
b0eeb8a207 fix: Avoid tabnabbing
Reported by Manav.
2017-07-05 15:15:59 -05:00
Leonard Kim
ae67b2b28e fix(vertical-filmstrip): enable hardware acceleration for icons
Icons on the thumbnails can flicker when scrolling through videos.
To give rendering a bit more power, and thereby help with rendering
icons without flickering, force hardware acceleration.
2017-07-05 13:24:08 -05:00
Sergio Garcia Murillo
a97d02e0fd Change messageString to msgString in _requestRecordingToken
#1730
2017-07-05 10:05:22 -05:00
George Politis
88bfa61875 Merge pull request #1728 from saghul/unused-config-opts
feat(chore): remove unused interfaceConfig options
2017-07-05 14:34:11 +02:00
Saúl Ibarra Corretgé
4df914194c Merge pull request #1732 from jitsi/stun-turn-4p2p
docs: Documents the p2p.useStunTurn option.
2017-07-05 12:04:43 +02:00
George Politis
86c867ea71 docs: Documents the p2p.useStunTurn option. 2017-07-04 12:50:21 +02:00
Saúl Ibarra Corretgé
16e972d077 feat(chore): remove unused interfaceConfig options 2017-07-04 08:38:06 +02:00
Leonard Kim
152427e01b feat(small-video): convert the "toolbar" to react
Move display of audio muted, video muted, and moderator icons,
which make up the elements of the small video toolbar, into React
Components.
2017-06-30 14:21:44 -05:00
Boris Grozev
2a3c4cfb82 ref: Adds deployment info variables to config.js,
removes local.html
2017-06-30 13:37:11 -05:00
Emil Ivov
573aa168ea Update README.md 2017-06-30 11:25:32 -05:00
virtuacoplenny
0de032ebd7 feat(avatar): SmallVideo uses the existing Avatar component. (#1712)
* feat(avatar): SmallVideo uses the existing Avatar component.
2017-06-29 13:21:03 -05:00
Emil Ivov
ab81c2b56d Merge pull request #1713 from saghul/p2p-h264
feat(p2p): enable H.264 for P2P by default
2017-06-29 08:47:18 -05:00
Saúl Ibarra Corretgé
8a3cec4a9d feat(p2p): enable H.264 for P2P by default
On mobile we got the extra step of overriding the option and always set it to
true.
2017-06-29 11:22:32 +02:00
George Politis
2b0563ad35 Merge pull request #1710 from saghul/p2p-settings
feat(p2p): refactor configuration options
2017-06-29 11:13:26 +02:00
virtuacoplenny
928181cd7a feat(display-name): convert to React (#1672)
* feat(display-name): convert to React

- Create a new React Component for displaying and updating display
  names on small videos
- The updating of the Component is defined in the parent class
  SmallVideo, which children will get access to through prototype
  copying
- Create a new actionType and middleware so name changes that occur
  in DisplayName can be propogated to outside redux
- Update the local video's DisplayName when a conference is joined
  or else the component may keep an undefined user id

* squash: query for the container, not the el owned by react
2017-06-28 22:35:43 -05:00
paweldomas
e7a4318e8c ref(conference.js): remove global promise
Get rid of global APP.conference.screenSharingPromise.
2017-06-28 15:08:09 -05:00
Saúl Ibarra Corretgé
4e5bc172c9 feat(config): allow overriding nested config objects
This makes it possible for the following URL params to work:

config.p2p.enabled=true&config.p2p.preferH264=true
2017-06-28 17:29:04 +02:00
Saúl Ibarra Corretgé
3ea2f00578 feat(p2p): refactor configuration options 2017-06-28 14:57:39 +02:00
Saúl Ibarra Corretgé
01ac394e92 [Android] Fix compileSdkVersion
It must match the major number in buildToolsVersion.
2017-06-28 10:51:49 +02:00
Leonard Kim
4ce5888b4c feat(connection-indicator): convert to react
- Create a new ConnectionIndicator component for displaying an
  icon for connection quality and for triggering a popover. The
  popover handling has been left in ConnectionIndicator for now,
  which follows the existing implementation.
- Remove the unused method "connectionIndicatorShowMore"
- Change the implementation of existing methods that update the
  connection indicator to call the same method which will rerender
  the indicator completely.
2017-06-27 15:58:00 -05:00
Saúl Ibarra Corretgé
35f79dd2b4 config: default resolution is now 720p 2017-06-27 08:25:34 -05:00
Saúl Ibarra Corretgé
cdb547dbd1 Merge pull request #1534 from jitsi/p2p_react_native
[RN] export RTCIceCandidate
2017-06-27 11:15:29 +02:00
damencho
00afc32b6b Handles '*' as room name in jwt.
Allows '*' in jwt to allow connecting to any room.
2017-06-26 10:51:06 -05:00
Daniel Ornelas
8a01067b62 Added post-script to the Release configuraiton to build iOS SDK as Universal framework 2017-06-23 19:39:53 -05:00
Daniel Ornelas
7c2d59033b Fixed nullable pointer warnings in iOS SDK 2017-06-23 19:39:41 -05:00
Leonard Kim
fe4de31e57 feat(tracks): place local tracks in the redux store
- Add tracks to the redux store by intercepting where the
  tracks actually get used via conference.replaceTrack
- While the replace call is unique to web, the _dispose and
 _addTracks calls use existing native code implementations
- Between _dispose and addTracks is a call to update mute state.
  Without it, when changing devices or videoType while muted,
  the user will stay muted (whereas existing web behavior
  causes unmute). This is due to middelware calling
  _syncTrackMutedState to make the track mute if the user is
  currently muted.
- Move the rest of ConferenceEvents.TRACK_MUTE_CHANGED into
  middleware so the event is no longer used
- Note: This change does not guarantee the track state in the
  redux store will be 100% accurate, specifically the attribute
  videoStarted. Muted and videoType should be accurate.
2017-06-23 10:33:05 -05:00
Leonard Kim
2a446b8799 feat(tracks): place remote tracks into the redux store
- Use actions trackAdded and trackRemoved to add and remove remote
  tracks from the redux store
- Emit out to non-react components on track added and removed in
  the track middleware
- Emit out to existing non-react components on track mute and
  video type changes
2017-06-23 10:33:05 -05:00
Leonard Kim
4a1efed4a8 feat(audio-level): convert SmallVideo AudioLevelIndicator to React 2017-06-22 11:14:41 -05:00
Lyubo Marinov
8e4864004b Revert "Speed react-native run-android up (more)"
Reverts commit d117989b55 because it does
not bundle the fonts assets and the JS bundle.
2017-06-22 09:21:25 -05:00
hristoterezov
486d0802a8 fix(largevideo): show the background video only for video container type 2017-06-21 16:19:30 -05:00
hristoterezov
c250da59d5 fix(videolayout): Resize calculations 2017-06-21 16:19:30 -05:00
Ilya Daynatovich
0aee5e5b48 Add blurring effect 2017-06-21 16:19:30 -05:00
Ilya Daynatovich
292c1689ba Add maximum zooming coefficient 2017-06-21 16:19:30 -05:00
Leonard Kim
0a1bd5a0c7 feat(popover): do not remove the popover on every update
With popover usage now only passing in React Components, the
logic of removing the popover and recreating its html with
every update is not necessary. Instead allow React to update
the popover contents.

Because of this change, mouse event handlers are not recreated
on each update, so it is possible for mouseleave to fire after
the size of the popover shrinks when collapsing to hide more stats,
forcing the mouse out of the popover. To prevent this, padding has
been added to the top of the popover so on resize the mouse will
still be over the popover. The padding has the added bonus of
fixing an issue where the popover would not close until mouseenter
was triggered after size collapse, but it adds the drawback of
requiring more upward mouse travel to close the popover.
2017-06-20 13:49:02 -05:00
Leonard Kim
e0d641a787 feat(connection-stats): convert connection stats display to react
Move all logic related to displaying a table of connection stats to a React
Component. The actual parsing logic was modified as little as possible as the
focus is moving display to React.
2017-06-20 13:49:02 -05:00
Lyubo Marinov
d117989b55 Speed react-native run-android up (more)
React Native's Gradle script does not bundle the JS bundle in the Debug
configuration. Copy that source code (and adapt it) into our sdk Gradle
script.
2017-06-20 13:14:30 -05:00
Lyubo Marinov
2fa7e777d6 Speed react-native run-android up 2017-06-20 10:32:44 -05:00
Saúl Ibarra Corretgé
be30dd09e9 [iOS] Add scheme for building only the SDK 2017-06-19 16:08:30 -05:00
Saúl Ibarra Corretgé
84aa3627b4 doc: add a note con the recommended Node + npm versions 2017-06-19 15:57:35 -05:00
Saúl Ibarra Corretgé
d7818be067 [iOS] Link with WebRTC.framework at the top level
Before, Jitsi Meet (the app) would only link with JitsiMeet.framework, which in
turn embedded WebRTC.framework. While possible, Apple doesn't allow apps with
nested frameworks to be submitted to the store. Now the app will link with
WebRTC.framework directly so there is no framework nesting.

A potential improvement here is to build WebRTC as a static library so it can
then be embedded in JitsiMeet.framework and completely hidden from the app.
2017-06-19 11:03:13 -05:00
bgrozev
c782d21a36 Merge pull request #1680 from jitsi/suspended-overlay-english
Improve English of the suspended overlay message
2017-06-19 09:43:51 -05:00
Saúl Ibarra Corretgé
7800e4047f Remove executable flag from font files 2017-06-19 09:26:26 -05:00
ibauersachs
61e846c4fd Commit from translate.jitsi.org by user ibauersachs.: 353 of 354 strings translated (0 fuzzy). 2017-06-16 21:31:08 +00:00
Ingo Bauersachs
957badc792 Improve English of the suspended overlay message 2017-06-16 23:09:09 +02:00
Lyubo Marinov
53954285c7 Fix flow (and npm run lint)
The npm library promise (https://github.com/then/promise) was updated
(roughly 2 hours ago) and our flow setup does not pass successfully on
it.
2017-06-16 12:59:36 -05:00
Lyubo Marinov
5cffe328a5 Simplify the source code 2017-06-16 12:06:59 -05:00
Lyubo Marinov
1da49d86a1 Speed webpack up 2017-06-16 12:06:59 -05:00
Lyubo Marinov
0d7aea377a Increase ES6 utilization in webpack.config.js 2017-06-15 22:46:18 -05:00
Saúl Ibarra Corretgé
617df1c69c [Android] Remove no longer used gradle options 2017-06-15 10:38:08 -05:00
bgrozev
0b75f5a4d0 Commit from translate.jitsi.org by user bgrozev.: 348 of 349 strings translated (0 fuzzy). 2017-06-15 15:38:13 +00:00
Lyubo Marinov
f200b17a33 webpack 2 2017-06-15 10:09:48 -05:00
Saúl Ibarra Corretgé
2db574810b [RN] Fix target reference in iOS scheme 2017-06-15 09:51:04 -05:00
Saúl Ibarra Corretgé
c9a29153dd [RN] Lower Android target SDK version to 22
API level 22 is below 23 (aka Marshmallow), which included an overhaul in the
permissions system. React Native recommends 22 (it's the default when you create
a new app) and there have been reports when set higher [0] and [1].

This also fixes a critical bug, wherein Jitsi Meet wouldn't request permissions
for the camera and microphone.

Last, this change also allows us to get rid of the overlay checking code,
because it was only needed for API level 23 or higher.

[0]: https://github.com/facebook/react-native/pull/10479
[1]: https://github.com/facebook/react-native/issues/10587
2017-06-15 08:20:33 -05:00
Lyubo Marinov
25ec8ac6a7 Prepare for eslint 4 2017-06-14 22:17:35 -05:00
hristoterezov
c8c44d62ed fix: some exports to make it work with webpack 2 2017-06-14 19:37:13 -05:00
hristoterezov
4d329b510f ref: module.exports -> export for the ES6 modules 2017-06-14 19:37:13 -05:00
paweldomas
a30e880876 fix(AudioInputPreview): do not care about TPC
TraceablePeerConnection argument is lib-jitsi-meet internal and the app
does not need to care.
2017-06-14 10:21:11 -05:00
Leonard Kim
5d1087e464 fix(vertical-filmstrip): prevent scaling based on video count
Vertical filmstrip has a scrollbar to scroll through all remote
video thumbnails instead of scaling width and height to force all
thumbnails to display on screen. The scaling is not necessary in
vertical filmstrip mode and instead causes some UI spacing issues
with the video status label.

Also addressed a typo in "removeVideoWidth" near the area of the
changed logic.
2017-06-13 15:17:55 -05:00
Leonard Kim
da99f3b939 feat(remote-video): convert remote video menu to react
- Create new React Components for RemoteVideoMenu and its
  buttons
- Remove existing menu creation from RemoteVideo
- Refactor RemoteVideo so all function binding happens once in
  the constructor, removing the need to rebind when updating
  the RemoteVideoMenu
- Allow popover to append and remove React Components from itself
- Refactor popover so post-popover creation calls are broken out and
  popover removal behavior is all done in one function.
2017-06-13 14:54:19 -05:00
Leonard Kim
73dd7440d0 fix(remote-video): update remote video menu if it exists
In RemoteVideo, creation of the RemoteVideoMenu (popover) is
skipped if in filmstrip only mode. However, updateRemoteVideoMenu
is called by other components, and that tries to access popover
and will error.

Add a defensive check for now as filmstrip is being rewritten
for react.
2017-06-13 14:54:03 -05:00
Leonard Kim
1a87ee5f93 fix(filmstrip): adjust filmstrip remote videos positioning
- For horizontal mode, remove extra spacing created by borders
  around local video and remote videos.
- For vertical mode, ensure remote videos grow only to fill the
  parent height.
2017-06-13 14:52:43 -05:00
hristoterezov
9d953f18c2 fix(device_selection_popup): On Firefox 2017-06-13 14:08:50 -05:00
bgrozev
be3ed0cc25 Commit from translate.jitsi.org by user bgrozev.: 349 of 349 strings translated (0 fuzzy). 2017-06-13 14:53:07 +00:00
Lyubo Marinov
ee3cd30b59 [RN] Fix call/ring overlay 2017-06-10 18:07:52 -05:00
Lyubo Marinov
ca94563c51 [RN] Coding style
The files styles.js are used (pretty much) on React Native only and each
of them exports 1 name. Export it as default to cut down on source code.
2017-06-10 18:07:51 -05:00
Lyubo Marinov
9591226be6 [R] Fix call/ring overlay
There were regressions in the form of JS errors in Filmstrip introduced
when the call/ring overlay was rewritten in React.
2017-06-10 18:07:51 -05:00
Lyubo Marinov
718de31e04 [RN] Fix video in audion-only mode
When entering audio-only mode, VideoBridge is instructed to stop sending
remote videos. However, if the instruction fails because DataChannels do
not work, for example, then the app continues to display the remote
videos. Even though they're received in the case of such a failure, no
videos are to be displayed in audio-only mode.
2017-06-10 18:07:51 -05:00
Lyubo Marinov
4b2add7aa6 [Android] Allow multiple JitsiMeetViews 2017-06-10 03:34:11 -05:00
Lyubo Marinov
10e5e0fdf5 [iOS] Allow multiple JitsiMeetViews 2017-06-09 19:17:01 -05:00
Lyubo Marinov
5f64ccb97d [RN] Naming 2017-06-09 14:51:31 -05:00
Saúl Ibarra Corretgé
4687c1f465 [RN] Add ability to skip the welcome page
Also expose this in the native SDKs.
2017-06-09 14:10:10 -05:00
Saúl Ibarra Corretgé
79d51bc379 feat(App): remove obsolete config prop
It's obsolete now, since config is handled in Redux. Also add a "defaultUrl"
prop so emdedding applications can select what the default base URL is.
2017-06-09 14:10:10 -05:00
hristoterezov
893d08d614 fix(device_selection_popup): URL 2017-06-09 13:23:32 -05:00
Lyubo Marinov
a5cd118550 [Android] Naming 2017-06-09 10:55:14 -05:00
Saúl Ibarra Corretgé
a266a71999 [RN] Add JitsiMeetViewAbstractListener to Android SDK 2017-06-09 09:57:06 -05:00
Saúl Ibarra Corretgé
be8694f93e [RN] Remove duplicated font on Android
Copy it from the main fonts directory instead.
2017-06-09 16:05:27 +02:00
Saúl Ibarra Corretgé
a1a394ad0b doc: update mobile building instructions for iOS 2017-06-09 09:55:40 +02:00
Lyubo Marinov
e5cc8cd32b [RN] locationURL instead of inviteURL
The value of inviteURL is derived from locationURL by removing the hash
and query/search params in order to make it fit for display and/or
public purposes. The Jitsi Meet SDK consumers do not fall into that
category and our intention is to provide them with the URL they used
with JitsiMeetView.openURL(URL) anyway.

Also rewrites to remove repetition. I'm not saying the new source code
is better really but at least I got to examine it and comment on some of
its weaknesses.
2017-06-09 00:03:23 -05:00
Lyubo Marinov
01b397faef Fixes a jsdoc/require-description-complete-sentence warning 2017-06-09 00:03:23 -05:00
Lyubo Marinov
90466183d6 [RN] Consistency in Jitsi Meet SDK for Android 2017-06-09 00:03:23 -05:00
Saúl Ibarra Corretgé
84463d8cf0 [RN] Add workaround for loading different URLs on Android
Changing the props from native (Java) code was only added in 0.45, so add a
workaround until we get to updating our React Native dependency.
2017-06-09 00:03:23 -05:00
Saúl Ibarra Corretgé
a075f24000 [RN] Add conference events to native SDKs
The current implementation doesn't use the API and Transport modules. This is
due to the fact that they are too tied to APP at the moment, which is web only.

Once API is refactored and moved into the Redux store this will be adjusted,
though it's unlikely that the lowest level React Native module (ExternalAPI)
changes drastically.

This commit also introduces a stopgap limitation of only allowing a single
instance for JitsiMeetView objects on both Android and iOS. React Native doesn't
really play well with having multiple instances of the same modules on the same
bridge, since they behave a bit like singletons. Even if we were to use multiple
bridges, some features depend on system-level global state, such as the
AVAudioSession mode or Android's immersive mode. Further attempts will be made
at lifting this limitation in the future, though.
2017-06-09 00:03:23 -05:00
Saúl Ibarra Corretgé
ddea60efe9 [RN] Add initial Jitsi Meet SDK for Android
Dames en heren, welcome to Jitsi Meet SDK for Android, the Jitsi Meet library
for Android.

The Jitsi Meet SDK encapsulates React Native and all the dependencies Jitsi
Meet has so other aopplications can integrate it easily.

Unlike iOS, creating "fat" libraries is not allways (if at all) possible on
Android, however, effort was put into making the integration as easy as
possible.

While React Native can be embedded in native applications, I don't think it was
designed to be embedded as part of an Android library, hidden away from the
application using it. This surfaced as a number of issues which had to be
addressed specifically due to our use-case:

- Activity lifecycle methods must be linked with the React Native engine, so the
  library provides wrapper methods.
- Custom fonts have to be manually added as assets, since the provided gradle
  script doesn't work properly in a library target.
- The RN packager has to be manually triggered since the gradle script will no
  longer do it for us.

At this stage, the Jitsi Meet application is just a small single activity
application which uses the Jitsi Meet SDK to create a single activity which
represents the entire application. Events and external conference handling are
forthcoming.

PS: Yours truly would like to add that it was a lot more fun to work on the iOS
side of things.
2017-06-09 00:03:23 -05:00
hristoterezov
5a14d1ed6c fix(deviceselectionpopup): the name and position of device selection button for film strip only mode 2017-06-08 21:46:58 -05:00
Leonard Kim
9837181d5d fix(popover): z-index should be greater than toasts
Currently, the JitsiPopover z-index will cause it to display below
any toast notifications so this changes modifies the z-index
values so JitsiPopover is higher than the notification toasts.
2017-06-08 09:37:40 -05:00
Saúl Ibarra Corretgé
f6ccacb7df [RN] Fix regression handling ToolbarButton onPress
Introduced in
96e83989a5
as part of a refactor + feature.
2017-06-08 09:36:58 -05:00
Saúl Ibarra Corretgé
a0054ada08 [RN] Simplify signing embedded iOS frameworks 2017-06-08 01:13:12 -05:00
Lyubo Marinov
2251a17f96 [RN] Consistency in Jitsi Meet SDK for iOS
1. Aligns the project structure of Jitsi Meet SDK for iOS with that for
   Android for better comprehension.

2. The command `react-native run-ios` uses the last Xcode project or
   workspace in the list of these sorted in alphabetical order. Which
   limits our freedom in naming. Thus having only an Xcode project in
   the root directory of the iOS project structure gives us back the
   freedom in naming.

3. Allows the Podspec to work for the app project in addition to the sdk
   project because we need Crashlytics in the app which is integrated
   via Cocoapods as well.

4. Further removes references to JitsiKit in the source code for the
   sake of consistent naming.
2017-06-08 01:13:12 -05:00
Saúl Ibarra Corretgé
b1100a9c7a [RN] Add initial Jitsi Meet SDK for iOS
Ladies and gentlemen, allow me to introduce you to Jitsi Meet SDK for iOS, the
mobile SDK which powers Jitsi Meet.

The goal is to encapsulate the entire React Native app into a framework / SDK
and offer an API for native (ObjC or Swift) applications to embed the Jitsi
conferencing experience.

While React Native can be embedded in native applications, I don't think it was
designed to be embedded as part of a framework, hidden away from the application
using it. This surfaced as a number of issues which had to be addressed
specifically due to our use-case:

- Universal / deep linking needed to be wrapped to avoid the embedding app from
  linking with RN.
- The bundle URL had to be manually constructed, since RN considers that all
  resources are in the main bundle, but in case of a framework that is not the
  case.
- Custom fonts had to be manually loaded, since UIAppFonts doesn't work on the
  framework's Info.plist file.
- The RN packager has to be manually triggered since the React project will no
  longer do it for us.
- Custom App Transport Security rules were added since the builtin way to do it
  modifies the framework's Info.plist, which is useless in this case.

At this stage, the Jitsi Meet application is just a small single view
application which uses the Jitsi Meet SDK to create a single view which
represents the entire application. Events and external conference handling are
forthcoming.
2017-06-08 00:50:00 -05:00
damencho
8e3dfcf0d0 Handles Enter key to submit dialogs.
If there is no focused node inside the dialog we focus any of the available buttons, submit button is first.
2017-06-07 17:06:48 -05:00
damencho
bf7415e6b5 Updates field-text dependency version and add autofocus prop. 2017-06-07 17:06:48 -05:00
Lyubo Marinov
6072978454 [RN] Fix the bundling broken by unnecessary dependencies 2017-06-07 16:19:57 -05:00
Lyubo Marinov
5a74080839 Comply w/ coding style 2017-06-07 13:27:45 -05:00
Lyubo Marinov
89862cbea9 [RN] Fix exports/imports of nonexistent files 2017-06-07 13:27:44 -05:00
Leonard Kim
0451e7c9e7 fix(conference): ensure avatar url and email changes act on strings
Both conference.changeLocalEmail and conference.changeLocalAvatarUrl
are exposed in the external api. It is possible for users to then
pass in non-string values. To make it more visibly obvious of the
error and to prevent script errors, convert whatever is passed in
into a string.
2017-06-07 13:25:24 -05:00
Leonard Kim
2e08815644 fix(video): use onplaying to ensure video height and width are set
When using onplay in firefox, the event fires before data is flowing,
which can cause videoHeight and videoWidth to be 0 during resizing.
By using onplaying, there is some assurance data is being received,
so videoHeight and videoWidth should be set.
2017-06-07 10:44:05 -05:00
hristoterezov
96e83989a5 feat(device_selection): Implement popup 2017-06-07 09:23:40 -05:00
paweldomas
2c002c875d fix(SmallVideo): remove invalid character
Removes ' character which should not be there.
2017-06-06 11:15:39 -05:00
paweldomas
e38dd0e9d3 ref(LargeVideoManager): remove unused method
'_isConnectionActive' is not used anymore
2017-06-06 11:13:02 -05:00
paweldomas
a2a2a583de doc(LargeVideoManager): invalid default
The default for 'show' argument of 'showRemoteConnectionMessage' is
undefined (unspecified).
2017-06-06 11:13:02 -05:00
paweldomas
a3ba28f507 ref(LargeVideoManager): simplify
Simplify 'updateParticipantConnStatusIndication' by getting rid of
'showMessage' argument.
2017-06-06 11:13:02 -05:00
paweldomas
6865b03338 fix(RemoteVideo): broken grey avatar
Also moves the logic about participant connection status from SmallVideo
to RemoteVideo, because it doesn't make sense for local videos.
2017-06-06 11:13:02 -05:00
paweldomas
12d7e61362 feat(VideoLayout): add ninja icon
Add ninja icon which wil be displayed when user's connection status is
inactive.

Apply grey filter only for interrupted state.

Do not use isLastN directly, but check ParticipantConnectionStatus.
2017-06-06 11:13:02 -05:00
paweldomas
5c5864e94a font(jitsi): add ninja icon 2017-06-06 11:13:02 -05:00
Lyubo Marinov
d437f3db03 [React] Call/ring overlay
Rewrite the non-React RingOverlay into the React Component CallOverlay
in a way which makes it easier to port to React Native.
2017-06-06 00:11:39 -05:00
Lyubo Marinov
409255f056 [React] Cross-platform Components
Introduce certain React Components which may be used to write
cross-platform source code such as Audio like Web's audio, Container
like Web's div, Text like Web's p, etc.
2017-06-06 00:11:39 -05:00
virtuacoplenny
d1ea29beeb fix(large-video): ensure switch to local video when all others leave (#1607)
* fix(large-video): ensure switch to local video when all others leave

This handles the case where User A and B are in a call and B has
no audio or video. Then B leaves. User A would see User B left
on large video. Instead, User A should see self view on large.

* squash: always update large video if it is empty

* squash: add largeVideo check for filmstrip only mode
2017-06-05 18:47:26 -05:00
yanas
a59e691ba8 Removes redux compose utility function 2017-06-05 13:31:38 -05:00
Lyubo Marinov
a4a13bed84 Invite URL w/o (hash & query/search) params 2017-06-01 21:04:31 -05:00
Lyubo Marinov
ec454d1da0 Move ConferenceUrl.inviteURL into React and redux 2017-06-01 21:04:31 -05:00
Lyubo Marinov
e2afb4c7e7 Move ConferenceUrl.reload into React and redux 2017-06-01 21:04:31 -05:00
Lyubo Marinov
87b488a12b Comply w/ coding style 2017-06-01 21:04:31 -05:00
Lyubo Marinov
4dc658c270 Fix 'Missing JSDoc comment  require-jsdoc' 2017-06-01 21:01:50 -05:00
jitsi-pootle
a5d8b4a933 New files added from translate.jitsi.org based on templates 2017-06-01 01:19:43 +00:00
yanas
1d34a50d2f Fix raise hand toggled state 2017-05-31 15:31:06 -05:00
yanas
d1737745c2 Fix raise hand toggled state 2017-05-31 07:50:18 -05:00
Lyubo Marinov
ec2e6525ac Fix jsdocs 2017-05-31 00:53:53 -05:00
Lyubo Marinov
8882d9c3b6 Upgrade NPM dependencies/packages 2017-05-31 00:53:53 -05:00
Aaron van Meerten
6d1a018864 include local.html file meant to define local analytics properties (#1612)
* include local.html file meant to define local analytics properties
include all specified local analytics properties in analytics events

* use new variable name jitsiDeploymentInfo to represent more general use as local deployment information collection
2017-05-30 13:37:43 -05:00
Lyubo Marinov
320e67baa1 Fix the initialization of the (external) API
The counterpart of the external API in the Jitsi Meet Web app uses the
search URL param jwt to heuristically detect that the Web app is very
likely embedded (as an iframe) and, consequently, needs to forcefully
enable itself. It was looking at whether there was a JSON Web Token
(JWT) but that logic got broken when the JWT support was rewritten
because the check started happening before the search URL param jwt was
parsed.
2017-05-30 09:38:18 -05:00
Lyubo Marinov
69f8cf7836 Fix the disabling of the Welcome page 2017-05-26 19:23:23 -05:00
Saúl Ibarra Corretgé
5304660e14 [RN] Polyfill Symbol 2017-05-26 16:37:22 -05:00
Leonard Kim
538da92eae fix(large-video): attempt to update large video on all connection updates
It is possible for a connection update to come during a large video update,
between its promises, which would result in the update NOT triggering another
large video update because an update is in progress. This can cause a state
where a connection status overlay is displayed over a video in a state that
does not match the actual video state, like the restoring overlay displaying
on active video.
2017-05-26 15:31:34 -05:00
paweldomas
4b487e3c89 config: enable P2P by default 2017-05-26 12:59:24 -05:00
damencho
70e1bfc6b8 Enables vertical filmstrip by default. 2017-05-26 12:58:52 -05:00
Aaron van Meerten
d65295db8b Merge pull request #1611 from jitsi/fix-token-pubkey
Fixes using public key to verify tokens.
Tested in production.
2017-05-25 17:29:06 -05:00
damencho
34be638fca Fixes using public key to verify tokens. 2017-05-25 16:45:08 -05:00
damencho
2a0973a897 Fixes chat when on join we receive messages.
Fixes a TypeError: Cannot set property 'innerHTML' of undefined
                    at o (Chat.js:61)
                    at Object.updateChatConversation (Chat.js:271)
that is thrown when joining a conference with messages already set to the chat. The error used to remove a strophe handler and chat was not working at all for those seeing the error.
2017-05-25 15:22:49 -05:00
Leonard Kim
42b51e3c5c fix(1-on-1): remove torture test workaround, add new tests 2017-05-25 15:15:52 -05:00
Leonard Kim
ff0e392ca8 fix(device-selection): Update parameters from audio level change callback 2017-05-25 13:28:27 -05:00
virtuacoplenny
1da95d2e37 fix(large-video): trigger update after timeout for 1-on-1 calls (#1599)
* fix(large-video): trigger update after timeout for 1-on-1 calls

Currently no video switch happens if a user joins audio and video
muted. For example, User A is in a call and User B joins with no
mic and camera. User A will keep seeing local video on large video.
The fix is to set a timeout, of a somewhat arbitrary 3 seconds, to
show User B on large video.

* SQUASH: wrap videoElement access in if

* SQUASH: split out remoteVideoActive logic
2017-05-25 11:50:52 -05:00
Lyubo Marinov
b7c4ebba84 Web Filmstrip & LargeVideo React Components
We've had Filmstrip & LargeVideo React Components on mobile/React Native
from the start. We didn't have them on Web (because the rewrite in React
is not complete yet). However, that led to differences in the React
Component Conference on Web and mobile. In an effort to get closer to
merging the React Component Conference on Web and mobile, introduce the
React Components Filmstrip & LargeVideo on Web even if a minimal
render-only form at this time.
2017-05-25 11:44:35 -05:00
Lyubo Marinov
66ababc6c8 Comply w/ codying style: naming, formatting, etc. 2017-05-25 10:56:08 -05:00
yanas
e128c03f56 Merge pull request #1602 from virtuacoplenny/lenny/video-label-hover
fix(video-label): Show darker background on hover
2017-05-24 20:58:49 -05:00
virtuacoplenny
d5b40280ab fix(vertical-filmstrip): different label animations for filmstrip states (#1596)
* fix(vertical-filmstrip): different label animations for filmstrip states

Instead of one timing for sliding the video status label left and right,
have different timings depending on the filmstrip state. To facilitate
triggering the different animations, add more classes to the labels
that need to move that specify the filmstrip state.

- Faster transition if focusing on self-view with videos present so
  the label does not overlap videos transitioning from 0 opacity.
- Transition delay when de-focusing on self-view with videos present
  so videos have time to go away before the label moves over them.
- Maintain no movement if there are no videos, regardless of
  filmstrip toggle state.
- Different delays for when the filmstrip is being toggled visible
  and hidden if there are remote videos visible.

* SQUASH: remove remote videos count

* SQUASH: add docs to scss
2017-05-24 20:57:55 -05:00
Leonard Kim
346980308b fix(video-label): Show darker background on hover 2017-05-24 15:32:58 -07:00
yanas
abd30e0269 Merge pull request #1601 from jitsi/disable-speakerstats-filmstrip-only
Disables speaker stats in filmStrip only mode.
2017-05-24 16:50:39 -05:00
yanas
cbe395f463 Merge pull request #1600 from virtuacoplenny/lenny/filmstrip-1-on-1
fix(filmstrip-only): hide video label, always show remote thumbnails
2017-05-24 16:14:04 -05:00
damencho
59d4523d72 Disables speaker stats in filmStrip only mode. 2017-05-24 16:10:42 -05:00
Leonard Kim
27f968e753 fix(filmstrip-only): hide video label, always show remote thumbnails 2017-05-24 13:23:21 -07:00
yanas
a2ebc169e4 Merge pull request #1598 from virtuacoplenny/lenny/status-label-z
fix(video-label): modify z-index and cursor
2017-05-24 14:52:11 -05:00
yanas
d10cc66036 Merge pull request #1595 from virtuacoplenny/lenny/move-to-corner
fix(vertical-filmstrip): do not move recording label if not in the co…
2017-05-24 14:21:06 -05:00
Leonard Kim
3d0226ccd0 fix(video-label): modify z-index and cursor
- Change z-index so any tooltips that display over the label,
  particularly in vertical filmstrip mode, actually hide the label.
- Change the cursor to be a pointer so the label looks clickable.
- Remove unused audio-only-label styling.
2017-05-24 10:33:26 -07:00
Leonard Kim
acb4d12928 fix(vertical-filmstrip): do not move recording label if not in the corner 2017-05-23 17:14:48 -07:00
yanas
600f7bcf7b Merge pull request #1594 from jitsi/fix-scrollbars
Re-styles scrollbars
2017-05-23 16:26:29 -05:00
yanas
1ff89c5a1c Merge pull request #1587 from virtuacoplenny/lenny/vertical-filmstrip
vertical filmstrip and 1-on-1 mode
2017-05-23 16:23:11 -05:00
Leonard Kim
56b12bd969 fix(vertical-filmstrip): move video status labels back to top right
The video status labels, which include recording and hd status,
have been moved back to the top left while in vertical filmstrip
mode. The following had to be done:
- Remove styling to move the labels to the bottom left
- For VideoStatusLabel, move filmstrip remote video count, toggle
  state, and 1:1 state into redux.
- Use middleware to emit out to the Recording label when the
  filmstrip changes.
- Create an empty Filmstrip file for web and identify the existing
  Filmstrip component as native.
2017-05-23 13:28:27 -07:00
Leonard Kim
2333249b05 feat(1-on-1): Initial implementation
- Expose an api on Filmstrip to hide the remote videos container, which does so
  by adding a class
- Modify listeners for user join, leave, share video to call the api
- Hide the container when there is 1 or fewer remote participants
- Always show the container if self view is in focus
- Show the container if the number of remote thumbnails does not match the count
  of remote participants, such as the case of sharing a video
2017-05-23 13:28:27 -07:00
Leonard Kim
aabe641047 feat(vertical-filmstrip): Initial implementation
- Add a class to the body when in vertical filmstrip mode
- Override styles as necessary to support the mode
- Add an option to make tooltips display from the left
- Move the HD Label to the bottom left
- Move the remote video menu to the bottom left, move the mute
  icons to the bottom right
- Scale the local video's height and width to fit the filmstrip
2017-05-23 13:28:27 -07:00
yanas
dc5a29a976 Re-styles scrollbars 2017-05-23 15:17:46 -05:00
Leonard Kim
82ecfac4ee fix(filmstrip): Separate remote videos and local video
The 1:1 call UI and vertical filmstrip act on remote videos
while leaving local video alone. To facilitate acting only on
remote videos, place remote videos into their own container element.
2017-05-23 09:07:41 -07:00
hristoterezov
23fea490aa Merge pull request #1585 from jitsi/dial-out-ui
Adds dial-out UI.
2017-05-23 10:29:23 -05:00
yanas
1d60300016 Merge pull request #1592 from virtuacoplenny/lenny/slider-width
fix(volume-slider): modify positioning so slider fits popup width
2017-05-23 10:15:36 -05:00
yanas
6536f82559 fix(Dialog.web.js): Fixes okDisabled state not taken into account 2017-05-23 09:00:40 -05:00
yanas
4464a11314 Changes telephone icon 2017-05-23 09:00:40 -05:00
yanas
2855ea1500 Adds dial-out UI. 2017-05-23 09:00:40 -05:00
Leonard Kim
258dc594dd fix(volume-slider): modify positioning so slider fits popup width 2017-05-22 14:16:06 -07:00
Leonard Kim
a1476c68f1 fix(audio-only): remove button from toolbar and set label cursor
Audio only mode will be toggleable only from the VideoStatusLabel,
so remove AudioOnlyButton from the toolbar and delete the component
itself. As a result of the button being removed, a truthy check in
VideoStatusLabel was also removed to ensure it will display as it
is now the only way to toggle audio only mode. Also set the cursor
on VideoStatusLabel to always be default, so it can never show the
text cursor.
2017-05-22 14:46:05 -05:00
damencho
bf163d221c Adds download source archive link to the README. 2017-05-22 11:28:04 -05:00
yanas
7900b9c294 Merge pull request #1577 from virtuacoplenny/lenny/invite-conference-number
feat(invite): Add conference id to dial-in numbers display
2017-05-22 11:08:18 -05:00
jitsi-pootle
6a17d50423 New files added from translate.jitsi.org based on templates 2017-05-22 14:54:57 +00:00
Leonard Kim
9e7f8d0e16 SQUASH: use redux to get config 2017-05-19 16:07:13 -07:00
Leonard Kim
3a99ef512e SQUASH: add comment to styling and alpha order 2017-05-19 15:41:42 -07:00
Leonard Kim
a14886031f SQUASH: changes based on feedback: rename, handle error 2017-05-19 15:35:47 -07:00
Дамян Минков
ec881e0fd0 Merge pull request #1580 from jitsi/fix-isguest-typeerror
Fix TypeError: Cannot read property 'isGuest' of undefined
2017-05-18 13:10:28 -05:00
Leonard Kim
80989147ad feat(video-label): Add dropdown for toggling audio only
Add a menu that displays when hovering over VideoStatusLabel. The menu's
display is controlled by CSS. As the existing AudioOnlyLabel no longer needs
needs its own tooltip, it has been removed and label display logic has been
moved into VideoStatusLabel.
2017-05-18 13:09:34 -05:00
Lyubo Marinov
3c31a60b32 Fix TypeError: Cannot read property 'isGuest' of undefined 2017-05-18 11:53:45 -05:00
Lyubo Marinov
db59b45076 Upgrade NPM dependencies/packages 2017-05-17 16:41:52 -05:00
Leonard Kim
0f0ff6788c fix(config): Bring back minHDHeight 2017-05-17 16:13:16 -05:00
Leonard Kim
47c07c2e76 feat(invite): Add conference id to dial-in numbers display
DialInNumbersForm has been modified to display a conference id to be used for
dialing into the conference. The changes include:
- Requesting the conference id and adding the conference id to the redux store
- Displaying the conference id in DialInNumbersForm
- Modifying the copy behavior to support copying the new message to clipboard
- DialInNumbersForm does not display until all ajax requests have completed
  successfully. This eliminates the need for the REQUESTING state.
2017-05-17 10:25:07 -07:00
Leonard Kim
896dcde2b2 fix(video-label): Listen to resize events on video elements when possible 2017-05-17 11:54:22 -05:00
Leonard Kim
a88409bbfa fix(video-label): Display based on video dimensions in LargeVideoManager
In its current implementation, the VideoStatusLabel shows HD based on peer
connection stats. These stats will be available on temasys browsers soon but
will remain unavailable on Firefox, which does not collect height/width stats.
To support VideoStatusLabel showing cross-browser, move the high-definition
detection out of stat sniffing and instead check the video element itself using
an interval in LargeVideoManager. (An interval was used because the temasys
video object does not support the onresize event.) Also, add a cleanup path from
conference.web to LargeVideoManager to remove the interval.
2017-05-17 11:54:22 -05:00
damencho
b8189a31ad Updates quick-install with mention of jvb behind nat and link to config. 2017-05-16 16:26:47 -05:00
damencho
e90d09a6d9 Updates recording instructions in manual install doc. 2017-05-16 16:19:31 -05:00
damencho
9fb49cb59b Updates default config, avoids storing muc data on prosody restart. 2017-05-16 16:04:26 -05:00
Любомир Маринов
77ab05823d Merge pull request #1576 from jitsi/remote_control_enabled
fix(remotecontrol): Controller enabled property
2017-05-16 12:49:17 -05:00
hristoterezov
28ff188f96 fix(remotecontrol): Controller enabled property 2017-05-16 12:45:39 -05:00
Saúl Ibarra Corretgé
bac191f96c [RN] Rename jitsi-meet-react to jitsi-meet 2017-05-16 12:38:36 -05:00
yanas
e1a9487896 Merge pull request #1562 from virtuacoplenny/lenny/filmstrip-disable-hiding
fix(filmstrip): Disable keyboard shortcut for hiding videos
2017-05-16 11:59:44 -05:00
damencho
9e728e4b25 Fixes crashing jwt util for anonymous domains.
Room name verification crashes when we have a configured anonymousdomain as it doesn't have any token extracted data. It is safe to skip this check as room creation is verified by jicofo and we have the option restrict_room_creation to admin users.
Removes obsolete print when updating jitsi-meet-tokens.
2017-05-16 08:21:46 -05:00
bgrozev
06d2c9fb7b Merge pull request #1573 from saghul/enable-ff-ds
fix(screen-sharing) Enable it by default on Firefox
2017-05-15 15:14:49 -05:00
Дамян Минков
63c862d925 Updates docs report issue part. 2017-05-15 10:57:31 -05:00
Saúl Ibarra Corretgé
a96a70869d fix(screen-sharing) Enable it by default on Firefox
Starting with Firefox 51 the extension is no longer mandatory, so make sure the
feature is not desabled by default.
2017-05-15 12:15:00 +01:00
damencho
ede5be119f Skips changing prosody config on upgrading jitsi-meet-tokens package. 2017-05-12 16:12:15 -05:00
Saúl Ibarra Corretgé
b7c57d306a Merge pull request #1565 from virtuacoplenny/lenny/defensive-classnames
fix(toolbox): Defensively check classNames when mapping button attrib…
2017-05-12 10:10:04 +02:00
Leonard Kim
816eef1702 fix(toolbox): Defensively check classNames when mapping button attributes 2017-05-11 14:35:33 -07:00
Leonard Kim
92eeba5392 fix(filmstrip): Disable keyboard shortcut for hiding videos 2017-05-10 14:04:09 -07:00
Lyubo Marinov
2f3706bd37 [RN] Simplify
There were getDomain, setDomain, SET_DOMAIN, setRoomURL, SET_ROOM_URL
which together were repeating one and the same information and in the
case of the 'room URL' abstraction was not 100% accurate because it
would exist even when there was no room. Replace them all with a
'location URL' abstraction which exists with or without a room.

Then the 'room URL' abstraction was not used in (mobile) feature
share-room. Use the 'location URL' there now.

Finally, removes source code duplication in supporting the Web
application context root.
2017-05-09 16:31:21 -05:00
Lyubo Marinov
e6f6884c36 [RN] Support JSON Web Token (JWT)
Make 'Add jwt module to react' work on mobile.
2017-05-09 00:21:14 -05:00
Ilya Daynatovich
ab5c2e9ded Add jwt module to react 2017-05-09 00:21:14 -05:00
Ilya Daynatovich
4f72225372 Add set room url action 2017-05-09 00:21:13 -05:00
Ilya Daynatovich
3af0976a43 Beautify URLProcessor 2017-05-09 00:21:13 -05:00
Ilya Daynatovich
96b1f0ca74 Create config util 2017-05-09 00:21:13 -05:00
damencho
32ea2161eb Hides sip dialout button if configured to show it for non guest users. 2017-05-08 15:34:32 -05:00
damencho
c8ab1b9892 Catches promise errors, returned when error is received after dial cmd. 2017-05-08 15:34:32 -05:00
damencho
61e637a639 Adds prosody module to filter incoming rayo iqs based on jwt token.
Returns forbidden error message if module is enabled and the user sending a dialout rayo command is not authenticated through jwt token or is not allowed to enter the room name from the rayo iq.
2017-05-08 15:34:32 -05:00
damencho
7d94d3fd1a Updates room size API to work with multiple domains.
Checks for a parameter named subdomain and if it exists, adds it to the roomname as used in multiple domain mode ([subdomain]roomname@conference.example.com).
Moves muc_size module to per-host module and adds token verification.
2017-05-08 11:23:13 -05:00
damencho
88a58a057e Removes not needed parameter token in process_and_verify_token. 2017-05-08 11:23:13 -05:00
damencho
4bb51516bb Adds domain name verification and multidomain support.
Adds option to enable/disable domain checking, disabled by default. Domain verification for multiple domains depends on new option muc_mapper_domain_base.
2017-05-08 11:23:13 -05:00
damencho
0805b9e99e Removes disableRoomNameConstraints option.
This option is useless, as if we do not need to verify room name, we just disable the mod_token_verification module.
2017-05-08 11:23:13 -05:00
damencho
82b27b45fe Moves token related code into util so it can be reused. 2017-05-08 11:23:13 -05:00
yanas
166fb1d13f Merge pull request #1509 from virtuacoplenny/lenny/web-audio-only
Audio only mode for web
2017-05-05 11:52:15 -05:00
Leonard Kim
ef9f145cb5 fix(video-layout): always honor local video changes
During the implementation of starting as video muted, a check
was put in place to update the local thumbnail view container's
known local track only if the track was not muted. This can
cause the container to become desynced with the current local
track.(Ideally in the future all state would be in redux so this
manual syncing would not be needed.) Removing the if-muted
check seems to cause no side-effects and makes implementation of
device-switch-while-audio-only a lot simpler because new tracks
can be muted and used immediately.
2017-05-05 09:27:59 -07:00
Leonard Kim
929bc8b8b9 fix(device-selection): do not reuse tracks in previews
Device selection has live previews that reuse the current local
audio and video tracks for the sake of internet explorer. This
means when the local video was muted, device selection would
show a muted message. It is preferred to show a live preview
even when muted.

The changes include:
- Passing device ids into DeviceSelectionDialog, not tracks.
- Setting default selected devices to use for live previews.
- Removing all checks in DeviceSelectionDialog involving local tracks.
- Catching and displaying errors when creating a live video preview.
2017-05-05 09:27:59 -07:00
Leonard Kim
d24d5d95dd fix(audio-only): combine video status labels
Move the HD label into the newly renamed VideoStatusLabel
component. That way it cannot be possible for the audio only
label and the HD label to display simultaneously.
2017-05-05 09:27:59 -07:00
Saúl Ibarra Corretgé
9ba3a1c4ff feat(conference): add audio only mode
Audio only mode can be used to save bandwidth. In this mode local video is muted
and last N is set to 0, thus disabling all remote video.

When this mode is enabled avatars are shown.
2017-05-05 09:27:59 -07:00
yanas
1bcdbd1d96 Merge pull request #1552 from virtuacoplenny/lenny/ff-avatar-inlay
fix(filmstrip): Set avatar container height within inlay
2017-05-05 11:25:08 -05:00
Leonard Kim
8ada06cfe3 fix(filmstrip): Set avatar container height within inlay
In the filmstrip inlay, the avatar container holds the avatar
image. The image is set to 100% height, so it displays entirely
in the container. However, this does not adjust the horizontal
space created by the image in firefox, leaving whitespace to the
right of the avatar. The fix is to set the container height to
100% so that all its content will fit inside, automatically
adjusting the space created by the image width.
2017-05-04 11:46:10 -07:00
yanas
bf0be99366 Merge pull request #1551 from jitsi/smileys-fix
Fixes #1549, toggles smileys menu.
2017-05-04 11:28:27 -05:00
damencho
653f1dae4c Fixes #1549, toggles smileys menu. 2017-05-04 11:19:46 -05:00
hristoterezov
d91340166d Remote control - display the authorization dialog in meet (#1541)
* fix(react/participant): store display name in redux

* feat(remotecontrol): Add option to display the authorization dialog in meet

* feat(remotecontrol): Enable ESLint and Flow
2017-05-03 18:57:52 -05:00
Дамян Минков
d694e8df86 Updates README, removing "Discuss" section. 2017-05-03 13:00:46 -05:00
Lyubo Marinov
75a486ff96 Merge branch 'abstract_transport2'
Additionally, attempt to move closer to the coding style adopted by
react/.
2017-05-02 17:40:16 -05:00
Leonard Kim
48626ee71b fix(toolbox): move default toolbox buttons logic to web only
toolbox/functions has functions that are specific only to web,
specifically defaultToolbarButtons. This has caused the native
build to attempt to bring in a web dependency which leads to a
build error. The fix for now is splitting web functions from
native functions to resolve the build error.
2017-05-02 12:01:54 -05:00
hristoterezov
b297aa3f3a ref(remotecontrol): Changing the format of the messages 2017-05-02 09:47:07 -05:00
hristoterezov
dfc94ff144 ref(iframe_API): Changing the format of the outgoing messages for API.js 2017-05-01 15:59:18 -05:00
yanas
1ffa7be4e1 Merge pull request #1531 from virtuacoplenny/lenny/invite-phone-numbers
feat(invite): include dial-in numbers in the invite modal
2017-05-01 15:39:38 -05:00
Leonard Kim
d7cccacc12 feat(invite): include dial-in numbers in the invite modal
Create a new React Component for displaying a list of dial-in
numbers. The Component will fetch the numbers from a new
numberRetreviewUrl key/value set in config. If not present in
config, the Component will not be displayed.
2017-05-01 12:47:35 -07:00
hristoterezov
96bde3ff44 fix(trnasport): Names of the arguments for Transport and backend
Now the backends are working with 'message' and Transport is
working with 'request', 'response' and 'event'.
2017-04-28 16:03:36 -05:00
hristoterezov
b49c1c6ba2 fix(transport): Code style issues and enableLegacyFormat param bug
Improves naming.
Fixing typos.
enableLegacyFormat param was working like disableLegacyFormat.
Improves the structure of transport/index.js
2017-04-28 15:24:20 -05:00
Lyubo Marinov
e9dc9c47a9 Coding style
For lack of a better word/phrase, I'm calling all changes coding style.
I'm targeting readability through naming and syntax.
2017-04-28 10:41:08 -05:00
hristoterezov
3e055c1201 ref(external_api): To use transport module 2017-04-28 10:41:08 -05:00
hristoterezov
54388b6a0a ref(remotecontrol): To use transport module instead of API 2017-04-28 10:41:08 -05:00
hristoterezov
0dff35c0db feat(transport): Implement transport module
The transport module will be handling all external app
communication.
2017-04-28 10:41:08 -05:00
yanas
6c676f8d5f Merge pull request #1538 from virtuacoplenny/lenny/device-selection-disabled
fix(device-selection): do not create a dropdown menu if disabled
2017-04-26 17:16:28 -05:00
Leonard Kim
4e95dbf0e5 fix(device-selection): do not create a dropdown menu if disabled
AtlasKit DropdownMenu cannot be disabled, unlike Single Select.
The result is the isDisabled prop was not being honored. The
workaround is returning only the trigger element for the dropdown
and styling it to look like the dropdown is disabled. The text
for disabled device selection was changed along the way to fit
into the trigger.
2017-04-26 14:29:32 -07:00
Guus der Kinderen
00b4176bf8 Non-clickable watermarks without links
Watermarks can be used to link to an external site by configuring a URL.
However, the URL is optional. When it is not set, the watermark should
not be clickable. This prevents users from reloading the room by
clicking on a watermark (caused by an HTML anchor element without an
href).
2017-04-26 10:54:32 -05:00
Lyubo Marinov
7836fd1990 Introduce features/base/logging
The functionality around logging including logging_config.js i.e.
loggingConfig and the other classes and/or functions that initialize
loggers for Jits Meet truly deserves a feature of its own. Start getting
in that direction on both Web and mobile by introducing
features/base/logging and bringing loggingConfig to mobile.
2017-04-23 23:30:53 -05:00
Lyubo Marinov
92e765ea21 Introduce features/base/config
The config object defined by lib-jitsi-meet is not used by
lib-jitsi-meet only, jitsi-meet respects its values as well.
Moreover, jitsi-meet defined classes and/or functions which manipulate
that config object. Consequently, it makes sense to move the config
object and the associated classes and functions in a dedicated feature.
2017-04-23 15:18:41 -05:00
paweldomas
16d9ef5f1c [RN] export RTCIceCandidate
Required for P2P.
2017-04-23 13:54:12 -05:00
Lyubo Marinov
bce1610794 Simplify, comply w/ coding style
Rename setStateProperties and setStateProperty to assign and set,
respectively. Inspired by Object.assign, _.assign, and _.set.
2017-04-22 17:57:08 -05:00
Lyubo Marinov
1f16233afa Upgrade NPM dependencies/packages 2017-04-22 17:27:16 -05:00
yanas
e804548b22 Merge pull request #1529 from virtuacoplenny/lenny/device-overflow-stopgap
fix(device-selection): convert trigger element to a div
2017-04-21 17:05:33 -05:00
yanas
dc994173d7 Merge pull request #1500 from virtuacoplenny/whitelist-user-select
fix: do not apply user-select none to inputs
2017-04-21 13:12:07 -05:00
Leonard Kim
283140d16a fix: do not apply user-select none to inputs
Safari will prevent proper input behavior when user-select none
is applied. It prevents such actions as putting in a room lock
password or setting a room lock password. Other browsers allow
selecting on inputs while user-select is none.
2017-04-21 11:10:47 -07:00
Leonard Kim
03155c63ae fix(device-selection): pass translation key into the translate function 2017-04-21 08:58:34 -07:00
Leonard Kim
17fc28b020 fix(device-selection): convert trigger element to a div
AtlasKit Dropdown was recently updated to support fitting the
width of its container. However, AtlasKit Button, the trigger
element currently used for the dropdowns, does not fit the width
of AtlasKit Dropdown and stll has text overflowing out of its
button when there is an iconBefore prop passed in. Instead of
using AtlasKit Button, use a div and mimic the button look. This
allows the "button" to fit the container width and can display
ellipsized text within itself.
2017-04-20 19:34:02 -07:00
Saúl Ibarra Corretgé
607bef8d68 Merge pull request #1518 from jitsi/fix_removeListeners
fix(external_api): JS error in removeListeners and simplifies dispose
2017-04-20 23:47:15 +02:00
hristoterezov
55f5ceb85a fix(external_api): JS error in removeListeners and simplifies dispose 2017-04-20 15:08:13 -05:00
Saúl Ibarra Corretgé
7be8e3e1e9 Merge pull request #1523 from virtuacoplenny/lenny/mute-overlay-black
fix(device-selection): show black background only when video muted
2017-04-20 15:16:53 +02:00
Lyubo Marinov
55c3f5ddff Comply w/ coding style
@virtuacoplenny, the changes of this commit are not necessarily in
source code that you introduced in
https://github.com/jitsi/jitsi-meet/pull/1499 but I saw violations in
files modified in the PR which I had to read in order to understand the
PR.
2017-04-19 20:56:19 -05:00
Leonard Kim
44b81b20e3 feat: convert invite dialog to react and redux
Converting the invite modal includes the following:
- Creating new react components to display InviteDialog. The
  main parent components are ShareLink and PasswordOverview,
  the later handles displaying lock state and password editing.
  These components do not make use of atlaskit as the component
  for input does not yet support readonly, so for consistency
  within the modal content no atlaskit was used.
- Using redux for keeping and accessing lock state instead of
  RoomLocker.
- Publicly exposing the redux action lockStateChanged for direct
  calling on lock events experienced on the web client.
- Removing Invite, InviteDialogView, and RoomLocker and references
  to them.
- Handling errors that occur when setting a password to preserve
  existing web funtionality.
2017-04-19 20:41:23 -05:00
yanas
4097be1908 Merge pull request #1524 from jitsi/overlay_on_top
fix(overlay): Make the overlays on top of everything
2017-04-19 17:42:02 -05:00
hristoterezov
f6ef727573 fix(overlay): Make the overlays on top of everything 2017-04-19 17:09:22 -05:00
Leonard Kim
1045cb56fe fix(device-selection): show black background only when video muted
On certain modal dimensions, the black background of the video
preview could peek through, making it look like the video has a
black line. The change is to remove the black background from
showing by default and having it only display when the video is
muted. Also, the video preview dimension stylings have been
changed to facilitiate smoother size adjusting with modal size
changes.
2017-04-19 14:51:51 -07:00
Lyubo Marinov
6c0ad4966e [Android] Go back to minSdkVersion 16 2017-04-19 13:55:44 -05:00
Saúl Ibarra Corretgé
5d50792a56 [RN] Make AudioMode more resilient on Android
Some devices may give an error stating that INTERACT_ACROSS_USERS_FULL
permission is neeced. This permission can only be achieved by signing the
application with the same key as the system, which is never going to happen so
deal with it by catching any exceptions setting the mode may cause and failing
as gracefully as we can.

Ref:
http://stackoverflow.com/questions/34172575/audiomanager-setmode-securityexception-on-huawei-android-4
2017-04-19 13:55:44 -05:00
Saúl Ibarra Corretgé
0c16842e0d [RN] Fix full-screen mode when a dialog is opened on Android
When a dialog is opened on Android, full-screen mode is exited but we (the app)
know nothing about this. Make sure we re-enter full-screen mode once a dialog is
closed, if the conditions to be in such mode are still met.
2017-04-19 13:55:44 -05:00
Saúl Ibarra Corretgé
d9538845bc [RN] Set iOS status bar style to light
It will render as white in dark backgrounds. This is what FaceTime does and what
we already do on Android. The problem with the default look (black text) is
noticeable in audio only mode, since the background is dark.
2017-04-19 14:07:20 +02:00
Saúl Ibarra Corretgé
7f1579d96d [RN] Update iOS Xcode project file 2017-04-19 14:06:10 +02:00
yanas
3674694d12 Merge pull request #1514 from virtuacoplenny/lenny/video-preview-mute-string
fix: change string displayed when previewing a muted video input
2017-04-18 16:33:50 -05:00
Leonard Kim
3e518e8040 feat: convert device selection modal to use AtlasKit Dropdown
Instead of using AtlasKit Single-Select, use Dropdown. Dropdown
differs in that an icon can be specified for the trigger element,
whereas Single-Select currently supports icons for all elements,
and Dropdown can show all options incuding the already-selected
option.

This change does introduce the issue of the trigger element not
taking up 100% width of the parent. Supporting such would involve
overriding AtlasKit CSS. The compromise made here was to do a
generic override of max-width so the trigger elements at least
stay within the parent and aligning the trigger elements to the
right.
2017-04-18 16:08:03 -05:00
bgrozev
33c92a31bf Merge pull request #1516 from jitsi/remove_cfg_log_stats
fix(config.js): remove unused 'logStats'
2017-04-18 16:01:49 -05:00
paweldomas
5e2e7902ce fix(config.js): remove unused 'logStats'
This config option is not used anymore.
2017-04-18 14:27:00 -05:00
Leonard Kim
f9585430bb fix: set a default color for text in modal dialogs
Some atlaskit components, such as field-text, inherit text color.
This is a problem with components that are white as they will
inherit $defaultColor, which is a light gray. So instead, for
the atlaskit modal, set a color for all the form content so it
can be inherited instead.
2017-04-18 14:14:26 -05:00
Leonard Kim
19de32e206 feat: support directly setting dialog title text
Dialog does not currently support displaying dynamic strings
for titles, only static strings listed for translation. Accept
a new prop that explicitly states it is for setting the title
and have the web dialog prefer it over the titleKey.
2017-04-18 14:14:26 -05:00
Leonard Kim
a82bc1df64 fix: honor updates of the local user role before conference join
When the prosody setting has muc_allowners, everyone joins as a
moderator. In this case, the local user will not be set as a
moderator in the redux store as the USER_ROLE_CHANGE event will
trigger with the local user id before the redux store has set
the actual local user id--something that happens on
CONFERENCE_JOINED. The fix is to explicitly signal the local user
role has changed to the redux store, which follows the
implementation of pre-existing web logic.
2017-04-18 14:14:04 -05:00
Дамян Минков
c34e841710 Merge pull request #1505 from cmrd-senya/prosody-default-fixup
Explicitly set c2s_require_encryption to false
2017-04-18 13:50:25 -05:00
Leonard Kim
a5c78be52c fix: change string displayed when previewing a muted video input
Device Selection re-uses the local video track for its preview.
When displaying Device Selection while video muted, the text
"muted" displays within the video preview, but some translations
may mistake this to mean audio muted. The text has been changed
to be explicit about video mute. This is a temporary solution;
at some point Device Selection should not re-use the local track
except for IE, the one browser that cannot get multiple tracks
from the same video input.
2017-04-18 10:21:41 -07:00
Дамян Минков
edbbaef26f Merge pull request #1513 from jitsi/fix_change_display_name
fix(conference): Change display name when ChatRoom is not created yet
2017-04-18 11:08:10 -05:00
hristoterezov
bdd133309d fix(conference): Change display name when ChatRoom is not created yet 2017-04-18 10:35:14 -05:00
cmrd Senya
71da05dc96 Explicitly set c2s_require_encryption to false
Jitsi Meet doesn't seem to work with c2s_require_encryption set to true.
c2s_require_encryption is false by default. However it is possible that
in some Prosody configurations it is overriden by a global config to be
true. In that case Jitsi Meet might not work out-of-box. So let's set it
explicitly to be sure it is correct.
2017-04-16 21:19:47 +03:00
Christopher Edsall
f1cbafb097 Spelling in main.json
Fix spelling/grammar for  micConstraintFailedError and cameraConstraintFailedError
2017-04-15 17:41:28 +12:00
Lyubo Marinov
3db557e2c9 Move roomnameGenerator.js out of features/base/util
Over time features/base/util became a bucket where people seemed to dump
just about anything they couldn't think of a better place for. That's a
trend I don't like encouraging. Given that roomnameGenerator.js is
currently used in features/welcome only, I'm fine with moving it there
for the greater good.
2017-04-14 13:14:02 -05:00
Lyubo Marinov
a8b3177e20 Move timeUtil.js out of features/base/util
Because timeUtil.js computes hours, minutes, and seconds out of a single
time/duration using three separate functions, I wouldn't recommend using
it, especially reusing it. That's why I'm even making the functions
private to their current use location.
2017-04-14 13:14:02 -05:00
Lyubo Marinov
8e6f043586 Move interceptComponent.js out of features/base/util
I don't like the file/function name, I'm not excited about the
complexity of the logic it implements, and it's definitely a reusable
piece worthy of being called a utility.
2017-04-14 13:12:47 -05:00
damencho
5163472392 Merge pull request #1502 from BeatC:fix-dialpad-button 2017-04-14 11:46:32 -05:00
damencho
965c811025 Disable dialpad button for now.
Disable the button, till we need it, UI is fixed and it is tested that everything works from jitsi-meet, through lib-jitsi-meet and through jigasi.
2017-04-14 11:44:09 -05:00
Ilya Daynatovich
adc2260b63 Add dialpad icon 2017-04-14 14:21:16 +03:00
yanas
4ef84054dc Merge pull request #1481 from virtuacoplenny/device-picker-settings
fix: open device selection if it is the only available setting
2017-04-13 13:46:08 -05:00
Leonard Kim
7db1c9b8eb fix: open device selection if it is the only available setting
Move logic to open device selection outside of SettingsMenu so
it can be called independently by either SettingsMenu or by
the settings button itself if no other settings but devices will
be displayed.
2017-04-13 11:43:06 -07:00
Lyubo Marinov
ae06a6ce41 Fix Recording regression caused by 'React Toolbar'
Saúl Ibarra Corretgé reported that Recording shows an error dialog
stating "There was an error connecting to your camera". Hristo Terezov
and Yana Stamcheva traced that the problem originates in
da4425b5c0
and, more specifically, is caused by a different order of execution due
to the move of the invocation of the function Recording.init.

The solution is to bring back the execution location of Recording.init.
2017-04-12 14:10:00 -05:00
bgrozev
0316450ee2 Merge pull request #1494 from saghul/doc-browserify
doc: remove mention to Browserify from README
2017-04-12 11:07:06 -05:00
Saúl Ibarra Corretgé
281305147b doc: remove mention to Browserify from README 2017-04-12 18:01:58 +02:00
Saúl Ibarra Corretgé
ef41e32af5 deps: fix ordering in package.json 2017-04-12 16:31:07 +02:00
Saúl Ibarra Corretgé
4ef8172f8d Merge pull request #1487 from jitsi/p2p_callstats
CallStats log level 'info'
2017-04-12 10:48:43 +02:00
Lyubo Marinov
5106f9f958 Process do_external_connect.js through webpack 2017-04-11 18:29:18 -05:00
yanas
2c61d8d94b Merge pull request #1486 from virtuacoplenny/lenny/modal-button-font
fix: set button font-size for modals
2017-04-11 16:18:16 -05:00
Lyubo Marinov
bc8c8c1bb9 Comply w/ coding style 2017-04-11 14:40:03 -05:00
Lyubo Marinov
cbc08eb96d Merge remote-tracking branch 'origin/race_conditions' into api_eslint 2017-04-11 14:31:05 -05:00
Lyubo Marinov
f4de65a647 Comply w/ coding style 2017-04-11 14:30:00 -05:00
hristoterezov
0f42f18100 ref(iframe_api): ESLint support for API.js 2017-04-11 13:31:07 -05:00
paweldomas
a9d9dc6658 log: CallStats log level 'info'
Reduces the log level for the CallStats module to 'info', because recent
changes are adding a lot of debug logs.
2017-04-11 13:11:20 -05:00
Leonard Kim
07cd6a8b88 fix: set button font-size for modals
Atlaskit at times will have localized styling for font-size and
sometimes will not. The button component will inherit its
font-size whereas selectors have localized font-size of 14px. For
consistency, the cancel/submit buttons on the atlaskit modals
will also have 14px. The atlaskit story book examples also use
buttons with 14px font-size.
2017-04-11 10:35:59 -07:00
hristoterezov
ab62690b97 fix(iframe_api): toggle audio/video race condition
If toggle audio or video is executed too early and the local
tracks don't exist we fail to execute the operation. Now we store
the mute state and we are executing it after the tracks are
created
2017-04-11 12:22:04 -05:00
hristoterezov
e7a3ee477d fix(frame_api): toggle SS race condition
If toggle SS is executed too early and lib-jitsi-meet is not yet
initialized toggle SS will fail. Now we are storing the whether
SS is on or off and when lib-jitsi-meet is ready we are starting
SS if needed.
2017-04-11 12:19:28 -05:00
Lyubo Marinov
1ec06f4bf0 React (Native) optimizations/performance
Remove toolbar button and icon style literals from the render method of
Toolbox.native.js.

Additionally, comply w/ coding style.
2017-04-11 12:00:41 -05:00
Saúl Ibarra Corretgé
849f93375c [RN] Use a handset icon for audio-only mode button 2017-04-11 16:15:33 +02:00
Lyubo Marinov
35ba6cef4e React (Native) optimizations/performance 2017-04-10 19:16:35 -05:00
Lyubo Marinov
b0d63dae16 Comply w/ coding style 2017-04-10 19:14:14 -05:00
Saúl Ibarra Corretgé
14d394aed8 [RN] Add workaround for broken border radius on Android
For images < 80 of size forder radius doesn't work properly (it looks like a
square with rounded corders), however, using a duble sized radius does the
trick. Go figure.
2017-04-10 19:13:47 -05:00
Saúl Ibarra Corretgé
50fea44ce2 [RN] Use rounded avatars in the film strip
Also move (native) avatar style to film-strip styles, since  that's where it
applies. This is analogous to how the large-view avatar is styled.
2017-04-10 19:13:40 -05:00
yanas
98004c2328 Merge pull request #1447 from virtuacoplenny/device-picker
New device selection modal
2017-04-10 17:31:59 -05:00
Leonard Kim
eb7dda85a1 feat: replace device selection in settings with button for modal
Cleanup existing logic for displaying and updating device
selection settings in the settings menu. In its place
is a button to open the device selection modal.
2017-04-10 13:30:00 -07:00
Leonard Kim
2f994b1227 feat: new device selection modal with previews
The Device Selection modal consists of:
- DeviceSelection, an overly smart component responsible for
  triggering stream creation and cleanup.
- DeviceSelector for selector elements.
- VideoInputPreview for displaying a video preview.
- AudioInputPreview for displaying a volume meter.
- AudioOutputPreview for a test sound output link.

Store changes include is primarily storing the list of
available devices in redux. Other app state has been left
alone for future refactoring.
2017-04-10 13:30:00 -07:00
Lyubo Marinov
a9bdde193d Approach consistent filmstrip naming
We seemed to be using the names "film strip" and "filmstrip" (and,
consequently, their source code-conscious forms such as film-strip,
FilmStrip, etc.) In order to comply with our coding style which requires
a consistent one name for a given abstraction, choose one name and
rename the uses of the other name.

Wikipedia has a definition of a "filmstrip", I couldn't find a "film
strip". I guess our abstraction can be seen as what's described there.
When I google "film strip", I get results about "filmstrip" at the top.
That's why I chose "filmstrip".

Certain uses of "film strip" such as interfaceConfig.filmStripOnly and
in the external API I left untouched in an attempt to preserve
compatibility.

I wasn't sure whether CSS was tangled in compatibility so I made a
choice and renamed there was well.
2017-04-10 12:59:44 -05:00
yanas
2ffef3bdda Fixes toolbar tooltip positioning 2017-04-10 09:37:10 -05:00
yanas
77b789e26a Implements a filmstrip-only mode for the toolbox 2017-04-10 09:36:25 -05:00
yanas
031f2dfeb8 Fixes showToolbar in filmstrip-only mode and renames some funcs 2017-04-10 09:31:35 -05:00
yanas
cb0eef9edd Fix(SideContainerToggler.js): Check if the component exists on init 2017-04-10 09:31:35 -05:00
yanas
8be85de6ef Changes scss variable name 2017-04-10 09:31:26 -05:00
Lyubo Marinov
9cf7f2b83d Update NPM dependencies/packages 2017-04-09 21:10:39 -05:00
Lyubo Marinov
95667ef98e Revert "[RN] Use rounded avatars in the film strip"
This reverts commit 739298c782.
2017-04-09 12:58:27 -05:00
Lyubo Marinov
b211ce02a8 [RN] Increment short app version from 1.3 to 1.4
Now that Apple have approved build 1.3.204 for release in the App Store,
the short app version needs to be incremented; otherwise, no new builds
can be uploaded to TestFlight and, respectively, for release in the App
Store.
2017-04-09 12:00:58 -05:00
Saúl Ibarra Corretgé
739298c782 [RN] Use rounded avatars in the film strip 2017-04-09 11:55:57 -05:00
Saúl Ibarra Corretgé
a1da6bff1a [RN] Fix loading config from non-default domains
When a conference is to happen in a domain which is not the defaut, its config
is loaded and set. As part of this process, lib-jitsi-meet is disposed. Because
disposing is asynchronous, events happen in this sequence:

- set new config
- dispose lib (which effectively wipes the config)
- init lib

This results in the library to be initialized without the loaded config, which
was lost. This commit fixes that by delaying setting the config and
re-initializing the library until it was disposed.
2017-04-07 14:54:32 -05:00
Saúl Ibarra Corretgé
18a81d7ca0 [RN] Fix passing config options when creating a conference
JitsiConnection.initJitsiConference doesn't automatically pass the global config
options, so grab the config from the Redux store and pass it.
2017-04-07 14:53:52 -05:00
yanas
6f15903019 Merge pull request #1474 from jitsi/fix-profile-sidebar-translation
Fixes profile panel translation.
2017-04-06 16:06:55 -05:00
damencho
a26f7a1292 Fixes profile panel translation.
Strings are not translated when opening the profile side panel on FF. It was that we were creating profile panel html after i18n library had loaded and had translated the rest of the html.
2017-04-06 15:21:04 -05:00
Saúl Ibarra Corretgé
ae8c5287e4 [RN] Remove workaround for video mirroring on iOS
It's now natively supported:
https://github.com/oney/react-native-webrtc/pull/244
2017-04-06 14:17:12 -05:00
Lyubo Marinov
fd10362bef Comply w/ coding style 2017-04-06 12:09:01 -05:00
Lyubo Marinov
3af6cc53d1 Explain _ and UPPER_CASE naming 2017-04-06 11:45:13 -05:00
Saúl Ibarra Corretgé
54bb5f1879 [RN] Add ability to share the URL for a conference 2017-04-06 00:24:26 -05:00
Saúl Ibarra Corretgé
13e3375e8a [RN] Use proximity sensor when in audio-only mode
When the audio-only mode is enabled, turn on the proximity sensor to dim the
screen and disable touch controls when there is an object nearby.
2017-04-05 22:06:30 -05:00
Saúl Ibarra Corretgé
37157dc9e2 [RN] Use _switchCameras provided by lib-jitsi-meet
The functionality to use the react-native-webrtc custom API for fast switching
cameras was moved to JitsiLocalTrack in lib-jitsi-meet. Use that.

Ref: https://github.com/jitsi/lib-jitsi-meet/pull/444
2017-04-05 21:01:00 -05:00
Saúl Ibarra Corretgé
8fe3dce649 [RN] Add audio only mode for conferences
The behavior can be triggered with the toggleAudioOnly action, which is
currently fired with a button.

The following aspects of the conference will change when in audio only mode:

- local video is muted
- last N is set to 0 (effectively muting remote video)
- full-screen mode is exited
- audio mode is set to "audio chat" (default output is the earpiece)
- the wake lock is disengaged

One aspect not handled in this patch is disabling the video mute button while in
audio only mode. The user should not be able to turn back video on in that case.
2017-04-05 15:07:34 -05:00
damencho
4ec4c45a90 Adds a second parameter named domain to muc_size module.
Adds and the default conference. part where the muc module live in default deployments.
2017-04-05 13:41:21 -05:00
Saúl Ibarra Corretgé
19f46ed4f0 Merge pull request #1460 from jitsi/iframe_api_commands
IFrame API improvements
2017-04-05 17:37:02 +02:00
Lyubo Marinov
0e9509ae9b Comply w/ coding style 2017-04-05 04:01:57 -05:00
Saúl Ibarra Corretgé
618dedc58e [RN] Use participant connection status events instead of last N
They better represent if a participant has video available or not. There are
cases when even a participant in the last N set would not have video because it
disconnected momentarily, for example.
2017-04-05 01:41:46 -05:00
Saúl Ibarra Corretgé
623b7a8d6f [RN] Show avatar if a participant is not in last N 2017-04-05 01:21:23 -05:00
Saúl Ibarra Corretgé
7c76f124bf [RN] Use native API for toggling cameras
Use the curstom _switchCamera API provided by react-native-webrtc to toggle the
camera instead of destroying the current track and creating a new one.

_switchCamera is implemented at a low level, so the track perceives no changes,
thus being a lot faster and less involved since the capturer doesn't need to be
destroyed and re-created.

In addition, don't mirror the video for the back camera.

Ref: https://github.com/oney/react-native-webrtc/pull/235
2017-04-05 00:21:35 -05:00
Saúl Ibarra Corretgé
f5973e0eee [RN] Fix toggling camera
When a new local video track is created an associated video capturer is created
for it. The cause for the freezes seems to be creating mutliple tracks (which
come with a video capturer each). Fix this by first disposing of the previous
video track before creating the new one.

Ref:
https://github.com/oney/react-native-webrtc/issues/209#issuecomment-281482869
2017-04-05 00:20:17 -05:00
Lyubo Marinov
32634356a6 Simplify naming 2017-04-05 00:20:17 -05:00
Lyubo Marinov
6d0a07a4cd Remove unnecessary source code
Lib-jitsi-meet does not really implement isScreenSharing. Besides,
getCameraFacingMode will already make sure that the video track does not
represent a desktop stream.
2017-04-05 00:20:17 -05:00
damencho
e0b829f92f Revert "Adds a second parameter named domain to muc_size module."
This reverts commit e2e04e3f16.
2017-04-04 18:45:58 -05:00
Lyubo Marinov
684572bd05 Comply w/ coding style 2017-04-04 17:52:06 -05:00
hristoterezov
334eb5d423 feat(iframe_api): Add more ESLint rules 2017-04-04 17:20:08 -05:00
Ilya Daynatovich
bcbdaaa6ea Fix interface_config.js/interfaceConfig overriding
It got broken while rewriting the Web toolbar in React Toolbox. There is
a problem with the toolbars and how we construct the intialState of the
buttons. The _getInitialState() in the toolbox reducer gets the list of
buttons from interfaceConfig, but in fact interfaceConfig is meant to be
overriden in several very important cases. One of the cases being the
external API, which we use in several projects in production.
2017-04-04 17:00:39 -05:00
Leonard Kim
986939e501 deps: re-add babel-polyfill as a dependency
babel does not modify existing builtins by default. That means
some newer methods, such as Array.prototype.includes, may not
be available unless babel-polyfill is used.
2017-04-04 16:54:59 -05:00
hristoterezov
d416fd8c0f ref(iframe_api): Use EventEmitter 2017-04-04 16:45:47 -05:00
hristoterezov
78119df2db ref(iframe_api): Use ES6 2017-04-04 16:45:47 -05:00
damencho
e2e04e3f16 Adds a second parameter named domain to muc_size module. 2017-04-04 15:15:18 -05:00
Lyubo Marinov
d37468975c Fix ESLint warnings
JSDoc comments didn't follow the ESLint rule for properly formatted
sentences.

BTW, I'm not blind to the fact that PasswordRequiredPrompt and
RoomLockPrompt participated in a birthing of source code through
copy+paste. (If we do not copy+paste, we will not have to fix one and
the same source code such as comments  multiple times.)
2017-04-04 13:47:35 -05:00
damencho
589f77ef0e Adds prosody plugin that query existing rooms for information.
Queries room for their size or room particiapnt's information. Depends on luarocks net-url module.
2017-04-04 13:27:31 -05:00
Lyubo Marinov
1e2d88cd5d React Toolbox 2017-04-03 13:29:33 -05:00
Ilya Daynatovich
da4425b5c0 React Toolbar 2017-04-03 13:05:21 -05:00
Дамян Минков
0d7cb63978 Merge pull request #1459 from jitsi/move_p2p
fix: P2P address indication
2017-04-03 11:55:21 -05:00
Дамян Минков
2248560699 Uses new peer connection statuses to check and show different user msgs. (#1441)
* Uses new peer connection statuses to check and show different user msgs.

Checks for interrupted state of peer connection and shows appropriate messages. In case of inactive or restoring state a message is show to user that video was stopped on purpose. Removes some unused parameters from the event handlers about peer connection status change.

* Removes isParticipantConnectionActive.
2017-04-03 11:53:04 -05:00
yanas
3daae94bca Merge pull request #1379 from jitsi/base-react-dialogs-2
Password required dialog (web&native) and native room lock using basic react dialogs.
2017-04-03 10:52:33 -05:00
paweldomas
7299b76faf fix: P2P address indication
Moves the P2P indication next to the remote IP address
and rewords it to "(p2p)".
2017-04-03 10:04:53 -05:00
Saúl Ibarra Corretgé
673dc6e873 build: drop dependency on babel-pollyfill
It's no longer needed for building since Node >= 6 already has the minimum
required ES6 syntax. In addition, drop it from app.js since we use Webpack with
the Babel loader to transpile ES5 to ES6.
2017-04-03 09:48:44 +02:00
Saúl Ibarra Corretgé
9c544c0a4b eslint: remove no longer needed comment
jsdocs were added, remove old comment which no longer applies.
2017-04-03 09:26:57 +02:00
Ilya Daynatovich
8502ecc6d2 Allow wider Flow use
We (i.e. the jitsi-meet project) are using the haste module system on
Web as well, not only on React Native. Unfortunately, Flow does not
support .web.js by default. Override Flow's defaults to include .web.js
as well. Technically, we have .native.js as well so the choice of
.web.js may lead to errors. Practically though, it is a potential future
problem that we do not have at the time of this writing.

https://github.com/jitsi/jitsi-meet/pull/1397 will take advantage of the
wider Flow use. The PR in question is huge at the time of this writing.
In order to reduce it, I'm extracting changes not directly related to
React-ifying the Toolbar.
2017-03-31 15:02:32 -05:00
Ilya Daynatovich
74b5638d99 Add jsdocs, apply manual formatting
https://github.com/jitsi/jitsi-meet/pull/1397 (React Toolbar) is huge at
the time of this writing. In order to reduce it, I'm extracting changes
not directly related to React-ifying the Toolbar such as added jsdocs
and source code formatting.
2017-03-31 15:02:24 -05:00
Saúl Ibarra Corretgé
e8de8735e2 Merge pull request #1446 from jitsi/iframe_api_params
fix(iframe_api): Passing config params is not working
2017-03-31 17:47:14 +01:00
hristoterezov
dbcd19418c fix(iframe_api): Passing config params is not working 2017-03-31 11:40:55 -05:00
Saúl Ibarra Corretgé
a10f040df6 Merge pull request #1440 from jitsi/iframe_api_race_condition
Fix executeCommand race condition
2017-03-31 16:48:50 +01:00
Saúl Ibarra Corretgé
88a7ff891c Merge pull request #1449 from virtuacoplenny/lenny/styled-components
deps: include styled-components package for @atlaskit components
2017-03-31 09:25:42 +01:00
Leonard Kim
2b4db6c3bf deps: include styled-components package for @atlaskit components
@atlaskit components will all require styled-components in the
future. Including it now will remove the unmet peer
dependency warning during npm install and prevent future build
breakages that might occur from using a new @atlaskit component
that requires it.

Pull Request #1449
2017-03-30 14:05:01 -07:00
Saúl Ibarra Corretgé
4ddc426966 [RN] Move setting last N action to base/conference
This is in preparation for an upcoming "audio only mode" feature. Setting last N
will also be required for it, so this patch factors out the action and makes it
public so other modules can reuse it.

In addition, if the value is set to undefined the configured default value (or
-1 if absent) is picked.
2017-03-30 14:40:05 -05:00
damencho
309ce43e05 Moves native password required prompt to room lock feature.
Moves native dialogs to use dialog container. Implements native Dialog that uses react native Prompt.
2017-03-30 14:21:15 -05:00
damencho
61470c0d24 Moves web password required dialog to react. 2017-03-30 14:21:05 -05:00
virtuacoplenny
2301732e2d style: catalog all z-indexes and move toolbar down
All z-indexes found in css files have been moved into css
variables. If the z-index is used only once, the variable
name will be the same as the selector it is used in. If
the z-index is used multiple times, then the plain name
of $zindex# was used. This allowed a more confident
moving down of the toolbar so that the new modal dialog,
with z-index 500, could display on top of it.

#1436
2017-03-30 18:13:00 +01:00
virtuacoplenny
24ee8eb16a electron: add desktop picker
#1411
2017-03-30 17:58:31 +01:00
Lyubo Marinov
57065bb274 Update NPM dependencies/packages 2017-03-30 09:11:02 -05:00
hristoterezov
4ab4aa04da fix(avatar): Avatar properties not updated before local user join
Replaces changeAvatarID, changeAvatarURL and changeEmail with
participantUpdated action.
participantUpdated can be fired for local user without id. This
fixes the problem with updating the local user before the user
join the conference which results in fix for failing to execute
commands for avatarID, avatarURL and email right after the iframe
api creates the iframe with Jitsi Meet.
2017-03-29 10:23:07 -05:00
hristoterezov
0ed39dad63 fix(iframe_api): Display name command race condition
If executeCommand('displayName') is executed before Jitsi Meet
is fully initialized some listeners were not added and the
display name was not changed.
2017-03-29 10:23:07 -05:00
Saúl Ibarra Corretgé
08531ee675 Merge pull request #1443 from ibc/master
edge: Add userMedia.edgeGrantPermissions in lang/main.json
2017-03-29 13:35:51 +02:00
Iñaki Baz Castillo
e7140ffec7 edge: Add userMedia.edgeGrantPermissions in lang/main.json 2017-03-29 13:03:57 +02:00
damencho
c58c4b7938 Commit from translate.jitsi.org by user damencho.: 306 of 318 strings translated (0 fuzzy). 2017-03-28 21:29:17 +00:00
Lyubo Marinov
4e276471e5 Comply w/ coding style: consistency 2017-03-28 11:43:33 -05:00
Saúl Ibarra Corretgé
c5eac63da1 [RN] Move all mobile only features to a subdirectory 2017-03-28 09:36:00 -05:00
Saúl Ibarra Corretgé
866c6d0cf9 Merge pull request #1378 from saghul/doc-api-params
doc: improve docs on external API constructor parameters
2017-03-28 11:26:14 +02:00
Lyubo Marinov
165294bfb1 Comply w/ coding style 2017-03-27 22:50:47 -05:00
Saúl Ibarra Corretgé
2d5f0479bd [RN] Disable remote video while in the background
Set the video channel "last N" property to 0, thus making the client not receive
any remote video.
2017-03-27 22:11:13 -05:00
yanas
e8068cf5ac Merge pull request #1393 from jitsi/filmstrip_overlays
Filmstrip overlays
2017-03-27 14:54:45 -05:00
yanas
d0171cf386 Merge pull request #1435 from jitsi/fix-settings-translation
Fixes settings panel translation.
2017-03-27 14:52:01 -05:00
hristoterezov
3ae99ea0b9 feat(overlays): for filmstrip only mode 2017-03-27 14:20:25 -05:00
damencho
4e9450f200 Fixes settings panel translation.
Strings are not translated when opening the settings side panel. It was that we were creating settings panel html after i18n library had loaded and had translated the rest of the html.
The element selecting the current language was also not translated, which end up with no selection in the UI for the current language.
2017-03-27 13:54:14 -05:00
Saúl Ibarra Corretgé
dc2c49f4a9 doc: improve docs on external API constructor parameters 2017-03-27 12:17:32 +02:00
hristoterezov
c461e8b63c ref(overlays): Replace the abstract class for overlays with overlay frame component
In this case makes more sense to have overlay frame included in every overlay instead
of abstract class that implements the overlay frame and have to be extended by every
overlay. In addition, mapStateToProps isn't working well with inheritance.
2017-03-24 13:16:14 -05:00
Saúl Ibarra Corretgé
f47bc1163b Merge pull request #1432 from jitsi/speaker-stats-analytics-event
Sends analytics event every time speaker stats is open.
2017-03-24 16:35:59 +01:00
Дамян Минков
851be2d76e Merge pull request #1385 from saghul/make-update-deps
build: remove no longer needed Makefile rule
2017-03-24 10:13:47 -05:00
damencho
63034e6cba Sends analytics event everytime speaker stats is open. 2017-03-24 10:07:46 -05:00
Lyubo Marinov
84b9c5f5fd Coding style 2017-03-24 09:06:54 -05:00
Saúl Ibarra Corretgé
43c8fc6847 [RN] Fix mirroring video views on platforms with native support 2017-03-24 09:02:32 -05:00
Saúl Ibarra Corretgé
bc60bd23b2 build: remove no longer needed Makefile rule
- we now use pinned dependencies, so there is no need to run npm update
- AFAICT the node-sass workaround is no longer needed
2017-03-24 11:02:09 +01:00
damencho
e29120a9c1 Changes lastN event params to leaving and entering endpoint IDs.
Uses leavingIDs to more efficiently iterate over remote videos.
2017-03-23 09:32:27 -05:00
damencho
d383230532 Removes unused code. 2017-03-23 09:32:27 -05:00
bbaldino
9a46896600 Merge pull request #1402 from jitsi/p2p_ver2
P2P ver2
2017-03-22 16:10:13 -07:00
paweldomas
fba086134d add default STUN servers to config.js 2017-03-22 11:23:30 -05:00
paweldomas
2973364c02 feat(stats - show more): local p2p transport indication
Will show (direct) next to the UPD or TCP transport type if we're
running on P2P connection.
2017-03-22 11:23:30 -05:00
paweldomas
542bb7caed doc: add FIXME 2017-03-22 11:23:29 -05:00
paweldomas
fb47b6ae21 feat: add test P2P methods 2017-03-22 11:23:29 -05:00
hristoterezov
aeb301c8d5 feat(iframe_api): Add jwt token parameter 2017-03-21 22:34:44 +01:00
yanas
704e14f008 Handle last n in the client (#1389)
* Handle last n in the client

* fix(LargeVideoManager.js): Fixes check for low bandwidth. Needs more work

* fix(LargeVideoManager.js): Fixes the Shared Video test.

* fix(LargeVideoManager): Fix shared video view and remove last n checks.

* fix(LargeVideoManager): Fixes jsdoc comment

* fix(RemoteVideo): Fix connection status check

* fix(LargeVideoManager,RemoteVideo): Syntax errors
2017-03-21 12:14:13 -05:00
Lyubo Marinov
d1050d6b02 Update NPM dependencies/packages 2017-03-21 09:22:53 -05:00
Aaron van Meerten
afc96808e8 added support of static directory in debian install and Makefile for source package 2017-03-20 19:22:06 -05:00
Aaron van Meerten
dc2bae4ae1 Merge pull request #1420 from jitsi/static-content-folder
Moves all static content/files in a new folder.
2017-03-20 17:13:10 -05:00
damencho
1d7da21e48 Moves all static content/files in a new folder.
Also clears debian package from including *.js files from source roote folder, files which were not used.
2017-03-20 16:05:11 -05:00
Ilya Daynatovich
affd965d5d Remove an unnecessary file 2017-03-20 14:42:54 -05:00
Leonard Kim
989161159d Modal dialog for displaying dominant speaker times 2017-03-20 12:47:20 -05:00
Ilya Daynatovich
59a74153dc Toolbar notice as React Component 2017-03-20 11:27:08 -05:00
yanas
6690c269ef Merge pull request #1413 from jitsi/fix-missing-translation
Fixes wrong i18n key for somebody.
2017-03-20 11:03:45 -05:00
George Politis
b7fd10b905 Merge pull request #1412 from jitsi/framerate-update
Updates framerate using local statistics.
2017-03-17 17:17:24 -05:00
damencho
08e1cf1b7e Fixes wrong i18n key for somebody. 2017-03-17 16:43:43 -05:00
damencho
54d891afa7 Updates framerate using local statistics. 2017-03-17 16:10:45 -05:00
Aaron van Meerten
ae41782cd4 Merge pull request #1410 from jitsi/letsencrypt-script
Adds a script which install certificates from let's encrypt.
2017-03-17 15:53:52 -05:00
damencho
8591fe00b6 Adds a script which install certificates from let's encrypt.
The script looks for nginx, apache2 or jetty configuration and edits the first one found. Nginx and apache2 will be reloaded, while jvb will be stopped, configured and started again.
2017-03-17 14:49:10 -05:00
Saúl Ibarra Corretgé
92f58cb3c1 doc: add information about how to contribute
Inspired by the document at jitsi/jitsi.
2017-03-17 08:35:56 -05:00
Saúl Ibarra Corretgé
4ad98ca505 doc: fix typo 2017-03-17 10:48:38 +01:00
yanas
b9374bde6b Merge pull request #1383 from jitsi/fix-wrong-pass-on-auth
Fix incorrect password dialog message when using authentication.
2017-03-16 14:13:18 -05:00
pierreozoux
1ff29384b3 Add a network schemas
This is to help understanding how things are wired.
2017-03-16 11:30:28 -05:00
Saúl Ibarra Corretgé
4fc714ff10 lang: don't use "&nbsp;" for the default policy text
Firefox (at least) renders it verbatim.
2017-03-16 11:16:14 -05:00
damencho
51f0c8a388 Adds base dialog implementation. 2017-03-15 16:33:04 -05:00
damencho
d01a65f73d Fixes stats, using wrong object members in latest update. 2017-03-15 15:48:13 -05:00
damencho
65239f9ffe Adds frame rate to statistics bubble. 2017-03-15 13:31:42 -05:00
damencho
e5cefcce70 Updates transport type.
Updates transport type to show multiple values as we do for addresses and ports.
2017-03-14 15:51:11 -05:00
Ingo Bauersachs
8002b5ec6a Add Esperanto 2017-03-14 20:36:09 +01:00
jitsi-pootle
a575f5cc77 New files added from translate.jitsi.org based on templates 2017-03-14 19:44:37 +00:00
ibauersachs
ab3a80e076 Commit from translate.jitsi.org by user ibauersachs.: 317 of 317 strings translated (0 fuzzy). 2017-03-14 19:44:07 +00:00
ibauersachs
dda3798ba9 Commit from translate.jitsi.org by user ibauersachs.: 317 of 317 strings translated (0 fuzzy). 2017-03-14 19:43:50 +00:00
Lyubo Marinov
e6f906b9ca [RN] Fix undefined.avatarID in ParticipantView 2017-03-08 17:05:55 -06:00
hristoterezov
d74e43ddcc [RN] fix(Avatar): Match the implementation for web 2017-03-08 13:21:34 -06:00
Lyubo Marinov
23ddce122b Comply w/ coding style 2017-03-07 21:54:37 -06:00
hristoterezov
814bd26c07 feat(Avatar): Implement Avatar for web 2017-03-07 21:54:37 -06:00
damencho
2e4b39c19c Fixes loading jquery-i18next. 2017-03-07 17:30:20 -06:00
Дамян Минков
3ee65748bb Merge pull request #1382 from jitsi/load_error_handler_placeholder
Post load error handler
2017-03-07 17:29:30 -06:00
damencho
5f387737a1 Fix incorrect password dialog message when using authentication. 2017-03-07 16:42:36 -06:00
paweldomas
4fa800b87a feat(index.html): post load error handler
Adds a placeholder which allows to write a plugin for executing some
code after the "load error handler" is triggered. A function named
"postLoadErrorHandler" should be defined in one of
the "#include virtual" files.
2017-03-07 16:29:50 -06:00
Emil Ivov
9338b3cf94 Adds links to mobile builds 2017-03-07 15:44:10 -06:00
Lyubo Marinov
45e09af692 react-native 0.42.0 2017-03-07 15:09:39 -06:00
yanas
9d32f48ab8 [IOS Assets] Fixes launch screen 480x3 image 2017-03-07 13:12:26 -06:00
Lyubo Marinov
290e7baead Stick to the exact package versions for the direct dependencies 2017-03-02 21:46:43 -06:00
Любомир Маринов
e780ae00d0 Merge pull request #1360 from jitsi/move_avatar
ref(avatar): Move Avatar and ParticipantView to base/participants
2017-03-02 21:17:41 -06:00
hristoterezov
9ea224412d ref(avatar): Move Avatar and Participant view to base/participants 2017-03-02 16:57:43 -06:00
ibauersachs
cd8ae07698 Commit from translate.jitsi.org by user ibauersachs.: 317 of 317 strings translated (0 fuzzy). 2017-03-02 21:36:45 +00:00
Ingo Bauersachs
433a73e13d Add Norwegian Bokmal 2017-03-02 22:14:06 +01:00
jitsi-pootle
1e558f4da6 New files added from translate.jitsi.org based on templates 2017-03-02 21:21:41 +00:00
Lyubo Marinov
aef6e33c91 [RN] Fix remote JS debugging 2017-03-01 21:33:49 -06:00
Lyubo Marinov
acd83ede2f [RN] Third-party ES6 Symbol ponyfill 2017-03-01 21:31:43 -06:00
Lyubo Marinov
bd51613e62 [RN] Support the for...of statement in lib-jitsi-meet 2017-03-01 21:30:21 -06:00
ibauersachs
246cb39003 Commit from translate.jitsi.org by user ibauersachs.: 306 of 306 strings translated (0 fuzzy). 2017-03-01 21:07:11 +00:00
Lyubo Marinov
3b54c527b6 Remove obsolete source code 2017-02-28 23:22:03 -06:00
Lyubo Marinov
18368fefaa Comply w/ coding style 2017-02-28 23:22:02 -06:00
damencho
c361e1e31a Translate react strings.
Split language detectors to be web/native dependent. Take care of strings that contain html.
2017-02-28 13:16:42 -06:00
damencho
e3d4152e32 Adds react-i18next and its provider to react.
Adds translate function with default namespaces and options.
2017-02-28 13:13:47 -06:00
damencho
d861ba1876 Moves translation to react and use i18next language detectors. 2017-02-28 13:13:47 -06:00
George Politis
c942017b73 Merge pull request #1341 from saghul/doc-disableRtx
config: switch default disableRtx to false
2017-02-28 08:52:33 -06:00
Lyubo Marinov
743d12e326 Default to mobile app promotion 2017-02-28 00:18:52 -06:00
Lyubo Marinov
d371a3d5fd Fix TypeError: undefined is not an object 2017-02-28 00:18:52 -06:00
Lyubo Marinov
e1056126e6 Fix TypeError: undefined is not an object 2017-02-28 00:18:51 -06:00
Lyubo Marinov
72c267fbf3 Fix the human-readable text 2017-02-28 00:18:51 -06:00
Lyubo Marinov
0ed85b9d25 Replace features/unsupported-browser SET_UNSUPPORTED_BROWSER with features/base/lib-jitsi-meet SET_WEBRTC_READY
The error raised by JitsiMeetJS.init() is already in the state of
features/base/lib-jitsi-meet so it's not a good design to store the same
error in the state of features/unsupported-browser.
2017-02-28 00:18:51 -06:00
Ilya Daynatovich
a8877d82b6 Rename style component; Use of status codes instead of flags in conference init 2017-02-28 00:18:51 -06:00
Ilya Daynatovich
8896b0adf3 Fix problem with dialogs 2017-02-28 00:18:50 -06:00
Ilya Daynatovich
60b14e9b45 Some fixes mentioned in the PR 2017-02-28 00:18:50 -06:00
Ilya Daynatovich
631e853b40 Update register/unregister listeners logic of some components in the old app 2017-02-28 00:18:50 -06:00
Ilya Daynatovich
b409c8cc2f Fix reload regression 2017-02-27 21:50:21 -06:00
Ilya Daynatovich
905212b109 Enable flow for written code 2017-02-27 21:50:20 -06:00
Ilya Daynatovich
05b7df26e6 Add no mobile app component 2017-02-27 21:50:20 -06:00
Ilya Daynatovich
1268afd3f8 Added unsuported browser and plugin required pages 2017-02-27 21:50:20 -06:00
Lyubo Marinov
c1b9b7a623 Prevent undefined JitsiMeetJS 2017-02-27 21:35:34 -06:00
Lyubo Marinov
0b9160fb75 LIB_DID_DISPOSE, LIB_DID_INIT, LIB_WILL_DISPOSE, LIB_WILL_INIT 2017-02-27 16:45:53 -06:00
George Politis
93c9419392 Merge pull request #1362 from bgrozev/no-extension-on-ff-52
config: Don't require an extension for firefox >=52.
2017-02-27 16:36:31 -06:00
Boris Grozev
6121bcf171 config: Don't require an extension for firefox >=52.
Starting with firefox 52, no extension is required for screensharing.
See https://wiki.mozilla.org/Screensharing
2017-02-27 16:08:13 -06:00
Lyubo Marinov
702144180c Be consistent, simplify the source code 2017-02-25 19:00:35 -06:00
Lyubo Marinov
d2b2f98941 Fix typo 2017-02-25 18:58:23 -06:00
Lyubo Marinov
ec95956e25 [RN] Prepare for modifications to unsupported-browser 2017-02-24 13:08:49 -06:00
Lyubo Marinov
d6d7ce1b67 [RN] Move preferH264 where it will be in effect (in the future) 2017-02-24 12:59:30 -06:00
bgrozev
4cb36b0a5d Merge pull request #1337 from saghul/cleanup-adaptive-simulcast
cleanup: remove old adaptive simulcast config option
2017-02-24 11:43:22 -06:00
George Politis
2b3aea76a9 doc: Nukes influxdb.md because influx support has been nuked. 2017-02-23 17:22:06 -06:00
Lyubo Marinov
f50a31b4e8 [RN] Simplify the source code 2017-02-23 17:14:04 -06:00
Saúl Ibarra Corretgé
b226c3aca3 [RN] Fix loading config.js from URLs with a non-standard port
`host` contains the hostname:port portion, whereas `hostname` is just the
hostname, not including the port.
2017-02-23 17:14:04 -06:00
yanas
4979666a89 Merge pull request #1342 from jitsi/filmstriponly_transparent
fix(filmstriponly): Set the background to transparent
2017-02-23 16:11:35 -06:00
yanas
c9636f85b9 Merge pull request #1314 from virtuacoplenny/lenny/audio-slider
Volume slider for remote participant audio elements
2017-02-23 15:48:52 -06:00
hristoterezov
436bc87a86 fix(overlay): comments after review 2017-02-23 13:50:09 -06:00
Lyubo Marinov
e89c2b242d Android plugin for Gradle 2.2.3
Recent versions of the Android plugin for Gradle started to automatically
download the SDK build tools dependency if it is not installed already.
So it is no longer necessary to have the developer of the Android app
install the SDK build tools dependency in advance.
2017-02-23 13:14:19 -06:00
Leonard Kim
02b26a65bb Volume slider for remote participant audio elements 2017-02-23 09:01:40 -08:00
Дамян Минков
6a3e4bb59f Merge pull request #1311 from saghul/resources
Move miscellaneous files to resources
2017-02-23 06:42:15 -08:00
Saúl Ibarra Corretgé
b01ad360da Move miscellaneous files to resources 2017-02-23 10:01:19 +01:00
Ilya Daynatovich
c7f3740099 Fix IE redirect problem 2017-02-22 23:36:06 -06:00
Дамян Минков
554595acd7 Merge pull request #1348 from jitsi/restyle-range-inputs
Re-styles range inputs for Chrome and FF.
2017-02-22 21:44:46 -06:00
yanas
ee4ddd5446 Fixes indentation 2017-02-22 17:14:09 -06:00
yanas
ebab617a12 Re-styles range inputs for Chrome and FF. 2017-02-22 16:49:56 -06:00
Lyubo Marinov
bc5d92a452 [RN] Prefer H.264 2017-02-22 08:28:19 -06:00
Saúl Ibarra Corretgé
2f388dfb6a Fix warning about missing key prop
When rendering using a for loop each child whould have a key prop.
2017-02-22 12:08:12 +01:00
Boris Grozev
73a0197eb2 doc: Adds a note on installing ios-deploy on MacOS 10.11. 2017-02-21 14:43:59 -06:00
hristoterezov
b6990e9e5d fix(filmstriponly): Set the background to transparent 2017-02-21 13:45:46 -06:00
Lyubo Marinov
26e119bfc2 Comply w/ coding style 2017-02-21 13:33:25 -06:00
Saúl Ibarra Corretgé
9f866ae608 config: switch default disableRtx to false 2017-02-21 20:02:55 +01:00
Saúl Ibarra Corretgé
023359b9d2 [RN] Avoid rendering Container if not visible
This solves the issue of view clipping on Android, plus it seems to be the RN
convention unless the views are very large and memory hungry.
2017-02-21 11:13:36 -06:00
bgrozev
2128d047e1 Merge pull request #1339 from saghul/fix-doc-links
doc: fix markdown link syntax in mobile docs
2017-02-21 10:49:27 -06:00
Saúl Ibarra Corretgé
a89349c5b9 doc: fix markdown link syntax in mobile docs 2017-02-21 17:37:56 +01:00
Lyubo Marinov
d109b8beb6 Comply w/ coding style 2017-02-21 09:39:59 -06:00
Saúl Ibarra Corretgé
9b40572921 [RN] Fix Android immersive mode when coming from the background
Fixes an issue where immersive mode would be enabled when coming back from the
background on the welcome screen.

Re-fixes c57e713, which was not correct.
2017-02-21 09:13:30 -06:00
Lyubo Marinov
aaf7a38cce Detail comment 2017-02-21 09:09:07 -06:00
Saúl Ibarra Corretgé
1ed0759a50 [RN] Temporarily disable camera toggling button
It doesn't work properly and gives a very bad user experience. Disble it until
all underlying issues in react-native-webrtc are ironed out.
2017-02-21 08:33:31 -06:00
Saúl Ibarra Corretgé
213b73da6e cleanup: remove old adaptive simulcast config option 2017-02-20 15:46:41 +01:00
Saúl Ibarra Corretgé
5b6985fc5c [RN] Fix use of undefined APP
On RN we don't use the global APP object, so don't save the store there unless
it's defined, which is the case in the current web version. Also, check for
undefined explicitly, since a "if (!APP)" check will throw a ReferenceError.
2017-02-20 11:16:01 +01:00
Lyubomir Marinov
538af01bf5 Comply w/ coding style 2017-02-18 21:57:38 -06:00
hristoterezov
92d0589a37 ref(overlay): The overlays to use React 2017-02-18 17:03:50 -06:00
Lyubomir Marinov
f3269070b2 [iOS] iPad support 2017-02-18 11:36:14 -06:00
Lyubomir Marinov
d93bd3eda7 [RN] Use a default host when only a room name is specified
The mobile app remembers the domain which hosted the last conference. If
the user specified a full URL first and specified a room name only the
second time, it was not obvious that the second conference would be
hosted on the domain of the first conference.
2017-02-18 10:04:08 -06:00
Yana Stamcheva
0dbbc5d8b6 [Android] Circular app/launcher icon(s) 2017-02-17 13:54:01 -06:00
George Politis
08efd5ecab Merge pull request #1327 from saghul/doc-resolution
doc: document resolution config option and set it to 720 by default
2017-02-17 11:33:04 -06:00
Lyubomir Marinov
dba1bcb0e3 [RN] Increment short app version from 1.2 to 1.3
Now that Apple have approved build 1.2.199 for release in the App Store,
the short app version needs to be incremented; otherwise, no new builds
can be uploaded to TestFlight and, respectively, for release in the App
Store.
2017-02-17 09:32:24 -06:00
yanas
348403abff Merge pull request #1326 from jitsi/fix-manual-tooltips
Fixes manual triggered tooltips text and no hover.
2017-02-17 09:26:58 -06:00
Paweł Domas
c290cf45b7 Merge pull request #1328 from saghul/cleanup-adaptive-lastn
cleanup: remove adaptive las N config option
2017-02-17 09:14:47 -06:00
Saúl Ibarra Corretgé
175c8e6e50 cleanup: remove adaptive las N config option
The feature has been replaced so the option no longer applies.
2017-02-17 15:33:20 +01:00
Saúl Ibarra Corretgé
f90667b23c doc: document resolution config option and set it to 720 by default 2017-02-17 13:53:41 +01:00
damencho
cf69d591e4 Fixes manual triggered tooltips text and no hover. 2017-02-17 00:14:58 +02:00
Lyubomir Marinov
e599491583 Remove duplication 2017-02-16 15:17:05 -06:00
Lyubomir Marinov
d1520773cf Improve consistency 2017-02-16 15:16:17 -06:00
Saúl Ibarra Corretgé
573ca97b6c [RN] Add workaround for Android view clipping
Looks like Android gets confused as to what surface to blit when we hide or
show toolbars. Setting a border on the container, seems to force the entire
area to blit properly.

Other attempted approaches, with no success:
- zIndex of -100
- width and height of 0
- opacity of 0 and setting 'disabled' on touch containers

This patch applies the workaround in the welcome page and conference containers.
2017-02-16 14:37:42 -06:00
Lyubomir Marinov
0d97f14a1a flow 2017-02-16 13:59:28 -06:00
Lyubomir Marinov
b8f28abfdf [RN] Fix incorrect JitsiMeetJS.init error handling 2017-02-16 13:59:12 -06:00
Lyubomir Marinov
9ac7c97e67 [RN] Enforce mandatory mobile app-specific config 2017-02-16 13:58:39 -06:00
Lyubomir Marinov
52b3eaacb5 [RN] Fix passing config.js to JitsiMeetJS.init 2017-02-16 13:51:01 -06:00
ibauersachs
9b01ae6db9 Commit from translate.jitsi.org by user ibauersachs.: 306 of 306 strings translated (0 fuzzy). 2017-02-16 06:55:14 +00:00
Ingo Bauersachs
469487ad36 Add Chinese (China) 2017-02-16 07:39:57 +01:00
jitsi-pootle
176c3c1601 New files added from translate.jitsi.org based on templates 2017-02-16 06:46:38 +00:00
yanas
94391234cc Merge pull request #1322 from jitsi/livestream_help_link
livestream link help link
2017-02-15 22:35:57 -06:00
yanas
d84901f196 Font size adjustment and moving link to config param 2017-02-15 17:57:57 -06:00
yanas
c6b117565d Merge branch 'livestream_help_link' of https://github.com/jitsi/jitsi-meet into livestream_help_link 2017-02-15 16:41:49 -06:00
yanas
2a9124acb5 Merge pull request #1316 from jitsi/custom-button-tooltips
Uses tooltip to show custom popups for mute mic button.
2017-02-15 16:20:36 -06:00
Lyubomir Marinov
401a783d6a Coding style consistency
Includes automatic recommended Xcode project file fixes.
2017-02-15 13:48:56 -06:00
Lyubomir Marinov
39483a30b6 Polyfill Element.innerHTML
Lib-jitsi-meet uses jQuery's .append method to manipulate Jingle. The
method in question invokes the getter and setter of Element.innerHTML.
Unfortunately, xmldom which we use in React Native to polyfill DOM does
not polyfill Element.innerHTML. So polyfill it ourselves.
2017-02-15 13:18:21 -06:00
Lyubomir Marinov
0e2a07f8d7 Stick to react-native-background-timer 1.0.0
Recently expose-loader broke us when it updated from 0.7.1 to 0.7.2 and
we decided to stick to exact versions.
2017-02-15 13:18:20 -06:00
Saúl Ibarra Corretgé
36f5b0218d [RN] Fix running timers in the background
Turns out React Native's timers (setTimeout / setInterval) don't run while the
app is in the background: https://github.com/facebook/react-native/issues/167

This patch replaces the global timer functions with those from the
react-native-background-timer package, which work in the background.

These timers won't magically make an application work in the background, but
they will run if an application already happens to run in the background. That's
our case while in a conference, so these timers will run, allowing XMPP pings to
be sent and the conference to stay up as long as the user desires.
2017-02-15 11:50:54 -06:00
damencho
a1b3c56de7 Uses tooltip to show custom popups for mute mic button/shared video button. 2017-02-15 11:29:26 +02:00
Aaron van Meerten
6d664f133e Cosmetic fixes for column length lint errors 2017-02-14 17:11:31 -06:00
Aaron van Meerten
732a433ec1 livestream link to provide more context to users on where to retrieve their stream key 2017-02-14 16:07:12 -06:00
Lyubomir Marinov
f7dcd1ba2c Stick to expose-loader 0.7.1
0.7.2 causes a ReferenceError: jQuery is not defined in autosize.
2017-02-14 08:07:49 -06:00
Lyubomir Marinov
55a8b44224 Consistent middleware and reducer imports 2017-02-10 11:04:40 -06:00
Lyubomir Marinov
e29db31d91 Comply w/ coding style 2017-02-10 10:13:39 -06:00
Lyubomir Marinov
183d3c3ca4 Fix a possible undefined state usage 2017-02-10 00:47:55 -06:00
Saúl Ibarra Corretgé
c57e713696 [RN] Fix full-screen mode when coming back from the background
On Android the status and navigation bars are shown again after coming back from
the background, so enter full-screen mode again if needed.
2017-02-10 00:44:37 -06:00
Saúl Ibarra Corretgé
4519f26adf [RN] Mute local video when app is in the background 2017-02-10 00:44:37 -06:00
bgrozev
c26f9cc01f Merge pull request #1301 from jitsi/video-thumbnail-margin
Lower the margin between video thumbnails
2017-02-09 11:43:55 -06:00
yanas
53e784094a Merge pull request #1308 from jitsi/ss_resize_remote
Fix for the size of remote desktop sharing videos
2017-02-08 15:31:06 -06:00
hristoterezov
0e92e48376 fix(ss): resize for remote videos 2017-02-08 14:58:42 -06:00
Lyubomir Marinov
4c9943ac38 Fix an image path on the mobile landing page 2017-02-08 12:41:51 -06:00
Дамян Минков
4bd0fd145d Merge pull request #1293 from jitsi/prosody_plugin_muc_all_owners
prosody plugin to make all users owners/moderators
2017-02-08 13:17:42 +02:00
Lyubomir Marinov
01ae82eb28 No Temasys alert on mobile Web 2017-02-07 21:54:08 -06:00
Lyubomir Marinov
e21eae0933 Prepare for webpack 2 2017-02-07 15:44:37 -06:00
Lyubomir Marinov
2f047c50dc Revert "No Temasys alert on mobile Web"
This reverts commit b09e86352f.
2017-02-07 15:21:34 -06:00
yanas
e397e1a80c Merge pull request #1303 from jitsi/no-temasys-alert-on-mobile
No Temasys alert on mobile (Web)
2017-02-07 15:11:09 -06:00
Lyubomir Marinov
b09e86352f No Temasys alert on mobile Web 2017-02-07 15:08:38 -06:00
Lyubomir Marinov
8687b69167 Consistency
Be consistent about formatting within 1 and the same file.
2017-02-07 08:29:40 -06:00
Lyubomir Marinov
6c5468d904 Simplify the source code
If half the file is written in ES6, it is easier to read if the rest of
the file is in ES6 as well. If ES6 is used, then const is better than
let. If source code is shorter yet as readable as the long version, then
prefer the short version.
2017-02-07 08:29:40 -06:00
Lyubomir Marinov
d6b0f8d4c5 Use functions, do not re-implement them
We have the functions reload and redirect which modify window.location.
Use them and do not directly modify window.location so that we have
fewer places of direct window.location modifications and it is easier to
refactor them.
2017-02-07 08:29:40 -06:00
Lyubomir Marinov
a8cd4ff12c 1, not 2 names for 1 and the same abstraction
window.location calls it reload so util/helpers shouldn't call it
redirect because UI/util/UIUtil has it is own redirect which is the
assign of window.location.
2017-02-07 08:29:40 -06:00
Lyubomir Marinov
8509efc8af Make the Web app aware of its context root 2017-02-07 08:27:23 -06:00
Saúl Ibarra Corretgé
23a0053dad doc: add section about embedding to the README 2017-02-06 17:41:19 -06:00
Saúl Ibarra Corretgé
5849980092 external_api: fix jsdoc 2017-02-06 17:41:19 -06:00
Saúl Ibarra Corretgé
e81fc2b254 doc: fix external API documentation
- use proper punctuation
- fix markdown syntax
- always use syntax highlighting
- document missing commands
- miscellaneous grammar fixes
2017-02-06 17:41:19 -06:00
yanas
f6f730b994 Lower the margin between video thumbnails 2017-02-06 15:34:05 -06:00
Lyubomir Marinov
2ad869a036 Comply w/ coding style
- Use 1 name for 1 abstraction. Instead of useFullScreen and enabled use
  fullScreen.
- Comments are correct English sentences so no double spaces between
  senteces, no capitalization of the work On midsentence.
- Write as little source code as possible if readability is preserved.
- Utilize Facebook's Flow.
- The name of a private function must start with _ and the jsdoc should
  state that the function is private.
2017-02-06 15:32:03 -06:00
Saúl Ibarra Corretgé
7a8c84e990 [RN] Implement full screen mode while in a conference
The implementation varies across platforms, with the same goal: allow the app to
use the entire screen real state while in a conference.

On Android we use immersive mode, which  will hide the status and navigation bars.

https://developer.android.com/training/system-ui/immersive.html

On iOS the status bar is hidden, with a slide effect.
2017-02-06 13:51:17 -06:00
Lyubomir Marinov
0de01e93dd react-native 0.41.2 2017-02-06 12:24:38 -06:00
Lyubomir Marinov
6fa93e5b44 file-loader 0.10.0 2017-02-06 12:24:38 -06:00
Lyubomir Marinov
2144ec1e3f eslint 3.15.0 2017-02-06 12:24:38 -06:00
bgrozev
68d2f60ace Merge pull request #1276 from jitsi/respect-disable-rtx
fix: Respect the disableRtx config option.
2017-02-06 11:52:03 -06:00
George Politis
3d671ae71f docs: Documents the disableRtx config option. 2017-02-06 11:19:33 -06:00
Lyubomir Marinov
8ed47f9d99 [flow] Lint with Flow (in addition to JSHint and ESLint) 2017-02-03 16:36:14 -06:00
Lyubomir Marinov
b50f858556 [flow] Expand the coverage of flow-monitored files 2017-02-03 16:36:14 -06:00
Lyubomir Marinov
5de1a74429 [flow] Take advantage of flow-typed 2017-02-03 16:36:14 -06:00
Lyubomir Marinov
2063ad467d flow-typed 2017-02-03 16:36:14 -06:00
Lyubomir Marinov
679acbae16 Use babel-eslint in the whole project 2017-02-03 16:36:14 -06:00
Aaron van Meerten
a5b706a99e Added a prosody plugin for making all users into muc owners in prosody
Included a patch to prosody-trunk which allows owners to kick each other
2017-02-03 11:41:08 -06:00
yanas
542e61357e Adds new combined camera and mic icon 2017-02-02 17:10:02 -06:00
Lyubomir Marinov
3743602c67 [RN] Fix the parsing of the domain out of a URL 2017-02-02 13:40:49 -06:00
Lyubomir Marinov
ee651840bf Fixes related to coding style 2017-02-02 10:54:24 -06:00
damencho
0765c60d77 Moves feedback button as a component.
When callstats is not configured hide the button.
2017-02-02 10:06:17 -06:00
Lyubomir Marinov
7fa17322a1 Consistency in naming and jsdocs 2017-02-02 09:46:09 -06:00
Lyubomir Marinov
cfa3047330 [flow] Type annotations 2017-02-02 09:45:34 -06:00
Lyubomir Marinov
9e033deb7b Remove unnecessary source code 2017-02-02 09:42:14 -06:00
Lyubomir Marinov
f6c914f6f0 [flow] A minimal demonstration of flow in action 2017-02-01 13:38:37 -06:00
Lyubomir Marinov
06ff02c2a5 [flow] Ignore packages in node_modules that cause errors and we do not want to fix 2017-02-01 13:38:37 -06:00
Lyubomir Marinov
63fd263890 flow 0.36.0
The first step towards enabling Facbook's flow in the project. The flow
configuration is pristine as generated by react-native upgrade.
2017-02-01 13:38:37 -06:00
Lyubomir Marinov
94f3d4b279 [RN] Expand domains supported by Universal Links 2017-01-31 22:47:47 -06:00
Lyubomir Marinov
fdc96044ad [RN] App-specific URL scheme 2017-01-31 22:47:47 -06:00
Lyubomir Marinov
91487ffc94 Fix a case of endless recursion 2017-01-31 22:47:47 -06:00
Saúl Ibarra Corretgé
7a57dcc08a doc: add documentation on how to build the mobile apps 2017-01-31 22:32:15 -06:00
Дамян Минков
913a54713d Adds testing repo to readme. 2017-01-31 21:42:45 -06:00
damencho
39a8681e8e Improves safe checks for missing stats. 2017-01-30 17:01:25 -06:00
George Politis
a7015b0d1a fix: Respect the disableRtx config option. 2017-01-30 16:20:23 +00:00
Lyubomir Marinov
5305f23332 Consistent naming of functions
Until we make a decision on access modifier hints and adopt a respective
coding style, consistency is king.
2017-01-28 20:15:10 -06:00
Lyubomir Marinov
acbf3adab7 Simplify: Remove react/features/base/react-native 2017-01-28 20:13:54 -06:00
Lyubomir Marinov
366b2f1374 Simplify: Remove react/features/base/navigator 2017-01-28 19:56:35 -06:00
Lyubomir Marinov
2189ab7ee6 Consistent naming of react-redux's mapStateToProps
Until we make a decision on access modifier hints and adopt a respective
coding style, consistency is king.
2017-01-28 17:34:57 -06:00
Lyubomir Marinov
349c04d8d1 Consistent naming of functions
Until we make a decision on access modifier hints and adopt a respective
coding style, consistency is king.
2017-01-28 17:28:13 -06:00
Lyubomir Marinov
c7c6249ad7 [RN] Fix room name case sensitivity
It turns out that it is not enough to give lib-jitsi-meet the room name
in lower case. BOSH also needs the room name in lower case.
2017-01-28 17:26:09 -06:00
Lyubomir Marinov
5319227a8f Fix jsdocs 2017-01-28 12:11:24 -06:00
Lyubomir Marinov
3aff812ee2 Consistent naming of Component props mapped from the Redux state
Until we make a decision on access modifier hints and adopt a respective
coding style, consistency is king.
2017-01-27 21:36:20 -06:00
Lyubomir Marinov
88eabf23f4 Remove obsolete UnsupportedMobileBrowser functionality
The desired behavior of the button 'Start a conference' / 'Join the
conversation' is to launch the mobile app if installed; otherwise, do
nothing i.e. continue to display UnsupportedMobileBrowser.

Anyway, we may change our minds about allowing the user to continue in a
supported mobile browser so preserve the source code that enables that
but give it more appropriate naming.
2017-01-27 21:29:09 -06:00
Любомир Маринов
a70beaf7b6 Merge pull request #1265 from jitsi/api
api/api.html -> examples/api.html && rm doc/api
2017-01-27 20:11:23 -06:00
Lyubomir Marinov
c91bffa73c Merge branch 'saghul-android-audiomode' 2017-01-26 23:48:42 -06:00
Lyubomir Marinov
ea163dbbba Merge branch 'deduplicate-index-js' 2017-01-26 23:48:09 -06:00
Lyubomir Marinov
18bc99d6b5 Split long methods into multiple shorter ones 2017-01-26 23:35:56 -06:00
Lyubomir Marinov
bab94a207d Remove unnecessary source code 2017-01-26 21:08:50 -06:00
Lyubomir Marinov
ef39baab47 Comply w/ coding style
- Maximum of 80 characters per line.
- Group first and then sort in alphabetical order.
- Fields should begin with a lowercase letter.
2017-01-26 21:07:35 -06:00
Saúl Ibarra Corretgé
2edaaac7bf [RN] Implement AudioMode module on Android
This module chooses the most appropriate audio default based on the specified
mode.
2017-01-26 19:18:10 -06:00
Saúl Ibarra Corretgé
113e50c074 [RN] Bump Andoroid minimum and target SDK versions
Use a minimum SDK version of 19, that is Anroid 4.4 (KitKat) and a target SDK of
23, that is, Android 6.0 (Marshmallow).
2017-01-26 19:18:10 -06:00
Дамян Минков
900a675864 Merge pull request #1269 from jitsi/border-radius-fix
Fixes border radius.
2017-01-26 17:55:01 -06:00
Lyubomir Marinov
49b3b49f3e Remove duplication
The files react/index.native.js and react/index.web.js ended up having
very similar source code related to initializing the Redux store. Remove
the duplication.

Additionally, I always wanted the App React Component to be consumed
without the need to provide a Redux store to it.
2017-01-26 17:24:11 -06:00
yanas
23935d3d39 Fixes border radius. 2017-01-26 17:04:29 -06:00
Дамян Минков
3fd33d0f50 Merge pull request #1262 from jitsi/ui-fixes
Ui fixes
2017-01-26 10:15:39 -06:00
hristoterezov
8c3317b8e9 doc(iframe_api): api/api.html -> examples/api.html && rm doc/api 2017-01-26 10:02:34 -06:00
Lyubomir Marinov
99a9fc054f eslint 3.14.1 2017-01-26 09:39:47 -06:00
Lyubomir Marinov
967dcfc3d2 react-native-keep-awake 2.0.2 2017-01-26 09:39:20 -06:00
Lyubomir Marinov
0051b3b79c Clean up obsolete file references 2017-01-26 07:58:56 -06:00
Lyubomir Marinov
cbcee201f0 Comply w/ coding style 2017-01-26 07:58:46 -06:00
Ilya Daynatovich
1fa4a53a48 Remove rule 2017-01-26 07:27:31 -06:00
Ilya Daynatovich
6a0b92638c Introduce interceptComponent function 2017-01-26 07:27:31 -06:00
Ilya Daynatovich
2e81b8493e Introduce unsupported browser page 2017-01-26 07:27:31 -06:00
Ilya Daynatovich
57ba702dda Clean up routing logic 2017-01-26 07:27:31 -06:00
Lyubomir Marinov
62bafcaf63 Introduce Platform in React
React Native provides a Platform abstraction which React does not
provide.
2017-01-26 07:27:31 -06:00
Lyubomir Marinov
7de5c9c1d2 Comply w/ coding style 2017-01-26 07:27:31 -06:00
Ilya Daynatovich
8248b14555 Integrate Mobile landing in the Redux app 2017-01-26 07:27:31 -06:00
Ilya Daynatovich
23ef0c8d9d justify text on landing page 2017-01-26 07:27:31 -06:00
Ilya Daynatovich
58a4f59fd8 Implement Landing component 2017-01-26 07:27:31 -06:00
Ilya Daynatovich
0c851934fb layout for mobile landing 2017-01-26 07:27:31 -06:00
Emil Ivov
8d58dbee38 Restores api.md to original location 2017-01-25 19:14:30 -06:00
yanas
cd5e84e4ef Fixes network problem message position 2017-01-25 16:54:51 -06:00
yanas
09ba14eb04 Fixes video thumbnail border and large video background color 2017-01-25 16:53:58 -06:00
Boris Grozev
b22f1965aa doc: Remove obsolete reference to browserify. 2017-01-25 15:48:32 -06:00
Samuel Liard
df6f920b44 Force jquery-ui version to fix pb with beta version we can get with npm
Use Maven in place of ant
Add --host parameter for jicofo
Add build for jitsi Meet

Revert "Force jquery-ui version to fix pb with beta version we can get with npm"

This reverts commit 35a8641e62.
2017-01-25 15:47:23 -06:00
Дамян Минков
f13b2462c8 Merge pull request #1257 from saghul/ds-options-cleanup
cleanup: Remove default Chrome extension ID
2017-01-23 17:04:59 -06:00
Paweł Domas
c0e80c14f8 Merge pull request #1192 from jitsi/remotecontrol
Implement remote control support
2017-01-23 17:00:11 -06:00
hristoterezov
2b1176df53 style(remotecontrol): getRequestedParticipant method comments 2017-01-23 16:06:51 -06:00
hristoterezov
05bfbf5620 fix(remotecontrol): Execute Reciever.enable only when the value is changed 2017-01-23 15:29:25 -06:00
hristoterezov
4af706bd83 style(keycode): Comment 2017-01-23 15:29:25 -06:00
hristoterezov
b62e4d5ee9 fix(remotecontrol): Log level 2017-01-23 15:29:25 -06:00
hristoterezov
bd98d661d3 ref(remotecontrol): Moves hangup logic to remote control module 2017-01-23 15:29:25 -06:00
hristoterezov
1f7c5529e9 fix(remotecontrol): Pin the controlled participant only on remote control permissions granted 2017-01-23 15:29:25 -06:00
hristoterezov
0453346cf4 ref(remotecontrol): Pass the largeVideoWrapper as parameter to remote control module 2017-01-23 15:29:25 -06:00
hristoterezov
15090243d0 fix(API): JS errors caused by remote control merge 2017-01-23 15:29:25 -06:00
hristoterezov
b22e3ee253 style(remotecontrol): Fix JSDoc for RemoteControlEvent 2017-01-23 15:29:25 -06:00
hristoterezov
e693554961 fix(remotecontrol): Logging 2017-01-23 15:29:25 -06:00
hristoterezov
0efca9a9a8 fix(remotecontrol): Fixing issues after peer review. 2017-01-23 15:29:25 -06:00
hristoterezov
5d22061c0a fix(remotecontrol): Handle on-stage participant changes 2017-01-23 15:29:25 -06:00
hristoterezov
84be7fd739 fix(remotecontrol): import of remote control 2017-01-23 15:29:25 -06:00
hristoterezov
5d269ad0aa fix(remotecontrol): Disable the keyboard shortcuts during remote control 2017-01-23 15:29:25 -06:00
hristoterezov
a4d5c41b3a feat(remotecontrol): UI for requesting permissions 2017-01-23 15:29:25 -06:00
hristoterezov
846fb9abb0 feat(remotecontrol): Implement requesting remote control permissions 2017-01-23 15:29:25 -06:00
hristoterezov
0f33e59e4d feat(remotecontrol): announce remotecontrol support 2017-01-23 15:29:25 -06:00
hristoterezov
896650d005 feat(remotecontrol): Implement basic remote control support 2017-01-23 15:29:25 -06:00
Saúl Ibarra Corretgé
6d6b5a7917 cleanup: Remove default Chrome extension ID
It makes for a bad first-time experience for users, since the desktop sharing
button will be visible, but it will never work.

Also get rid of the now deprecated `desktopSharingChromeMethod` option.
2017-01-23 15:21:28 -06:00
Любомир Маринов
db5010be9d Merge pull request #1261 from jitsi/clean-css-module-update
Stick to clean-css version 3.x.
2017-01-23 15:18:18 -06:00
damencho
be8860080c Fixes build.
Starting version 4.x clean-css is split into two packages and we should depend on clean-css-cli for versions 4 and above. Tested it and we have currently some problem with it like fonts and images got referenced under css folder. So sticking version to 3.x for now.
2017-01-23 14:35:26 -06:00
Lyubomir Marinov
42f124b0f6 Fix typo 2017-01-23 13:01:12 -06:00
Lyubomir Marinov
7249ababb7 Provide microphone and camera usage descriptions
iTunes Connect/TestFlight requires these now and is not satisfied with
empty values anymore.
2017-01-23 12:11:48 -06:00
Lyubomir Marinov
079be92468 Revert "[RN][iOS] Make universal builds"
This reverts commit b96ca538e4. While iPad
support is nice to have, we are not ready for a publish in App Store.
During the upload to iTunes Connect, a verification of the .ipa fails
because:

- app icons for iPad are missing:
  - 76x76 pixels in .png format for iOS versions >= 7.0,
  - 167x167 pixels in .png format for iOS versions supporting iPad Pro,
  - 152x152 pixels in .png format for iOS versions >= 7.0,
- orientations required for iPad Mutitasking are missing:
  - UIInterfaceOrientationPortraitUpsideDown.
2017-01-23 11:26:15 -06:00
Lyubomir Marinov
dda2a2feba Automatic Xcode project file fixes 2017-01-22 16:02:57 -06:00
Lyubomir Marinov
ae726cfdc0 react-native 0.40.0 2017-01-22 12:32:08 -06:00
Saúl Ibarra Corretgé
1a04e5a9af [RN] Use a translucent status bar on Android 2017-01-21 15:42:13 -06:00
Lyubomir Marinov
cac68dbaba [RN] Increment short app version from 1.1 to 1.2
Now that Apple have approved build 1.1.185 for release in the App Store,
the short app version needs to be incremented; otherwise, no new builds
can be uploaded to TestFlight and, respectively, for release in the App
Store.
2017-01-20 15:01:01 -06:00
Lyubomir Marinov
3c04634609 Simplify
Simplify the source code (with the idea that source code which does not
exist does not have to be maintained).

Additionally, apply modifications to have the source code comply with the coding
style.

Overall, prepare saghul:audio-mode for merge into jitsi:master.
2017-01-20 14:06:15 -06:00
Saúl Ibarra Corretgé
6c12681b9c [RN][iOS] Default to speaker for video conferences 2017-01-20 14:06:15 -06:00
Saúl Ibarra Corretgé
b1b5f3e6f0 Add CONFERENCE_WILL_JOIN action
It's fired before creating the conference with lib-jitsi-meet.
2017-01-20 14:06:15 -06:00
bbaldino
5baa167a08 Sdp overhaul (#1234)
* M1: device change now uses new flow.  fundamentally "works" but may be corner cases/side effects to other flows. haven't touched ffox yet

* M2: change toggle screenshare flows to use the new video replacement chain

* remove the old 'useVideoStream' and replace it with the new one

* use the new (and renamed back from the shim) 'dispose' method

* tweaks to work with the sdp overhaul changes in lib-jitsi-meet

* change the order in which we call dispose (to handle dispose being reverted back to how it is currently on master)

* move useAudioStream over to new flow

* restore useVideoStream doc

* handle rename JitsiConference::replaceStream -> JitsiConference::replaceTrack

* fix useAudioStream and useVideoStream to return a promise again
2017-01-19 12:46:10 -06:00
ibauersachs
343d17d19a Commit from translate.jitsi.org by user ibauersachs.: 99 of 298 strings translated (18 fuzzy). 2017-01-18 23:58:43 +00:00
ibauersachs
0370cc47fc Commit from translate.jitsi.org by user ibauersachs.: 140 of 298 strings translated (15 fuzzy). 2017-01-18 23:58:36 +00:00
ibauersachs
083fc955dc Commit from translate.jitsi.org by user ibauersachs.: 237 of 298 strings translated (17 fuzzy). 2017-01-18 23:58:30 +00:00
ibauersachs
a6e268f784 Commit from translate.jitsi.org by user ibauersachs.: 128 of 298 strings translated (14 fuzzy). 2017-01-18 23:58:23 +00:00
ibauersachs
7e0a9bc37c Commit from translate.jitsi.org by user ibauersachs.: 138 of 298 strings translated (14 fuzzy). 2017-01-18 23:58:16 +00:00
ibauersachs
f25bc818d7 Commit from translate.jitsi.org by user ibauersachs.: 298 of 298 strings translated (0 fuzzy). 2017-01-18 23:58:05 +00:00
ibauersachs
9beae22803 Commit from translate.jitsi.org by user ibauersachs.: 237 of 298 strings translated (17 fuzzy). 2017-01-18 23:57:58 +00:00
ibauersachs
920b0af269 Commit from translate.jitsi.org by user ibauersachs.: 298 of 298 strings translated (0 fuzzy). 2017-01-18 23:57:51 +00:00
ibauersachs
6c674bef2a Commit from translate.jitsi.org by user ibauersachs.: 129 of 298 strings translated (14 fuzzy). 2017-01-18 23:57:44 +00:00
ibauersachs
e74fbbb38b Commit from translate.jitsi.org by user ibauersachs.: 298 of 298 strings translated (0 fuzzy). 2017-01-18 23:57:29 +00:00
ibauersachs
fb3f916802 Commit from translate.jitsi.org by user ibauersachs.: 237 of 298 strings translated (17 fuzzy). 2017-01-18 23:57:21 +00:00
ibauersachs
c80d47d3dd Commit from translate.jitsi.org by user ibauersachs.: 192 of 298 strings translated (21 fuzzy). 2017-01-18 23:57:14 +00:00
ibauersachs
693ee1dcf8 Commit from translate.jitsi.org by user ibauersachs.: 237 of 298 strings translated (17 fuzzy). 2017-01-18 23:57:06 +00:00
Дамян Минков
640c0faff1 Merge pull request #1253 from jitsi/api_participant_count
Iframe API - participant count
2017-01-18 14:52:59 -06:00
hristoterezov
207ac47aa7 fix(iframe_api): s/getNumberOfParticipant/getNumberOfParticipants 2017-01-18 14:24:41 -06:00
hristoterezov
8844f83a59 feat(iframe_api): Add api.html to doc for example and testing purpose 2017-01-18 14:24:40 -06:00
hristoterezov
4a5a1cd5f4 fix(iframe_api): Remove enable/disable events 2017-01-18 14:24:21 -06:00
hristoterezov
09d63d38ab fix(iframe_api): prevents multiple execution of listeners per event 2017-01-18 13:24:30 -06:00
hristoterezov
6bf0f9b2ec feat(iframe_api): get number of participants 2017-01-18 13:20:32 -06:00
Lyubomir Marinov
f6fdd3ce70 Don't show watermarks in film strip-only mode even for guests 2017-01-17 21:54:17 -06:00
Lyubomir Marinov
d1f6679f2d [RN] Remove Crashlytics 2017-01-17 21:54:17 -06:00
Lyubomir Marinov
b8a6eb4768 Fix the checkbox to disable the Welcome page
Recently, we reimplemented the Welcome page in React. Unfortunately, we
broke the checkbox that enables/disables the Welcome page and it would
allow checking but wouldn't allow unchecking.
2017-01-17 16:20:43 -06:00
Lyubomir Marinov
6efad1348a Fix the display of watermarks in film strip-only mode
Recently, we reimplemented the watermarks in React. Unfortunately, we
didn't take into account film strip-only mode.

Additionally, we duplicated watermark-related source code on the Welcome
and Conference pages.
2017-01-17 16:20:13 -06:00
Lyubomir Marinov
eaed9db1e7 Name folders consistently 2017-01-17 08:53:23 -06:00
Lyubomir Marinov
4f8b7a934c Comply w/ coding style 2017-01-17 08:32:20 -06:00
Lyubomir Marinov
71c04936af Merge branch 'actions-rename' of https://github.com/saghul/jitsi-meet into saghul-actions-rename 2017-01-17 08:18:52 -06:00
Любомир Маринов
41da758946 Merge pull request #1242 from saghul/ipad
Enable universal builds
2017-01-16 19:56:29 -06:00
Saúl Ibarra Corretgé
acbfe5cb09 [RN] Keep device screen on while in a conference 2017-01-16 19:12:43 -06:00
Lyubomir Marinov
ba3d65c01f Fix d17cc9fa
A bug was discovered in d17cc9fa which would raise a failure to push
into the browser's history if a base href was defined. Fix the failure
by removing react-router. Anyway, the usage of react-router was
incorrect because the app must hit the server infrastructure when it
enters a room because the server will choose the very app version then.
2017-01-15 18:28:02 -06:00
Lyubomir Marinov
856732abab Preserve URLs 2017-01-15 17:46:34 -06:00
Lyubomir Marinov
5f21e4c5b6 Introduce Platform in React
React Native provides Platform.
2017-01-15 12:09:52 -06:00
Lyubomir Marinov
28b44cf67c Consistency 2017-01-15 12:09:02 -06:00
Дамян Минков
674b0e706c Merge pull request #1241 from jitsi/iframe_api_avatars
feat(iframeAPI): implement avatar change commands
2017-01-12 17:08:13 -06:00
Saúl Ibarra Corretgé
b96ca538e4 [RN][iOS] Make universal builds 2017-01-12 16:24:01 -06:00
Saúl Ibarra Corretgé
3266ace916 [RN][iOS] Set deployment target to 9.0
According to Apple iOS devices with versions < 9.0 are 6%.
https://developer.apple.com/support/app-store/
2017-01-12 16:20:03 -06:00
hristoterezov
f7ce8d028d feat(iframeAPI): implement avatar change commands 2017-01-12 15:53:17 -06:00
Дамян Минков
85e5b0fc31 Merge pull request #1240 from jitsi/ilmstriponly_ui
fix(filmstrip_only): Remove unrelated UI elements
2017-01-12 15:24:32 -06:00
hristoterezov
61f4b52a15 fix(filmstrip_only): Remove unrelated UI elements 2017-01-12 14:51:53 -06:00
Lyubomir Marinov
d17cc9fa86 Merge branch 'BeatC-BeatC-moving-conference-init-to-react-1' 2017-01-12 12:24:25 -06:00
Lyubomir Marinov
1f995cffe9 eslint 3.13.1, react 15.4.1, react-redux 5.0.2 2017-01-12 11:01:12 -06:00
Lyubomir Marinov
0936d54114 Merge branch 'master' into BeatC-BeatC-moving-conference-init-to-react-1 2017-01-12 10:37:36 -06:00
Lyubomir Marinov
0912dbf130 Remove duplication, simplify, comply with coding style 2017-01-12 10:37:01 -06:00
Дамян Минков
7dd566a591 Merge pull request #1238 from jitsi/filmstriponly_jserrors
fix(filmstrip_only): JS errors
2017-01-11 19:18:51 -06:00
hristoterezov
0f9bc766db fix(filmstrip_only): JS errors 2017-01-11 17:16:43 -06:00
Saúl Ibarra Corretgé
e71e6c5b79 Name Redux actions consistently
Redux actions which represent "commands" should be imperative, and those
representing events should use the past tense.
2017-01-11 13:11:11 -06:00
Lyubomir Marinov
4d5f82633b Merge branch 'master' into BeatC-BeatC-moving-conference-init-to-react-1 2017-01-10 13:07:19 -06:00
Lyubomir Marinov
2f01746c55 Remove duplication, simplify, comply with coding style 2017-01-10 13:06:18 -06:00
yanas
7ec5b34548 Merge pull request #1232 from jitsi/fix-adjust-layout
Fixes and adjustments of UI layout
2017-01-10 11:20:34 -06:00
yanas
1604fa6584 Fixes and adjustments of UI layout 2017-01-09 15:32:25 -06:00
Lyubomir Marinov
b67994235e Merge branch 'BeatC-moving-conference-init-to-react-1' of https://github.com/BeatC/jitsi-meet into BeatC-BeatC-moving-conference-init-to-react-1 2017-01-09 07:44:02 -06:00
Lyubomir Marinov
ee1358fae3 Merge branch 'saghul-no-welcome-autofocus' 2017-01-06 13:19:33 -06:00
Lyubomir Marinov
9fae5aa02f Merge branch 'no-welcome-autofocus' of https://github.com/saghul/jitsi-meet into saghul-no-welcome-autofocus 2017-01-06 13:19:12 -06:00
Lyubomir Marinov
a887beed3a [RN] Increment short app version from 1.0 to 1.1
Now that Apple have approved build 1.0.178 for release in the App Store,
the short app version needs to be incremented; otherwise, no new builds
can be uploaded to TestFlight and, respectively, for release in the App
Store.
2017-01-06 10:34:46 -06:00
Saúl Ibarra Corretgé
8a30d44042 [RN] Disable autofocus on the welcome screen
This prevents the keyboard from showing up right when the app opens.
2017-01-06 16:08:01 +01:00
Lyubomir Marinov
4fef8a3b79 [RN] Prevent unhandled JS errors from killing the process in Release 2017-01-05 15:06:41 -06:00
Ilya Daynatovich
ad9bdf4dd2 Fix url params stripping 2017-01-04 19:01:25 +02:00
hristoterezov
29001c3ab0 Merge pull request #1228 from jitsi/fix-menu-icon
Fix(RemoteVideo): Fixes remote video menu icon
2017-01-04 10:18:41 -06:00
yanas
a5387b054a Fix(RemoteVideo): Fixes remote video menu icon 2017-01-04 10:14:53 -06:00
Ilya Daynatovich
c2757469a5 Merge branch 'master' into BeatC-moving-conference-init-to-react-1 2017-01-04 17:53:13 +02:00
Ilya Daynatovich
ed1aa700d0 remove asterisk symbol from jsdoc 2017-01-04 17:47:27 +02:00
Ilya Daynatovich
58b5e1748f editions after rebase 2017-01-04 17:47:27 +02:00
Ilya Daynatovich
a99bbe67ab Clean up Conference component 2017-01-04 17:47:27 +02:00
Ilya Daynatovich
f53fb3d814 Introduced new actions and functions for app initialization 2017-01-04 17:46:47 +02:00
Ilya Daynatovich
e716c1738c Fix lint errs 2017-01-04 17:46:47 +02:00
Ilya Daynatovich
3190bfa058 Move redundant code from app.js 2017-01-04 17:45:52 +02:00
Ilya Daynatovich
c570b80d7b moved app initialization to react app 2017-01-04 17:45:52 +02:00
yanas
2f9887245a Merge pull request #1226 from jitsi/guests-watermark
Adds an option to show watermark only for guests.
2017-01-04 09:43:25 -06:00
damencho
6006333ccf Adds an option to show watermark only for guests. 2017-01-03 17:30:57 -06:00
Lyubomir Marinov
fd6c91715f Merge branch 'fix-mobile-toolbar-initial-timeout' 2017-01-03 15:27:22 -06:00
Lyubomir Marinov
a40b6a9df8 Merge branch 'master' into fix-mobile-toolbar-initial-timeout 2017-01-03 15:12:53 -06:00
yanas
d67b7c7f49 Fix(React/conference): Fix jsdocs 2017-01-03 15:09:52 -06:00
yanas
616ab0f635 Fix(mobile/conference): Move the initial call to the componentDidMount method 2017-01-03 15:06:47 -06:00
yanas
930e65da66 Fix(React/conference): Sets an initial toolbar view timeout 2017-01-03 14:53:52 -06:00
yanas
414a978b10 Merge pull request #1224 from jitsi/fix-close-page-redirect
Removes guest parameter when navigating to close page.
2017-01-03 14:37:54 -06:00
damencho
4ebefb17e9 Removes guest parameter when navigating to close page.
Using sessionStorage to save whether user is guest or not.
2017-01-03 14:15:32 -06:00
Дамян Минков
c46772015b Merge pull request #1217 from BeatC/fix-watermarks
Fixes issue with watermarks and interface configs.
2016-12-30 16:34:39 -06:00
Дамян Минков
677eef12dd Updates use of showJitsiWatermark. 2016-12-30 12:07:54 -06:00
hristoterezov
cd03b29ece Merge pull request #1219 from jitsi/guest-hint
Adds an option for guest only hint
2016-12-30 11:41:23 -06:00
damencho
63aa60f2d6 Adds an option for a hint message shown only to guests. 2016-12-30 10:59:21 -06:00
damencho
282defc54c Pass parameter to close page about current participant is it guest. 2016-12-30 10:58:21 -06:00
damencho
593de63d49 Adds utils to the close page and an id to the hint question div. 2016-12-30 10:19:58 -06:00
Ilya Daynatovich
5bb53ba036 Fix issue with watermarks 2016-12-30 13:34:03 +02:00
damencho
3c369a4c67 Fixes missing ssi for logging_config.js when meet served from jetty. 2016-12-29 11:18:39 -06:00
damencho
83aeb99b95 Commit from translate.jitsi.org by user damencho.: 202 of 298 strings translated (21 fuzzy). 2016-12-27 19:49:38 +00:00
ibauersachs
188d53ef94 Commit from translate.jitsi.org by user ibauersachs.: 298 of 298 strings translated (0 fuzzy). 2016-12-24 10:48:32 +00:00
ibauersachs
961cf7edbb Commit from translate.jitsi.org by user ibauersachs.: 298 of 298 strings translated (0 fuzzy). 2016-12-23 13:16:05 +00:00
damencho
2c5a5816c4 Adds some accessibilityLabels that can be used for testing. 2016-12-22 17:28:57 -06:00
yanas
96a6f2dfd6 Merge pull request #1212 from jitsi/react-native-ui-modifications-more
React native ui modifications
2016-12-22 14:41:43 -06:00
Дамян Минков
35be17cfc9 Merge pull request #1208 from jitsi/caps
Remove strophe-caps dependancy
2016-12-22 11:13:08 -05:00
yanas
8d90a7d091 Fix(react): Fixes black border on text input in welcome page 2016-12-21 18:09:30 -06:00
yanas
4a71c2655a Fix(react): Make in call buttons appear by default 2016-12-21 18:07:32 -06:00
yanas
043fd6e259 Fix(React): Modifies thumbnail icon positions and layout 2016-12-21 16:32:56 -06:00
yanas
7722e14117 Adjusts the size of secondary toolbar button 2016-12-21 15:00:24 -06:00
yanas
5e377d3694 Fix underlining on welcom text input on android 2016-12-21 15:00:24 -06:00
yanas
f512583973 fix(react-toolbars): Adjusts some styles and icons in mobile toolbars 2016-12-21 15:00:24 -06:00
yanas
5fce7f6ba2 Updates the react native font. 2016-12-21 15:00:24 -06:00
yanas
dfe1666530 feat(fonts): Adds a new icon to the font 2016-12-21 15:00:24 -06:00
hristoterezov
41f0069a22 fix(caps): remove strophe-caps dependancy 2016-12-19 14:58:18 -06:00
Lyubomir Marinov
9f332ffcec [iOS] Synthesize IPv6 addresses 2016-12-17 04:03:10 -06:00
Lyubomir Marinov
891bd7f346 react-redux 5.0.1, babel-loader 6.2.10, eslint 3.12.2, eslint-plugin-react-native 2.2.1 2016-12-15 21:01:44 -06:00
Lyubomir Marinov
4810249301 Simplify. Comply w/ coding style. 2016-12-15 21:00:06 -06:00
Ilya Daynatovich
984a6519fc Move welcome page logic from jquery to react 2016-12-15 07:55:43 -06:00
Ilya Daynatovich
986f13ef1a Made editions in PR 2016-12-15 07:54:17 -06:00
Ilya Daynatovich
83dd56d34c Move roomname generator to React 2016-12-14 23:59:02 -06:00
Paweł Domas
b646e8d213 Merge pull request #1197 from jitsi/reload_on_error
Reload when resource fails to load
2016-12-13 19:32:55 -06:00
yanas
2785e76e23 fix(index.html): minor variable optimisation 2016-12-13 18:43:45 -06:00
yanas
c5cacd7955 fix(index.html): UI adjustments 2016-12-13 18:19:49 -06:00
paweldomas
62532b5879 feat(index.html): add safeguards to the reload delay value
If the page reload value is not within specific range it will be
adjusted to a default of 10 seconds.
2016-12-13 13:57:11 -06:00
paweldomas
7e22f9c57b feat(index.html): hide the missing filename by default 2016-12-13 13:53:28 -06:00
paweldomas
d9017b2665 feat(index.html): update "failed to load the page" msg
Also adds a link to reload manually.
2016-12-13 07:33:27 -06:00
Lyubomir Marinov
4571a4c048 Simplify Redux reducer source code 2016-12-13 03:15:32 -06:00
Lyubomir Marinov
80685395ed [RN] Room lock 2016-12-13 03:15:32 -06:00
Lyubomir Marinov
38b9819b68 Fix/remove Redux state mutation 2016-12-13 03:15:32 -06:00
paweldomas
a4dcf5f8df feat(index.html): reload when resource fails to load
The page will be reloaded if any of the mandatory scripts/resources
fails to load. The reload will be delayed with exponential backoff
starting from 2 seconds. The retry attempt counter is passed as
'rCounter' query attribute.
2016-12-12 15:53:07 -06:00
Lyubomir Marinov
9a49a01713 [RN] Room lock button 2016-12-12 13:49:45 -06:00
hristoterezov
8c3fb54d3d Merge pull request #1194 from bgrozev/disable-suspend-video
config: Disable suspend video by default.
2016-12-12 13:07:00 -06:00
Boris Grozev
7707e384c5 config: Disable suspend video by default. 2016-12-12 10:37:36 -06:00
Lyubomir Marinov
a09b8ce56e React Native 0.39.2 2016-12-11 22:21:51 -06:00
Lyubomir Marinov
7ecafb1e69 [RN] Join password-protected rooms 2016-12-11 22:21:51 -06:00
Lyubomir Marinov
9f93ce86be [RN] Simplify the source code 2016-12-11 22:21:51 -06:00
Lyubomir Marinov
a5773f1d0b [RN] Links to Send feedback and Privacy (policy) 2016-12-11 22:21:51 -06:00
Lyubomir Marinov
d72813340e Fix the (visual) style of toggle camera facing mode 2016-12-11 22:21:51 -06:00
Lyubomir Marinov
daf56455a5 Use Symbol for Redux action types to prevent conflicts 2016-12-11 22:21:51 -06:00
Дамян Минков
f58d7fc3cc Adds download links to readme. 2016-12-09 17:45:02 -06:00
Illia Daynatovich
4584d89c43 Rewrite with ES6 2016-12-08 19:21:29 -06:00
Illia Daynatovich
1cc2b388a2 webpack-dev-server 2016-12-08 19:21:29 -06:00
Lyubomir Marinov
51a1a7ed22 [RN] Clarify, simplify the source code 2016-12-07 16:08:35 -06:00
Lyubomir Marinov
99c2b60a1d [RN] Catch Promise rejection 2016-12-07 16:06:16 -06:00
Lyubomir Marinov
de5cd53f85 [RN] Allow uppsercase letters in room names 2016-12-07 16:04:52 -06:00
Lyubomir Marinov
f027a8f74f [RN] Use fetch instead of XHR 2016-12-07 16:00:54 -06:00
damencho
7d81ec4d86 Simplifies dependencies, removes possible circular dependency. 2016-12-07 11:14:20 -06:00
hristoterezov
a6fed4da65 Merge pull request #1184 from jitsi/separate-disconnect-overlay
Separate disconnect overlay
2016-12-07 10:44:56 -06:00
yanas
ce42d3ab5d Fixes unnecessary parameter 2016-12-07 10:24:37 -06:00
Lyubomir Marinov
d939ae5fb2 Rename the package of the Android app 2016-12-06 17:23:39 -06:00
yanas
642fa8d6f8 Fixes some issues pointed out from hristoterezov 2016-12-06 17:05:32 -06:00
Lyubomir Marinov
8f02b9249e Clarify error message with details 2016-12-06 16:49:38 -06:00
Lyubomir Marinov
7487684301 React Native 0.39.0 2016-12-06 15:52:53 -06:00
Lyubomir Marinov
02e3f6b3a2 Reduce the complexity of the source code 2016-12-06 15:42:06 -06:00
Lyubomir Marinov
727df551e6 Merge branch 'android-version' 2016-12-06 14:26:50 -06:00
damencho
e5dc7058c1 Adds android version variable.
The variables in gradle.properties can be overridden on command line like: -Pversion=1.
2016-12-06 13:57:38 -06:00
yanas
c9488d5ee9 Separate disconnect overlay. 2016-12-05 23:38:30 -06:00
yanas
4720088039 Merge pull request #1182 from jitsi/reduce-app.bundle.min.js
Reduce the impact of aui, aui-experimental, and jQuery-Impromptu on t…
2016-12-05 18:00:17 -06:00
Lyubomir Marinov
96a18ab2d5 [RN] Change 'Privacy Policty' and 'Terms of Service' to 'Terms and Conditions' 2016-12-05 11:33:37 -06:00
Lyubomir Marinov
137aace970 Merge branch 'fix_ring_overlay' 2016-12-04 13:29:31 -06:00
Lyubomir Marinov
4a8eca2020 Reduce the impact of aui, aui-experimental, and jQuery-Impromptu on the size of the minimized app bundle 2016-12-03 19:26:19 -06:00
hristoterezov
23efa7827c fix(filmstrip): JS error when the ringoverlay is shown 2016-12-02 16:23:12 -06:00
hristoterezov
fd24595baf Merge pull request #1180 from gerfigna/patch-2
Update api.md
2016-12-02 11:56:39 -06:00
Germán Figna
2331982e33 Update api.md
Fix videoConferenceJoined and videoConferenceLeft event names
2016-12-02 17:55:19 +01:00
Lyubomir Marinov
683fc84a28 Webpack's loaders are devDependencies 2016-12-02 10:11:47 -06:00
Illia Daynatovich
a0f5e5c8f8 Consistent spacing, closing in index.html 2016-12-02 09:11:06 -06:00
bgrozev
c9af2b956c Updates the manual installation docs
Adds the --host argument to the jicofo command, as suggested by exs on irc.
2016-12-01 18:11:41 -06:00
yanas
75b3bc6190 Merge pull request #1176 from jitsi/net_or_infra
Add 'isNetworkFailure' argument to PageReloadOverlay
2016-12-01 16:57:39 -06:00
paweldomas
6c716bcbb1 fix(conference.js): handle CONNECTION_DROPPED_ERROR 2016-12-01 15:55:00 -06:00
paweldomas
44beed6216 feat: distinguish between network and infra... failure 2016-12-01 11:38:44 -06:00
paweldomas
2352811c20 chore(package.json): use fixed version of Strophe
There was functionality added to lib-jitsi-meet that depends on
particular version of Strophe. It could be possibly broken without
testing the update.
2016-12-01 11:38:44 -06:00
Lyubomir Marinov
c1df375af4 Extend ./react/.eslintrc.js from ./.eslintrc.js 2016-12-01 08:30:35 -06:00
Дамян Минков
e8c631de01 Merge pull request #1174 from jitsi/fix-disabled-welcome-page
Fix disabled Welcome page broken with the introduction of React
2016-11-30 21:49:25 -06:00
Lyubomir Marinov
bdc67201e2 Fix disabled Welcome page broken with the introduction of React
The React-based rewrite looks whether there's a room name (in the
window's location) in order to choose between WelcomePage and
Conference. But app.js expects Conference to be rendered before it
builds a room name if WelcomePage is disabled and there's no room name.
A quick and dirty workaround is to render Conference within WelcomePage
so that the rendered result closely resembles index.html before the
React-based rewrite.
2016-11-30 19:54:09 -06:00
Lyubomir Marinov
0db33bb45c React propTypes as static class properties 2016-11-30 19:53:40 -06:00
Дамян Минков
9f26270a98 Merge pull request #1169 from jitsi/page_reload_reason
Log more details on page reload
2016-11-30 15:25:09 -06:00
paweldomas
df721cbd2e feat(analytics): add reason as label to page reload event 2016-11-30 14:30:44 -06:00
hristoterezov
8745efb81f Merge pull request #1158 from jitsi/log_collector
Log collector
2016-11-30 13:07:18 -06:00
yanas
e56f1a9ded Merge pull request #1167 from jitsi/fix_anonymous_domain
Fix the UI when anonymous domain auth is in use
2016-11-30 10:51:24 -06:00
Lyubomir Marinov
52fbb8f02c [RN] Fix React.PropTypes warning 2016-11-30 10:06:29 -06:00
Lyubomir Marinov
a1639b67a5 [RN] Don't display background colors underneath text on WelcomePage 2016-11-30 10:00:59 -06:00
paweldomas
3475ad4674 ref(LogCollector): adapts to caching in LogCollector 2016-11-30 07:38:39 -06:00
damencho
685d117a91 Fixes custom cert and key files for apache config. 2016-11-29 23:54:19 -06:00
damencho
e51f791ab0 Configures to use apache when this is the available web server. 2016-11-29 23:11:15 -06:00
yanas
0f2ba1cefe refactor(UIUtils): merges show and hide functions and cleans visibility setting 2016-11-29 15:07:18 -06:00
Lyubomir Marinov
1f457dfca5 Hyperlinks to legalese such as Privacy Policy and Terms of Service 2016-11-29 14:30:58 -06:00
Paweł Domas
841050953f Merge pull request #1172 from bgrozev/enable-tab-sharing
feat: Enables by default tab sharing for chrome.
2016-11-29 14:08:38 -06:00
Дамян Минков
c6296821c0 Merge pull request #1164 from gerfigna/patch-1
Update api.md. There is still work to be done, cause handling parameters in executeCommand is not currently correct and needs fixing. But for now displayname is the only command that requires a parameter.
2016-11-29 13:18:55 -06:00
paweldomas
7c8ca45d9a ref(LogCollector): extract JitsiMeetLogStorage 2016-11-29 11:30:37 -06:00
Boris Grozev
142f6e4518 feat: Enables by default tab sharing for chrome. 2016-11-29 11:30:02 -06:00
Lyubomir Marinov
f72e7ffbc2 Fix ESLint errors 2016-11-28 20:07:10 -06:00
Lyubomir Marinov
111b6e1c27 React Native 0.38.0, React 15.4.1 2016-11-28 20:07:10 -06:00
Дамян Минков
4add2d0590 Merge pull request #1168 from jitsi/exclude_build_dir
Add 'build' dir to jshintignore
2016-11-28 16:16:38 -06:00
Дамян Минков
cb0f7417b6 Merge pull request #1166 from jitsi/fix-reload-overlay-layout
fix(PageReloadOverlay):Basic layout fix
2016-11-28 16:00:35 -06:00
paweldomas
06eb7c6109 fix(jshintignore): exclude 'build' dir 2016-11-28 15:48:07 -06:00
damencho
4d0701cfda Fixes build. Wrong changelog file. 2016-11-28 14:18:23 -06:00
Дамян Минков
86bce1e5f6 Merge pull request #1152 from jitsi/deb-update
Updates debian packaging.
2016-11-28 13:45:51 -06:00
damencho
8da0d3a1f1 Removes dependencies to other components.
Now the web app can be installed separately from jicofo and jitsi-videobridge, or can be installed on machine running nginx or apache. Currently only nginx will be configured and apache config is left to user. Later we can add and the apache config. Renames jitsi-meet to jitsi-meet-web (just the web content) and jitsi-meet-web-config (configuring jetty, nginx or apache). A new jitsi-meet package will be introduced, a meta package depending on jicofo, jvb and the current packages.
2016-11-28 13:13:08 -06:00
hristoterezov
f32438b219 Merge pull request #1161 from jitsi/pinning-local-not-signal-unpin
Sending unpin after clicking local video and unpinning remote.
2016-11-28 12:06:56 -06:00
paweldomas
0238a10a4b fix(MessageHandler): hide the close button when 'persistent' 2016-11-28 11:05:18 -06:00
paweldomas
6669a96fd8 fix(Toolbar.js): hide recording and SIP buttons from the start 2016-11-28 11:05:18 -06:00
paweldomas
09406bfbfc fix(Toolbar): move login buttons to Profile
Authentication buttons no longer belong to the Toolbar.
2016-11-28 11:05:18 -06:00
paweldomas
51da40e90c ref(UIUtil): add showOrHideElement 2016-11-28 11:05:18 -06:00
paweldomas
52847bd28d fix(conference): crash with anonymous domain config 2016-11-28 11:05:18 -06:00
yanas
835d3c6a25 fix(PageReloadOverlay):Basic layout fix 2016-11-28 10:08:47 -06:00
Germán Figna
00e6e98a61 Update api.md 2016-11-24 11:34:24 +01:00
Lyubomir Marinov
6d90adcdf6 Fix make failure caused by npm link 2016-11-24 02:21:21 -06:00
Ilya Daynatovich
06d2fb0aca Optimize React in production 2016-11-24 02:21:21 -06:00
Ilya Daynatovich
c3428e8213 Split React components out of index.html 2016-11-24 02:21:02 -06:00
hristoterezov
57b0736ebb Merge pull request #1160 from jitsi/fix-unpinning-local-dominant-speaker
Fixes unpinning local user which is dominant speaker.
2016-11-23 17:40:47 -06:00
damencho
6211566c0c Sending unpin after clicking local video and unpinning remote.
If we:
 - pin a remote and click it, unpin is signalled.
 - pin a remote and the click another remote, the new one is pinned and signalled.
 - pin a remote and then click local. UI pins local, but unpinning remote is not signaled, fix addressed with this commit.
 - pin/unpin local, nothing is signalled.
2016-11-23 17:02:24 -06:00
Ilya Daynatovich
48bb427f71 The Makefile file format requires tab characters 2016-11-23 15:54:03 -06:00
hristoterezov
56f15356c7 Merge pull request #1159 from jitsi/non-focusable-close-toastr
Makes close button non-focusable.
2016-11-23 15:41:11 -06:00
damencho
8e6fd0ca95 Fixes unpinning local user which is dominant speaker.
It was not switching and staying on local video on unpinning, after change the last shown video will be used to switch to it.
2016-11-23 15:35:03 -06:00
damencho
b5dfc2a520 Makes close button non-focusable.
Prevents the close button to take focus while user clicks tab in the page, which will privent the toast to be closed.
2016-11-23 14:48:15 -06:00
Дамян Минков
4900fe020d Merge pull request #1156 from BeatC/fix-popover
Fix popover
2016-11-23 12:52:50 -06:00
paweldomas
94bd6bc330 feat(logging_config): add "disableLogCollector" option 2016-11-23 11:32:58 -06:00
paweldomas
36bcc6831b feat: use LogCollector to capture JS console logs 2016-11-23 11:32:58 -06:00
paweldomas
76c89845a8 feat: add logging config 2016-11-23 11:32:58 -06:00
paweldomas
b58f1cdd16 use logger instead of console 2016-11-23 11:32:55 -06:00
Ilya Daynatovich
141c64cd00 Add new variable 2016-11-23 12:32:59 +02:00
Ilya Daynatovich
51b802da84 fix problem with popover 2016-11-23 12:27:34 +02:00
yanas
71c27f308c Merge pull request #1155 from jitsi/removes-click-listeners
Removes click handlers when popup is hidden.
2016-11-22 17:33:30 -06:00
damencho
75b9adf01b Updates comments. 2016-11-22 17:31:01 -06:00
damencho
a079914603 Removes click handlers when popup is hidden. 2016-11-22 17:06:19 -06:00
yanas
4d3ca4a85a Merge pull request #1148 from jitsi/analytics
feat(Analytics): Multiple analytics handlers support
2016-11-22 13:53:02 -06:00
Lyubomir Marinov
afa1d5423c Merge branch 'prepare-for-react-1' 2016-11-21 21:00:13 -06:00
Ilya Daynatovich
766eb94c7d Prepare for React: Use Haste resolver for Web
In preparation for and as another early step in rewriting the Web
version of jitsi-meet using React, use Haste resolver which is able to
distinguish among platform-independent files, Web-specific and
mobile-specific ones.

Additionally, (1) make sure that Babel is capable of understanding React
files and (2) introduce React as a dependency.

The purpose is to repeatedly take small steps towards our goal and merge
them before they get in conflict with the separate ongoing advancement
of the Web version of jitsi-meet.
2016-11-21 20:26:50 -06:00
Дамян Минков
ad6e793615 Merge pull request #1146 from jitsi/adorable-io-avatars
fix: replace robohash avatars with adorable io
2016-11-21 10:00:57 -06:00
Paweł Domas
d900d3c3fd Merge pull request #1149 from jitsi/ss_resize
Fixes issue with not resizing properly if SS is on and the filmstrip is hidden
2016-11-18 12:42:11 -06:00
hristoterezov
7f315ef105 fix(VideoLayout): Issue with not resizing properly if SS is on and the filmstrip is hidden 2016-11-18 11:26:33 -06:00
hristoterezov
dc0a7e7628 feat(Analytics): Multiple analytics handlers support 2016-11-16 16:36:32 -06:00
yanas
6d1f42bf30 Merge pull request #1115 from jitsi/remove_css_classes
Removes unused css classes
2016-11-16 13:00:26 -06:00
yanas
c26b144f0d Merge pull request #1144 from kkrisstoff/chat-animation-fix
Chat animation fix
2016-11-16 12:45:40 -06:00
yanas
752f4dd5de Merge pull request #1141 from kkrisstoff/404-link-color
link class added
2016-11-16 11:24:48 -06:00
yanas
693ebbea9d Merge pull request #1143 from BeatC/visual-problems
Fix some ui bugs
2016-11-16 11:23:29 -06:00
yanas
b24a54aab2 fix: replace robohash avatars with adorable io 2016-11-16 11:06:25 -06:00
Konstantyn Pahsura
00aee89709 doc added 2016-11-16 14:09:22 +02:00
Дамян Минков
a5f243e18d Merge pull request #1142 from jitsi/fix-ff-desktop-sharing-message
fix: Firefox desktop sharing extension required dialog
2016-11-15 13:48:17 -06:00
yanas
d05ff9b4ee fix: Firefox desktop sharing extension required dialog 2016-11-15 12:41:24 -06:00
Konstantyn Pahsura
a67087b6de focus for chat changes 2016-11-15 20:18:40 +02:00
Ilya Daynatovich
e2ea16ea3f Fix some ui bugs 2016-11-15 16:37:09 +02:00
yanas
5098b64666 Merge pull request #1137 from BeatC/thumbnail-avatars
Thumbnail avatars
2016-11-14 17:47:59 -06:00
hristoterezov
66fbc28385 Merge branch 'kkrisstoff-add/tip-randomiser' 2016-11-14 15:02:58 -06:00
hristoterezov
4bcd75f15c refactor(close_pages): Refactor the close pages. 2016-11-14 15:02:27 -06:00
Konstantyn Pahsura
da6af88910 fixes and changes 2016-11-14 15:02:27 -06:00
Konstantyn Pahsura
1a91f4953b tip randomiser added 2016-11-14 15:02:27 -06:00
yanas
9a0d28720d Merge pull request #1139 from BeatC/FIX-adjust-branding1
Fix visual bugs in sidebar
2016-11-14 14:26:21 -06:00
hristoterezov
5b6956e25b Merge pull request #1101 from jitsi/stop_media_when_xmpp_drops
Stop the media when XMPP connection is dropped
2016-11-14 13:06:53 -06:00
Lyubomir Marinov
fd51108ae3 [iOS] Remove unnecessary CODE_SIGN_IDENTITY 2016-11-14 08:44:29 -06:00
Lyubomir Marinov
73a2eca51c [iOS] Strip unwanted architectures from embedded frameworks 2016-11-14 08:32:47 -06:00
Ilya Daynatovich
9bc24e1caa Fix aligning of indicator icon; Update logic for dynamically change of thumb indicators via font-size 2016-11-14 12:45:28 +02:00
Konstantyn Pahsura
3fc02bf6c2 link class added 2016-11-14 12:42:01 +02:00
Ilya Daynatovich
3bd4f1d5d8 Updated layout 2016-11-14 11:09:07 +02:00
Ilya Daynatovich
f3dbeea091 Make filmstrip indicators to resize dynamically 2016-11-14 11:09:07 +02:00
Ilya Daynatovich
d2ef94a7eb Fix problem with hint 2016-11-14 11:02:11 +02:00
Ilya Daynatovich
1d1d8defda Updated calculation of offset 2016-11-14 11:01:50 +02:00
Ilya Daynatovich
d0127b879d fixed dropdown colors 2016-11-14 11:01:50 +02:00
Ilya Daynatovich
cbc6943305 work on colors 2016-11-14 11:01:50 +02:00
Maxim Voloshin
9124aa2c87 Adjusted CSS for side toolbar elements 2016-11-14 11:01:50 +02:00
Lyubomir Marinov
8817f0c53d [iOS] Prepare for App Store release 2016-11-13 18:45:40 -06:00
Lyubomir Marinov
e4f9c17f8a [iOS] Prepare for App Store release 2016-11-13 18:27:23 -06:00
yanas
686ee1111a Merge pull request #1129 from BeatC/make-identical-text-input
Make identical text input
2016-11-11 15:45:46 -06:00
bgrozev
4b11767ac5 Merge pull request #1140 from jitsi/fix-desktop-sharing-screen-size
fix: desktop streming screen size
2016-11-11 13:53:39 -06:00
yanas
5545c0d905 fix: desktop streming screen size 2016-11-11 13:26:07 -06:00
bgrozev
611edf7e34 Merge pull request #1134 from jitsi/cosmetic-changes
Comment and empty lines removed
2016-11-11 13:18:41 -06:00
Lyubomir Marinov
7a37d70fb6 React Native 0.37.0 2016-11-11 11:57:25 -06:00
yanas
b2577090bd Merge pull request #1135 from BeatC/fix-js-from-styles-editions
Editions to "clean css from js"
2016-11-11 10:18:49 -06:00
Ilya Daynatovich
5b0777d4db Made inputs identical 2016-11-11 17:22:47 +02:00
Ilya Daynatovich
12c1574f07 renamed files 2016-11-11 17:13:18 +02:00
Ilya Daynatovich
5623a06996 renamed input-control block to form-control 2016-11-11 17:13:18 +02:00
Ilya Daynatovich
148960c6d2 made editions 2016-11-11 12:27:29 +02:00
yanas
ff8c6690ef Comment and empty lines removed 2016-11-10 17:27:19 -06:00
yanas
c926e95822 Merge pull request #1133 from jitsi/fix-tip-text-close-page
Modifies tip text in close page
2016-11-10 17:24:43 -06:00
yanas
0a28dd0cd3 Modifies tip text in close page 2016-11-10 17:02:34 -06:00
yanas
8caae4bfde Merge pull request #1111 from BeatC/FIX-clean-js-from-styles-1
Fix clean js from styles 1
2016-11-10 15:40:07 -06:00
yanas
a67c5a8dc7 Merge pull request #1108 from bgrozev/restrict-eslint-versions
chore: Only uses jslint 3+
2016-11-10 14:45:29 -06:00
yanas
cf38fde207 Updates to >= to match versions of 3+ 2016-11-10 14:20:30 -06:00
hristoterezov
4549b766f5 Merge pull request #1131 from jitsi/suspended-detection
Suspended detection
2016-11-10 13:45:14 -06:00
yanas
45126d4f3d Merge pull request #1132 from jitsi/calculate-correct-size-for-thumbnails
Calculate correct size for thumbnails
2016-11-10 13:17:32 -06:00
damencho
82926ef8c6 Detects suspended event, stops local video and shows overlay.
Also removes device change listener, cause when PC wakeups devices will be reconnected and we can try open the local video again.
2016-11-10 13:17:23 -06:00
yanas
42604971dc Merge pull request #1125 from BeatC/small-avatar-images
Fixed problem with resizing thumb avatars
2016-11-10 13:12:03 -06:00
yanas
95fcf5bae5 Change method name to fit better its purpose 2016-11-10 11:14:31 -06:00
Ilya Daynatovich
34acadc3b5 Rename method 2016-11-10 11:14:31 -06:00
Ilya Daynatovich
d3df082e3d Fix thumbnail overflow 2016-11-10 11:13:31 -06:00
Yana Stamcheva
fe7e9f333f [iOS] Fix launch screen text 2016-11-10 10:48:30 -06:00
Дамян Минков
92901e09e1 Merge pull request #1128 from BeatC/fix-toggle-filmstrip-shortcut
Moved keyboard initialization to filmstrip toolbar
2016-11-10 10:30:59 -06:00
Ilya Daynatovich
128b301a39 Fix the tests 2016-11-10 14:45:42 +02:00
Ilya Daynatovich
1b1b9475a4 Clean up js from styles 2016-11-10 13:32:12 +02:00
Ilya Daynatovich
5aff96e3b7 Updated in videolayout 2016-11-10 13:32:12 +02:00
Ilya Daynatovich
fb4e9b3c6d Work on fixing the tests 2016-11-10 13:32:12 +02:00
Ilya Daynatovich
a8a6b38c28 Updated method for showing/hiding elements 2016-11-10 13:32:12 +02:00
Maxim Voloshin
68ab87cc0d Hide DOM elements using css class 2016-11-10 13:32:12 +02:00
Ilya Daynatovich
986c29ca5d updated filmstrip handler 2016-11-10 12:18:33 +02:00
Yana Stamcheva
d7fc20b607 [iOS] Center launch screen text 2016-11-09 19:58:48 -06:00
damencho
96b280668d Adds suspend overlay. 2016-11-09 16:32:09 -06:00
Lyubomir Marinov
66b7404961 [iOS] Try to fix the launch screen 2016-11-09 15:06:07 -06:00
hristoterezov
7f3323f7c0 Merge pull request #1130 from jitsi/fix-stopping-sharedvideo
Stops player update before sending stopping of shared video.
2016-11-09 14:20:38 -06:00
damencho
e34d86b485 Stops player update before sending stopping of shared video.
We used to stop player updates on self presence received, so between stop and self presence we can send a playing update which will provoke adding the video again to other participants.
2016-11-09 12:42:47 -06:00
Lyubomir Marinov
34ea330aa3 [iOS] Try to fix the launch screen
The launch screen appears not centered and/or clipped on certain
devices. Unfortunately, I cannot reproduce it when I deploy the app to
devices and Simulator from Xcode 8.1. It may (or may very well not) be
that the Xcode version matters and the enterprise build server does
appear to use an older Xcode version.
2016-11-09 12:41:20 -06:00
Дамян Минков
70c3c1a21c Merge pull request #1102 from jitsi/limit_display_name
Limit long display names
2016-11-09 10:51:46 -06:00
hristoterezov
98d3755859 Merge pull request #1121 from jitsi/fix-two-panels-shown
Hides all side panels before showing new one.
2016-11-09 10:42:49 -06:00
hristoterezov
a4a1579c84 style(conference): Rename MAX_DISPLAYNAME_LENGTH 2016-11-09 10:22:43 -06:00
Ilya Daynatovich
20c6dba599 Moved keyboard initialization to filmstrip toolbar; Replaced toggle filmstrip button from extended toolbar 2016-11-09 12:41:23 +02:00
Lyubomir Marinov
056fc64f7a Try to fix the enterprise build of the iOS app
LaunchScreen.xib compiles locally with Xcode 8.1 but the enterprise
build fails. A possibility is that the enterprise build machine is
running an older Xcode version.
2016-11-08 18:14:43 -06:00
Yana Stamcheva
cb0ec3f702 [iOS] App icon(s) 2016-11-08 17:47:23 -06:00
yanas
084929f875 Merge pull request #1122 from jitsi/thumbnail-calculations
Thumbnail calculations
2016-11-08 17:40:46 -06:00
Yana Stamcheva
10f3f01da8 [iOS] Launch screen 2016-11-08 16:12:20 -06:00
Дамян Минков
1f75683581 Merge pull request #1055 from BeatC/incorrect-password-hint
Incorrect password hint
2016-11-08 14:29:06 -06:00
bgrozev
29b86a7fe3 Merge pull request #1126 from jitsi/fix-thumbnail-menu-css-class
fix: Use a separate css class for thumbnail menu
2016-11-08 12:20:55 -06:00
yanas
bb80bf4144 fix: Use a separate css class for thumbnail menu 2016-11-08 11:47:22 -06:00
yanas
92df64f706 fix: Adds a separate css class for thumbnail menu 2016-11-08 11:45:28 -06:00
Yana Stamcheva
fc3e0147e0 [Android] Launcher icons 2016-11-08 10:38:13 -06:00
Дамян Минков
b2d2209236 Merge pull request #1123 from bgrozev/log-pinned
Logs pinned/unpinned events
2016-11-08 10:16:01 -06:00
Ilya Daynatovich
f4e6dceaa4 Return Impormptu api when create dialog 2016-11-08 17:16:00 +02:00
Ilya Daynatovich
f09a9be523 Fixed problem with resizing thumb avatars 2016-11-08 13:36:43 +02:00
Ilya Daynatovich
2b08950294 Fix the tests 2016-11-08 13:18:10 +02:00
Ilya Daynatovich
62713bf87c Editions in PR 2016-11-08 13:18:10 +02:00
Ilya Daynatovich
7a2eca3706 fix reopening require pass dialog 2016-11-08 13:18:10 +02:00
Ilya Daynatovich
22b7142159 Add select input after incorrect input 2016-11-08 13:18:10 +02:00
Ilya Daynatovich
cba5528478 Move error color to theme 2016-11-08 13:18:10 +02:00
Ilya Daynatovich
5e8c5b3ce4 Add JSDoc 2016-11-08 13:18:10 +02:00
Ilya Daynatovich
d4df6f2dda Got rid of direct usage of room locker 2016-11-08 13:18:10 +02:00
Ilya Daynatovich
257bb49c52 Add Require password dialog 2016-11-08 13:18:09 +02:00
Boris Grozev
6740b9edf6 feat: Logs pin/unpin events via analytics. 2016-11-07 22:13:21 -06:00
Boris Grozev
cf241effbf style: Fixes indentation, spelling. 2016-11-07 21:23:33 -06:00
Boris Grozev
c0c198098b style: Renames variables, adds a FIXME. 2016-11-07 20:47:43 -06:00
Boris Grozev
ac0ee771ed docs: Adds a FIXME. 2016-11-07 20:45:52 -06:00
Boris Grozev
0ca9389e4b cleanup: Simplify code. 2016-11-07 20:39:28 -06:00
Boris Grozev
9910caf29f docs: Fix some documentation. 2016-11-07 20:38:14 -06:00
yanas
78dbaa9b21 Revert wrongly removed comment 2016-11-07 17:00:50 -06:00
yanas
5c956de99e Merges changes with latest master. 2016-11-07 16:50:08 -06:00
damencho
91340a5268 Hides all side panels before showing new one. 2016-11-07 14:30:02 -06:00
bgrozev
38e44440d0 Merge pull request #1114 from jitsi/fix_page_reload_log
Log the page reload from one place
2016-11-06 11:09:56 -06:00
yanas
02495e3b31 Merge pull request #1116 from jitsi/edit-displayname-overlap
Adds a property to hide display name and disable update view.
2016-11-05 10:19:31 -05:00
bgrozev
3360c62392 Merge pull request #1117 from jitsi/directory-name-casing-fix
Fixes casing of the tokendata directory.
2016-11-04 18:32:46 -05:00
Emil Ivov
05e9dfca92 Fixes casing of the tokendata command. 2016-11-04 17:41:16 -05:00
damencho
510c650b7b Adds a property to hide display name and disable update view.
Adds a property to hide display name and disable update view in SmallVideo. Localvideo hides displayName and disabled update view while users is editing its name and resumes normal behaviour when editing finishes.
2016-11-04 17:02:30 -05:00
hristoterezov
c41c219206 fix(Thumbnails): removes unused css classes 2016-11-04 15:24:05 -05:00
Lyubomir Marinov
4d335e086b Reduce the number of unnecessary Redux state changes 2016-11-04 13:28:47 -05:00
Lyubomir Marinov
3fa62c3757 Fix thumbnail reordering
Don't use Array.prototype.sort() because (1) it operates in place and,
thus, mutes the Redux state and (2) it is not necessarily stable and,
thus, unnecessarily shuffles the thumbnails.
2016-11-04 13:13:26 -05:00
paweldomas
d256bc317a fix(log): log the page reload from one place 2016-11-03 16:18:05 -05:00
yanas
101c413a3c Merge pull request #1110 from jitsi/filmstrip-button-editions
Filmstrip button editions
2016-11-03 15:46:00 -05:00
yanas
c3e0d7ff56 Fix conflicts. 2016-11-03 14:42:23 -05:00
Дамян Минков
826a7fd220 Merge pull request #1109 from jitsi/fix_toolbar_popups2
fix(toolbar): popups
2016-11-03 14:36:33 -05:00
Дамян Минков
e5607d0371 Merge pull request #1096 from kkrisstoff/task/video-thumbnail-menu-should-appear-on-hover
show/hide video thumbnail menu on hover
2016-11-03 13:52:08 -05:00
hristoterezov
b3b50fe346 fix(toolbar): popups 2016-11-03 13:47:15 -05:00
Boris Grozev
16a2b0377a chore: Only uses jslint 3+
because older versions don't work with our .jslintrc file
2016-11-03 13:18:56 -05:00
Ilya Daynatovich
8ba7a354e5 Remove duplicate event handler 2016-11-03 20:02:44 +02:00
Ilya Daynatovich
bbbd01b26c Adjustments in filmstrip section 2016-11-03 17:54:23 +02:00
Konstantyn Pahsura
e7d089c815 Merge branch 'jit/master' into task/video-thumbnail-menu-should-appear-on-hover 2016-11-03 17:30:19 +02:00
Ilya Daynatovich
24169743e7 Clean up filmstrip styles 2016-11-03 17:07:48 +02:00
Ilya Daynatovich
02ae3b3053 Add wrapper 2016-11-03 16:26:56 +02:00
Ilya Daynatovich
69e4f49e74 Add bunch of JSDocs 2016-11-03 16:21:14 +02:00
Ilya Daynatovich
1328870a2b fix bug with F shortcut 2016-11-03 16:21:14 +02:00
Ilya Daynatovich
51d48e18c6 Refactor filmstrip module 2016-11-03 16:21:14 +02:00
hristoterezov
4b1dfb9a33 Merge pull request #1095 from BeatC/shortcuts-reversed
Shortcuts reversed
2016-11-03 09:14:05 -05:00
Konstantyn Pahsura
9633919e32 css class for remote video specified 2016-11-03 15:40:43 +02:00
Konstantyn Pahsura
76e55f1132 show/hide menu if elem hovered 2016-11-03 15:40:43 +02:00
Ilya Daynatovich
30e717bd20 Rename classname; Refactor click on video method 2016-11-03 12:13:03 +02:00
Ilya Daynatovich
d703271c96 Fix bug with resizing when using shortcut for switching btw videos 2016-11-03 11:48:48 +02:00
Ilya Daynatovich
c6c701330a Change order of remote videos when clicking on shortcut 2016-11-03 11:48:48 +02:00
yanas
f02f050e56 Merge pull request #1106 from jitsi/disabled-sidepanels-load
Disables loading side panels when they are disabled.
2016-11-02 18:16:13 -05:00
damencho
f6609524ea Disables loading side panels when they are disabled.
Adds some safety checks for disabled contactlist.
2016-11-02 16:14:36 -05:00
Lyubomir Marinov
6eb767ba11 [React Native] Disable audio levels
The audio levels are gathered by lib-jitsi-meet via polling of
RTCPeerConnection.getStats() which is very slow on Android. Since the
mobile app makes no use of audio levels, it is easiest to disable them
for now in order to not penalize the app.
2016-11-02 14:44:42 -05:00
yanas
c4d0340956 Merge pull request #1034 from m-voloshin/FEATURE-hide-filmstrip
Filmstrip is extended with "Hide" button
2016-11-02 14:24:45 -05:00
hristoterezov
10f04575ed Merge pull request #1060 from kkrisstoff/task/toolbar-side-panel
make side panels init from js
2016-11-02 13:22:55 -05:00
Дамян Минков
a9c984e7db Merge pull request #1091 from BeatC/customer-agreement
Customer agreement
2016-11-02 13:18:33 -05:00
yanas
03fd87476a Merge pull request #1104 from BeatC/adjust-notification-width
Adjusted notification width
2016-11-02 12:40:05 -05:00
Дамян Минков
317f0e736c Merge pull request #1105 from jitsi/fix_frozen_msg
fix(LargeVideoManager): frozen displayname in a msg
2016-11-02 11:58:58 -05:00
Konstantyn Pahsura
9f280e320d _.template removed 2016-11-02 18:42:39 +02:00
Konstantyn Pahsura
a1e098680d make side panels init from js 2016-11-02 18:42:39 +02:00
paweldomas
ede4808ec4 fix(LargeVideoManager): frozen displayname in a msg
The "data-i18n-options" attribute value is stored in jQuery cache and
at the time when i18-next tries to access it to do the translation
it gets the old value from the cache and the message is not updated
correctly. Passing the "msgOptions" explicitly to "translateElement"
fixes the problem by avoiding jQuery cache.
2016-11-02 11:32:40 -05:00
yanas
e86294191a Merge pull request #1098 from BeatC/toolbar-splitter-restyle
Restyled toolbar splitter
2016-11-02 09:27:08 -05:00
yanas
0bf372b8ab Merge pull request #1103 from jitsi/esc-shortcuts-dialog
Esc closes shortcuts dialog
2016-11-02 09:22:34 -05:00
Ilya Daynatovich
ae7ad8b456 Adjusted notification width 2016-11-02 13:09:18 +02:00
Ilya Daynatovich
16c70fddba Restyled toolbar splitter 2016-11-02 12:13:30 +02:00
Дамян Минков
e679509c56 Merge pull request #1094 from bgrozev/conn-quality
Conn quality
2016-11-01 17:46:13 -05:00
hristoterezov
f08e9afc19 Merge pull request #1069 from jitsi/update-i18next
Updates i18next and bundles default translations.
2016-11-01 17:02:17 -05:00
damencho
215d8b1355 Updates show/hide of shortcuts dialog.
Fixes not able to close it with esc button.
2016-11-01 16:48:29 -05:00
hristoterezov
b1f129a53a fix(Chat): Display long nicknames with ... 2016-11-01 16:41:58 -05:00
hristoterezov
a6a7e81a0f feat(DisplayName): Limit local and remote display name to 50 chars 2016-11-01 16:40:52 -05:00
damencho
aaca510f8a Updates jsdoc. 2016-11-01 15:34:21 -05:00
yanas
3ad1573130 Merge pull request #1100 from jitsi/close-page-update
Close page update
2016-11-01 15:31:43 -05:00
paweldomas
d60146c6a8 fix(conference): leave the room when XMPP connection is dropped
It looks weird when the page reload overlay appears and the conference
continues in the background (the connection to the JVB remains active).
The library will not recover and the conference can not continue without
the signalling, so the room should be left and media stopped.
2016-11-01 15:08:59 -05:00
Дамян Минков
31d6a41759 Merge pull request #1099 from jitsi/fix_toolbar_popups
fix(toolbar): popups
2016-11-01 15:07:15 -05:00
hristoterezov
e731f6c3f3 feat(translation): ES6 support 2016-11-01 15:05:43 -05:00
damencho
1f200b63a7 Updates i18next and bundles default translations. 2016-11-01 15:05:23 -05:00
damencho
ae01275729 Renames variables. 2016-11-01 14:46:47 -05:00
Lyubomir Marinov
fab93a170e [iOS] Mark the app as VoIP 2016-11-01 13:59:53 -05:00
damencho
f28311a2ce Changes line color for static pages. 2016-11-01 13:28:04 -05:00
damencho
7da8db74b0 Adds default title to static pages. 2016-11-01 13:25:05 -05:00
damencho
5feeef0122 Handles data from feedback callback and use it for correct close page. 2016-11-01 13:14:21 -05:00
damencho
87f7be2182 Updates close page and adds a second one.
Close pages text are different depending whether feedback was provided or not.
2016-11-01 13:13:07 -05:00
damencho
e81a10de4a Reports to close callback whether feedback is submitted. 2016-11-01 13:10:58 -05:00
hristoterezov
8d9863a635 fix(toolbar): popups 2016-11-01 11:07:27 -05:00
Lyubomir Marinov
456b3030e3 [iOS] Fix the Xcode project file for CocoaPods 2016-11-01 07:58:26 -05:00
Ilya Daynatovich
d72695ae0f Added app substitution 2016-11-01 11:30:01 +02:00
yanas
e6748cf153 Merge pull request #1093 from jitsi/text-updates
Text updates.
2016-10-31 17:40:18 -05:00
yanas
a5e7c86125 Merge pull request #1092 from jitsi/update-lock-state
Updates lock state
2016-10-31 17:29:11 -05:00
hristoterezov
a7a7f269c3 Merge pull request #1054 from kkrisstoff/task/make-extended-toolbar-dynamically-created-buttons
make extended buttons dynamic
2016-10-31 16:50:14 -05:00
Boris Grozev
c815b1f25b feat: Updates the GSM bars' thresholds.
Adapts to changes in lib-jitsi-meet. Uses an Array which guarantees the
order of its elements, and avoids setting a css property multiple times.
2016-10-31 16:08:24 -05:00
Boris Grozev
c98ffdc817 refactor: Don't calculate remote connection quality. 2016-10-31 16:07:25 -05:00
Boris Grozev
09016c2182 refactor: Moves more code to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
Boris Grozev
22b2f17234 refactor: Moves more code to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
Boris Grozev
0c1bef927b Don't use no double non-positives. 2016-10-31 16:07:25 -05:00
Boris Grozev
4aa47a7901 feat: moves isConnectionInterrupted to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
Boris Grozev
051db50b3f feat: Moves connectionquality to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
yanas
c726a1a879 Text updates. 2016-10-31 16:00:11 -05:00
damencho
2edb279d22 Fixes password set remotely text. 2016-10-31 14:40:46 -05:00
Lyubomir Marinov
20e7c6d873 [iOS] Crashlytics 2016-10-31 14:08:25 -05:00
damencho
96479e0474 Fixes password and isModerator check in invite dialog. 2016-10-31 14:01:22 -05:00
Дамян Минков
1036768b2a Merge pull request #1080 from jitsi/dont_show_again
Implement dont show again util
2016-10-31 13:36:50 -05:00
Konstantyn Pahsura
77e28a6a45 toolbar buttons fixes 2016-10-31 20:25:27 +02:00
hristoterezov
a8b69d5cd8 feat(MessageHandler): Implement dont show again utility 2016-10-31 13:02:41 -05:00
Дамян Минков
9054e72b7f Merge pull request #1090 from jitsi/file_loading_err
Prevent from displaying broken page
2016-10-31 13:00:06 -05:00
Maxim Voloshin
dc93940bbd Filmstrip is extended with "Hide" button 2016-10-31 19:59:45 +02:00
Lyubomir Marinov
b6a6c99c9d [React Native] Enable scrolling of the thumbnails 2016-10-31 12:33:53 -05:00
Ilya Daynatovich
544792b9cc Editions in colors 2016-10-31 19:21:15 +02:00
hristoterezov
7e2fe30472 feat(JitsiLocalStorage): Implement localStorage wrapper 2016-10-31 12:11:03 -05:00
Ilya Daynatovich
5e7e5b317b Fix texts 2016-10-31 19:02:32 +02:00
Ilya Daynatovich
a63bb5d906 Add policy section 2016-10-31 18:23:28 +02:00
paweldomas
0354dd2c24 feat(index.html): prevent from displaying broken page
The commit adds an error listener which will replace the document body
with an error message if any of the files required for the app to
be displayed correctly fails to load.
2016-10-31 10:50:01 -05:00
Ilya Daynatovich
647f577332 Rearrange overlay layout 2016-10-31 17:35:22 +02:00
Kostiantyn Pashura
be1ba21166 make extended buttons dynamic 2016-10-31 13:30:16 +02:00
Lyubomir Marinov
8b2491c7a2 [tvOS] Automatic Xcode project file fixes
Xcode insists on automatically fixing the project file with tvOS
support. In order to not have to constantly ignore these automatic
changes when committing, commit them.
2016-10-30 20:43:29 -05:00
Lyubomir Marinov
f987a53313 [iOS] Clean up the Xcode project file 2016-10-30 20:26:39 -05:00
Lyubomir Marinov
d875b35b32 [Android] Crashlytics 2016-10-30 18:12:33 -05:00
yanas
df76d6990e Merge pull request #1062 from m-voloshin/FEATURE-tooltip-for-contact-list
New tooltip for contact list
2016-10-28 16:11:01 -05:00
yanas
86ffccb95a Merge pull request #1076 from kkrisstoff/UI/bugs-and-adjustments
audio_level oppacity and addParticipant button name
2016-10-28 16:10:47 -05:00
yanas
50494eb745 Updates to master 2016-10-28 13:20:38 -05:00
Konstantyn Pahsura
28f719b58a dropdown styles fixes 2016-10-28 13:09:47 -05:00
yanas
d384cd77c6 Merge pull request #1085 from jitsi/video-thumbnail-hover
Update _variables.scss
2016-10-28 12:54:25 -05:00
yanas
bb3384dc7c Update _variables.scss 2016-10-28 12:53:50 -05:00
yanas
ae9819a45c Merge pull request #1075 from BeatC/menu-restyling-editions
Adjust alignment of remote video menu
2016-10-28 12:43:12 -05:00
yanas
40473a16c7 Merge pull request #1084 from jitsi/toolbar_animation
fix(Toolbar): Both toolbars are displayed in the same time
2016-10-28 12:40:37 -05:00
hristoterezov
baad364b04 fix(Toolbar): Both toolbars are displayed in the same time 2016-10-28 12:39:25 -05:00
Дамян Минков
d2f52b534a Merge pull request #1083 from jitsi/fix_hover_thumbnail
fix(Thubmnail_PopupMenu): the thumbnail should be considered hovered when the popup menu is hovered
2016-10-28 11:59:36 -05:00
Lyubomir Marinov
532010c916 Update project files as recommended by Xcode 2016-10-28 11:30:04 -05:00
paweldomas
e349cc59ad style(translation): adds comment about lang auto detection 2016-10-28 11:17:09 -05:00
hristoterezov
634a18e847 fix(Thubmnail_PopupMenu): the thumbnail should be considered hovered when the popup menu is hovered 2016-10-28 11:16:40 -05:00
paweldomas
01581196f0 Merge pull request #1082 from 'BeatC/config-option-to-freeze-translation'
Add detect translation freeze in interface config
2016-10-28 11:14:22 -05:00
Konstantyn Pahsura
d7ed0bac69 audio_level oppacity and addParticipant button name 2016-10-28 18:39:40 +03:00
Ilya Daynatovich
209272f940 Add detect translation freeze in interface config 2016-10-28 16:18:08 +03:00
Ilya Daynatovich
138ed6a487 Fixed interface 2016-10-28 13:52:08 +03:00
Ilya Daynatovich
d84d0b65ca Adjust alignment of remote video menu 2016-10-28 13:52:08 +03:00
Paweł Domas
2fe69d409b Merge pull request #1071 from jitsi/ongoing-work-video-thumbnails
Ongoing work video thumbnails
2016-10-27 17:13:27 -05:00
damencho
9764fe52de Removed not needed setting of the quality to 0.
We now just hide the icon with values and show the interrupted one. Calling this one was causing troubles like flickering and stats popover not able to hide, once shown. On hover we are calling updateView which ends to this call which destroy and create the popover, which maybe is leading to this problems.
2016-10-27 16:56:32 -05:00
damencho
131d5cc256 Change the colour of the connection indicator badge. 2016-10-27 15:27:28 -05:00
Дамян Минков
7fead897ed Merge pull request #1079 from jitsi/fix_avatar_z_index
Do not display avatar on top of the connection problem messages
2016-10-27 15:26:22 -05:00
paweldomas
e3d5bd3dfb fix(css): do not display avatar on top of the messages
Previously the z-index was introduced in order to have the avatar
visible on top of the black video element, but now we're always hiding
the video element when the avatar is displayed, so it's no longer
required.
2016-10-27 14:52:32 -05:00
damencho
e3edef2999 Renames videocontainer overlay to hoverOverlay. 2016-10-27 14:32:22 -05:00
damencho
328ff54423 Fixes undefined error and shared video. 2016-10-27 14:08:06 -05:00
damencho
2807346bdf Makes decision what to show in avatar consistent (in updateView). 2016-10-27 13:17:17 -05:00
damencho
fec8f4e005 Fixes an issue with mixing visibility functions for elements.
In small video we use UIUtil.setVisibility, so we should not use jquery show/hide for the same element.
2016-10-26 17:36:07 -05:00
damencho
3ae299cf2b Fixes comments. 2016-10-26 17:18:36 -05:00
Дамян Минков
bbf68a97bb Merge pull request #1072 from jitsi/fix_stop_rec_dialog
Make the stop recording dialog work again
2016-10-26 16:14:28 -05:00
paweldomas
739e2bd35a fix(Recording): broken stop recording dialog 2016-10-26 16:10:45 -05:00
damencho
7acda03024 Adds an overlay to dim videos when showing displayname. 2016-10-26 15:51:09 -05:00
damencho
5cead57723 Reverts hover over small video to show display name. 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
1e24be6dd4 Fix editing the name 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
8d80e13e31 Fix connection indicator bars 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
69b79b7687 Fix icon styles 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
698b3caeb8 fix styles in connection indicators 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
323684c5fe fix conflicts after rebase 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
09e3fb9917 Fixed hack with displayname margin 2016-10-26 15:51:09 -05:00
yanas
a17a98991c Ongoing work on video thumbnail layout 2016-10-26 15:51:09 -05:00
yanas
3fe43abdea Move the display name to the center 2016-10-26 15:51:09 -05:00
Lyubomir Marinov
64112e00e6 react-native-webrtc 0.53.1 2016-10-26 15:20:06 -05:00
Дамян Минков
61651f7060 Merge pull request #1070 from jitsi/mute_participant_dialog
feat(Mute_Participant): Implement warning dialog for muting remote participant
2016-10-26 15:05:29 -05:00
hristoterezov
09c8e14465 feat(Mute_Participant): Implement warning dialog for muting remote participant 2016-10-26 14:57:09 -05:00
hristoterezov
0bb772d242 Merge pull request #1059 from BeatC/toolbar-animation
Change main toolbar animation; optimize mousemove handler
2016-10-26 11:52:01 -05:00
George Politis
68b587b110 Merge pull request #1064 from jitsi/5xx_reloads
Page reloads on BOSH HTTP errors
2016-10-26 11:39:44 -05:00
Дамян Минков
dd4a5f2705 Adds 404 error page in default configs. 2016-10-26 09:21:15 -05:00
yanas
79c52e1a77 Merge pull request #1061 from BeatC/button-shifted
Button shifted
2016-10-25 22:29:52 -05:00
hristoterezov
221f6d1d68 Merge pull request #1056 from jitsi/translations-update
Translations update
2016-10-25 18:11:15 -05:00
hristoterezov
ea0f0da8a4 feat(JitsiPopover): Add onBeforePosition option 2016-10-25 17:57:29 -05:00
hristoterezov
d2ccd20c78 Merge branch 'm-voloshin-FIX-frozen-tooltips' 2016-10-25 16:52:29 -05:00
hristoterezov
8762aae111 fix(SmallVideo): Add translateElement call removed by previous commit 2016-10-25 16:52:11 -05:00
hristoterezov
05fcaa2554 Merge branch 'FIX-frozen-tooltips' of git://github.com/m-voloshin/jitsi-meet into m-voloshin-FIX-frozen-tooltips 2016-10-25 16:51:03 -05:00
paweldomas
3c6d464b32 feat(PageReload): make the reload interval random, between 10-30 sec 2016-10-25 15:58:09 -05:00
paweldomas
c95c46edac feat(conference): reload the page when XMPP connection is dropped 2016-10-25 15:57:53 -05:00
damencho
b2a1c9881e Fixes comments from review.
Adds a safe check, i18n is expecting undefined not null. Fix a method name and translation to be at placeholder.
2016-10-25 15:18:56 -05:00
Lyubomir Marinov
9f10a059ef React Native 0.36.0, React 15.3.2 2016-10-25 14:57:18 -05:00
Maxim Voloshin
86f1d287d7 Fix comments 2016-10-25 20:40:43 +03:00
Maxim Voloshin
6820ec8d23 Show and hide indicators using pure js 2016-10-25 20:40:00 +03:00
Lyubomir Marinov
4997ae79e3 Fix toolbar's mute buttons when starting muted
The toolbar's mute buttons depict respective features/base/media states.
However, (un)muting is practically carried out by features/base/tracks.
When the mobile app enters a conference configured to invite the joining
participant to mute themselves, the tracks would be muted but the
toolbar's mute buttons would not reflect that.
2016-10-25 11:43:15 -05:00
Maxim Voloshin
c76fa50aa5 New tooltip for contact list 2016-10-25 19:27:27 +03:00
Maxim Voloshin
1c218191b0 Apply tooltip for indicator once 2016-10-25 17:50:28 +03:00
Ilya Daynatovich
84d71d558e fix invite dialog design 2016-10-25 17:33:51 +03:00
Ilya Daynatovich
659c84d696 fix margin 2016-10-25 17:24:11 +03:00
Ilya Daynatovich
99d50ade11 Change main toolbar animation; optimize mousemove handler 2016-10-25 14:55:43 +03:00
Дамян Минков
f271eb4610 Merge pull request #980 from kkrisstoff/task/add-error-page
error layout added
2016-10-24 16:31:16 -05:00
damencho
076f7a82de Updates translation readme. 2016-10-24 14:42:23 -05:00
damencho
547f96c0c1 Merge branch 'master' into translations-update 2016-10-24 14:40:50 -05:00
damencho
8a789aa608 Fixes some translations. 2016-10-24 14:17:22 -05:00
yanas
8fd23771f4 Merge pull request #1058 from kkrisstoff/select2-background-changes
dropdown color changes
2016-10-24 13:02:54 -05:00
Konstantyn Pahsura
15bc3b9ad4 dropdown color changes 2016-10-24 20:40:23 +03:00
yanas
3196ffd941 Merge pull request #1042 from m-voloshin/FEATURE-hd-label-relocation
Relocate "HD" label
2016-10-24 12:21:26 -05:00
Kostiantyn Pashura
84d2b79b4f 404 error page added 2016-10-24 19:33:08 +03:00
bgrozev
a4e1f939cd Merge pull request #1057 from jitsi/fix_connection_problem_z_idx
Reduce the z index of the connection problems message
2016-10-24 11:09:48 -05:00
damencho
563ea1244c Updates openMessageDialog to get only key and options. 2016-10-21 22:10:33 -05:00
hristoterezov
3dca6f2354 Merge pull request #1008 from jitsi/page_reload_overlay
Page reload overlay
2016-10-21 14:36:06 -05:00
paweldomas
bf5a1d1f8e fix(videolayout css): reduce conn problem msg z-index
For small window sizes and many video thumbnails the message may go on
top of the thumbnails.
2016-10-21 14:03:34 -05:00
paweldomas
a615649933 fix(PageReloadOverlay): changes text and adjusts style 2016-10-21 13:50:23 -05:00
paweldomas
3c0c823a37 ref(Overlay): introduce base class 2016-10-21 13:50:08 -05:00
damencho
efed4bf13c Merge branch 'master' into translations-update 2016-10-21 13:19:23 -05:00
damencho
5217bf0bb8 Removes translateString and use translateElement.
Removing translateString forces using data-i18n attributes, to make sure we do not forget to set them. Missing data-i18n attributes is a problem with late loading where we can end up without translation, without text. Missing data-i18n attributes is also problem that strings will not be translated when changing language.
Fixes a bug in invite dialog, where remove password button was shown for non moderators.
2016-10-21 12:11:22 -05:00
paweldomas
98de4c90b5 fix(RingOverlay): puts the "ring overlay" back below the toolbars 2016-10-21 10:47:21 -05:00
paweldomas
8c426e8bb7 fix(ToolbarToggle): restore call overlay to the timeout check 2016-10-21 10:27:10 -05:00
paweldomas
5bc727804f fix(PageReloadOverlay): do not log message every second 2016-10-21 10:18:03 -05:00
yanas
32bfebc924 Merge pull request #1033 from BeatC/add-jsdoc
Add JSDoc and rename method
2016-10-21 10:12:31 -05:00
paweldomas
8f8b1385fa ref(ConferenceUrl): converts to class and binds instance to global APP
Converts ConferenceUrl to a class and binds an instance to the global
APP variable, as requested by HTerezov.
2016-10-21 09:46:09 -05:00
paweldomas
d342f93547 fix(Invite): remove unused 'updateInviteUrl' 2016-10-21 09:25:14 -05:00
paweldomas
ecfc56461e fix(ToolbarToggler): remove Yoda condition
Is not very readable and is not used across the project
2016-10-21 09:22:17 -05:00
Maxim Voloshin
d09a8b1896 Adjusted styles for "Live Streaming" indicator. 2016-10-21 13:38:12 +03:00
Maxim Voloshin
88be44b472 Relocated "HD" label 2016-10-21 13:38:12 +03:00
Дамян Минков
4b82bc0e33 Merge pull request #1049 from jitsi/fix_thank_you_dialog
fix(feedback): Fixes the logic for the thank you dialog
2016-10-20 22:30:18 -05:00
hristoterezov
3022754f19 fix(feedback): Fixes the logic for the thank you dialog 2016-10-20 14:20:28 -05:00
paweldomas
f7bfe8d8bf feat: introduce ConferenceUrl module
We need to make sure that on the page reload all original parameters
used to load the conference are preserved. New modules helps to manage
different types of conference URLs like the one used for invites and
the one for reloading the page.
2016-10-20 13:53:24 -05:00
paweldomas
210605d8f3 fix(MessageHandler): suppress the notifications on top of the overlay 2016-10-20 13:52:35 -05:00
paweldomas
52344ff741 fix(ToolbarToggler): restore 'force' arg in timeout logic 2016-10-20 13:52:35 -05:00
paweldomas
687b0cad8e fix(ToolbarToggler): remove call overlay from the timeout check
Remove check for the call overlay being visible in postponing
the toolbar being hidden, as we don't want to have it displayed at all
when the overlay is there.
2016-10-20 13:52:35 -05:00
paweldomas
0053c4df49 feat(PageReloadOverlay): log the reload event 2016-10-20 13:52:35 -05:00
paweldomas
2a5b4dde31 feat: implement PageReloadOverlay 2016-10-20 13:52:35 -05:00
paweldomas
d2690444ac fix(overlay): bring overlay on top of the toolbars 2016-10-20 13:52:35 -05:00
paweldomas
c473178dfe fix(UserMediaPermissionsGuidanceOverlay): broken display 2016-10-20 13:50:11 -05:00
paweldomas
229a3b4418 fix(conference): disconnect on VIDEOBRIDGE_NOT_AVAILABLE error
Will disconnect on ConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE.
Show the same message when either JVB is not available or Jicofo
disconnects.
2016-10-20 13:50:11 -05:00
yanas
63dfa5247f Merge pull request #1048 from BeatC/menu-restyle
Menu restyle
2016-10-20 13:48:19 -05:00
Maxim Voloshin
469dee36ee Initialised variable for notification opacity 2016-10-20 13:03:00 -05:00
Maxim Voloshin
abb1482456 Applied updated design for notifications 2016-10-20 13:03:00 -05:00
Lyubomir Marinov
e1c5ea11bc Merge branch 'kkrisstoff-task/dropdown-aui-changes'
the commit.
2016-10-20 12:39:23 -05:00
Lyubomir Marinov
55b741d11b Merge branch 'master' into kkrisstoff-task/dropdown-aui-changes 2016-10-20 12:10:50 -05:00
Ilya Daynatovich
8f57179aa4 return default value 2016-10-20 19:41:04 +03:00
yanas
0fa5aa48af Merge pull request #992 from kkrisstoff/task/make-extended-toolbar-dynamically-created
toolbar: authentication button changed
2016-10-20 11:40:35 -05:00
hristoterezov
a65fca851c refactor(FilmStrip): calculateThumbnailSizeFromAvailable 2016-10-20 11:34:14 -05:00
Ilya Daynatovich
62af73ea09 Add new option to jitsi-popover 2016-10-20 19:28:19 +03:00
Ilya Daynatovich
0e8297ea8d restyle of menu 2016-10-20 19:28:19 +03:00
Ilya Daynatovich
70861465e1 Editions in jitsi popover styles 2016-10-20 19:28:19 +03:00
yanas
3bf8b7fbe2 Merge pull request #1007 from BeatC/connection-indicator-restyle
Connection indicator restyle
2016-10-20 11:08:51 -05:00
Kostiantyn Pashura
436f3b9d9b auth btn removed. login/logout --> Profile 2016-10-20 12:28:58 +03:00
Kostiantyn Pashura
71475038ba toolbar: authentication button changed 2016-10-20 12:26:53 +03:00
Lyubomir Marinov
c9edc0ae15 Merge branch 'master' into kkrisstoff-task/dropdown-aui-changes 2016-10-19 19:06:58 -05:00
Lyubomir Marinov
242c1419fd Format source code for (some) consistency 2016-10-19 18:54:21 -05:00
yanas
8ca0943881 Merge pull request #880 from jitsi/ring-overlay-style
style(LargeVideo): Rename LARGE_VIDEO_AVATAR_DISPLAYED event
2016-10-19 16:24:34 -05:00
hristoterezov
58a07355fb style(RingOverlay): Rename onAvatarDisplayed to onAvatarVisible 2016-10-19 15:58:36 -05:00
hristoterezov
4acfb033c8 style(LargeVideo): Rename LARGE_VIDEO_AVATAR_DISPLAYED event 2016-10-19 15:57:02 -05:00
Lyubomir Marinov
572fb20dd4 Merge branch 'task/dropdown-aui-changes' of https://github.com/kkrisstoff/jitsi-meet into kkrisstoff-task/dropdown-aui-changes 2016-10-19 13:38:38 -05:00
Lyubomir Marinov
d15413cd18 Merge branch 'mlaux-bugfix/android-launcher-intent' 2016-10-19 12:24:37 -05:00
Matt Laux
c18caf52d0 Fix Android launcher intent so that app appears in drawer. 2016-10-19 10:59:09 -05:00
Ilya Daynatovich
c09e10a584 updates in connection indicator styles 2016-10-19 17:57:16 +03:00
Lyubomir Marinov
1ff0bdbcfd Fix the in-app icons on Android
Bundle our custom icon font jitsi.ttf in the Android app (which we
already do for the iOS app).

Additionally, remove icon font files which are not in use.
2016-10-19 09:10:11 -05:00
Kostiantyn Pashura
736b98869f dropdown restyle 2016-10-19 12:40:03 +03:00
Kostiantyn Pashura
91fd16e9b4 aui checkbox removed 2016-10-19 12:40:03 +03:00
Kostiantyn Pashura
8118b4aea1 aui select and checkbox added 2016-10-19 12:40:03 +03:00
Дамян Минков
f62d7dbdf7 Merge pull request #1040 from jitsi/fix-feedback-color-and-size
Fix feedback button color and star size
2016-10-18 15:25:40 -05:00
yanas
1bf2920f3e Fix feedback button color and star size 2016-10-18 15:23:52 -05:00
Дамян Минков
8ecf079a3f Merge pull request #1039 from jitsi/stop-logging-servers-in-the-name
Stop logging servers in the event name
2016-10-18 15:18:44 -05:00
Emil Ivov
05ae9134a8 Update conference.js 2016-10-18 15:15:47 -05:00
damencho
040f4a6618 Adds data-i18n attribute. 2016-10-18 15:02:09 -05:00
damencho
a9aa29d0ad Adds data-i18n attribute to the feedback. 2016-10-18 15:01:58 -05:00
damencho
54cfbaaba0 Updates some translations for login dialog. 2016-10-18 15:01:50 -05:00
damencho
0455c26fb2 Uses titleKey to generate title string containing data-i18n attribute. 2016-10-18 15:00:09 -05:00
damencho
65f8c9ad97 Removes title param from openTwoButtonDialog. 2016-10-18 14:54:30 -05:00
damencho
f0ac52614b Removes title param from openTwoButtonDialog. 2016-10-18 14:54:22 -05:00
damencho
b5f0d30298 Removes not used parameter of openMessageDialog (title).
We pass key which is enough to obtain the title.
2016-10-18 14:54:14 -05:00
Дамян Минков
d97ed17052 Merge pull request #1038 from jitsi/api_commands
fix(iframe_api): toggleScreenSharing command
2016-10-18 14:52:21 -05:00
hristoterezov
dc43135980 fix(iframe_api): toggleScreenSharing command 2016-10-18 14:37:55 -05:00
Дамян Минков
27158752b0 Merge pull request #1025 from BeatC/display-name-required-dialog-fixes
fix display name required dialog
2016-10-18 14:36:03 -05:00
Дамян Минков
5c6f897ce7 Merge pull request #1030 from coresh/patch-1
Fixes issue of method 'setTooltip'
2016-10-18 14:35:53 -05:00
Дамян Минков
d415a15e93 Merge pull request #1037 from jitsi/add-specific-read-only-color
Add specific color for read-only input
2016-10-18 14:35:47 -05:00
yanas
19709cd3fc Adds comments. 2016-10-18 14:30:59 -05:00
yanas
89e15b6d3d Add specific color for read-only input 2016-10-18 14:27:16 -05:00
yanas
dcf2d64067 Merge pull request #1036 from jitsi/fix-placeholder-style
Fixes placeholder color
2016-10-18 13:00:22 -05:00
yanas
c459e3cffd Merge pull request #1031 from BeatC/invite-dialog-visual-bugs
Fix some visual bugs
2016-10-18 11:59:11 -05:00
yanas
8eb7303bd9 Fixes placeholder color 2016-10-18 11:57:38 -05:00
yanas
de67abd21d Merge pull request #1032 from kkrisstoff/Feedback-dialog-theme
feedback style variables
2016-10-18 11:20:44 -05:00
yanas
bb5495b495 Merge pull request #990 from jitsi/chatmessage_position
fix(chat): Issue with position of chat messages
2016-10-18 11:13:26 -05:00
Kostiantyn Pashura
124303b8b8 feedback style variables 2016-10-18 18:37:32 +03:00
Ilya Daynatovich
9078596f3a fix after rebase 2016-10-18 18:23:08 +03:00
Ilya Daynatovich
3254bbaabb Change styles in jitsi poppover 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
26792625f2 BEMificated classes and add title 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
c54938374d Editions in jitsi popover styles 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
83e7f23d0f Update Connection indicator and popover js 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
b7fccf5040 Update styles for popover 2016-10-18 17:57:19 +03:00
Lyubomir Marinov
a91deca6cd Remove source code duplication
An error was discovered and fixed by GitHub user blackneck in
jitsi/jitsi-meet PR #1017. The faulty source code was a piece of
duplication though. Remove the source code duplication there to reduce
the risks of bugs.
2016-10-18 09:39:17 -05:00
Ilya Daynatovich
cbc7fe5d98 Add JSDoc and rename method 2016-10-18 17:20:48 +03:00
Lyubomir Marinov
cf3ea2b8af Merge branch 'blackneck-master' 2016-10-18 09:05:46 -05:00
Ilya Daynatovich
a4c3348630 Fix some visual bugs 2016-10-18 16:53:28 +03:00
coresh
6bd5d6e4d5 Fixes issue of method 'setTooltip'
Fixes issue of method 'setTooltip' in modules/UI/util/UIUtil.js: Excluded 'Uncaught TypeError':
```
UIUtil.js:134 Uncaught TypeError: Cannot read property 'setAttribute' of null
```
2016-10-18 09:34:09 +00:00
yanas
442d2fa316 Merge pull request #1024 from BeatC/shortcut-dialog-fixes
Fix shortcut dialog toggling
2016-10-17 23:40:22 -05:00
Lyubomir Marinov
3ecc24d85e Remove obsolete Temasys workaround on React Native
jitsi/lib-jitsi-meet#66b601e disabled the execution of Temasys'
adapter.screenshare.js on browsers on which we don't use Temasys such as
React Native. Henceforth, no Temasys workarounds are necessary on React
Native.
2016-10-17 19:51:58 -05:00
Lyubomir Marinov
5e3193e087 Fix the iOS enterprise deployment build 2016-10-17 18:57:15 -05:00
yanas
b96743f4de Merge pull request #1028 from jitsi/fix-profile-title
Trivial fix of capital letters.
2016-10-17 17:20:00 -05:00
yanas
2eec52485d Fixes Profile panel title 2016-10-17 17:18:06 -05:00
Дамян Минков
c2085a5a9d Merge pull request #1027 from jitsi/fix-contact-list-resizing
Some contact list styling adjustments
2016-10-17 17:17:22 -05:00
yanas
f8733b2501 Remove semicolon 2016-10-17 16:53:16 -05:00
yanas
5597847190 Some contact list styling adjustments 2016-10-17 16:49:31 -05:00
Дамян Минков
13d187b878 Merge pull request #1019 from jitsi/add-toolbar-splitter-button
Adds toolbar splitter button
2016-10-17 16:35:15 -05:00
yanas
43906a4e30 Fix undefined check. 2016-10-17 16:05:46 -05:00
yanas
9641dbf373 Adds toolbar splitter button 2016-10-17 16:05:46 -05:00
yanas
ad2fb28f97 Merge pull request #1023 from BeatC/invite-dialog-enter-for-password
Add possibilty to set password via return key
2016-10-17 14:42:44 -05:00
Дамян Минков
2f11e85304 Updates ios project file, disables LLVM Bitcode. 2016-10-17 10:58:58 -05:00
Ilya Daynatovich
25aeb184af fix display name required dialog 2016-10-17 17:29:41 +03:00
Lyubomir Marinov
ba778c50ac Merge branch 'master' of https://github.com/blackneck/jitsi-meet into blackneck-master 2016-10-17 08:56:19 -05:00
Ilya Daynatovich
d06aef511f Fix shortcut dialog toggling 2016-10-17 16:35:47 +03:00
Ilya Daynatovich
d94b50f1e4 Add possibilty to set password via return key 2016-10-17 15:51:55 +03:00
Дамян Минков
367c9401eb Merge pull request #1020 from jitsi/invite-dialog-fix
Initialise the invite dialog on user action
2016-10-14 16:08:05 -05:00
yanas
338e1bac00 Initialise the invite dialog on user action 2016-10-14 15:38:19 -05:00
Paweł Domas
6148b4b229 Merge pull request #1018 from jitsi/fix-gms-bars-2
Fixes cannot read property of undefined if there is no local video.
2016-10-14 15:18:43 -05:00
damencho
e5f38e34e9 Fixes cannot read property of undefined if there is no local video. 2016-10-14 15:14:56 -05:00
Alexander Chernoshej
60eb76355b fix tiny mistake on removing local tracks 2016-10-14 17:26:55 +03:00
Дамян Минков
da86cba7ea Merge pull request #1014 from jitsi/fix-cdn-issue-with-remove-pass
Fixes cdn issue with remove password link.
2016-10-13 20:06:40 -05:00
Paweł Domas
33c026cc06 Merge pull request #1010 from jitsi/fullscreen-feature-fixes
Fullscreen feature fixes
2016-10-13 18:39:47 -05:00
yanas
22a2d85ee2 Fixes cdn issue with remove password link. 2016-10-13 17:57:45 -05:00
yanas
26ff54366b Moves full screen functions in UIUtil 2016-10-13 17:28:24 -05:00
hristoterezov
762420fcc8 Merge pull request #997 from jitsi/gsm-bars-2
Calculates quality based on the resolution and upload.
2016-10-13 16:26:42 -05:00
Paweł Domas
856a18fc2a Merge pull request #1011 from jitsi/adds-id-to-etherpad-iframe
Adds an id to etherpad iframe.
2016-10-13 15:49:00 -05:00
damencho
9ed6e0e2f9 Adds an id to etherpad iframe. 2016-10-13 15:46:44 -05:00
damencho
bbe475cb4e Fixes review comments.
Uses some ES6 syntax. Also removes inputHeight key for resolution as it makes no sence to have dictionary with one key. Removes some code duplication. Makes code consistent: method params for updateLocalStats and updateRemoteStats.
2016-10-13 15:31:16 -05:00
yanas
36fdb3127f Removes unrelated comment. 2016-10-13 15:17:15 -05:00
yanas
ee31d24f7c Puts fullscreen button in the top toolbar 2016-10-13 15:10:10 -05:00
yanas
7baa473e55 Fixes full screen event handling 2016-10-13 15:10:10 -05:00
yanas
688e71cd1b Merge pull request #995 from jitsi/ring_overlay_disable_ringing
Add interfaceConfig option for disabling ringing
2016-10-13 14:28:21 -05:00
Lyubomir Marinov
ce9fff2a8d Merge remote-tracking branch 'origin/master' 2016-10-13 13:33:37 -05:00
Lyubomir Marinov
6202935a27 Merge branch 'm-voloshin-FIX-audio-level' 2016-10-13 13:29:54 -05:00
Дамян Минков
df7a6f0df6 Merge pull request #1004 from jitsi/hangup_fixes
Refactor hangup.

Refactor hangup after room.leave is made to return Promise that waits for actual leave.
2016-10-13 11:36:54 -05:00
Maxim Voloshin
4ae0d1b882 Clean up audio level after previous speaker 2016-10-13 16:43:21 +03:00
hristoterezov
84fd0531f6 fix(Avatar): Avatar to return the local avatar when jid is null 2016-10-12 17:02:50 -05:00
hristoterezov
71d767f0b4 fix(hangup): Show Feedback independently from room.leave 2016-10-12 16:30:44 -05:00
hristoterezov
5fe0c62842 style(RingOverlay): Fix naming and aligning after review 2016-10-12 13:10:58 -05:00
Paweł Domas
58b4e0d59a Merge pull request #1002 from jitsi/react-native
Merge jitsi-meet-react's mobile support
2016-10-12 12:38:06 -05:00
hristoterezov
94366190a0 Merge pull request #928 from maximax123/fix-command
hot fix api.executeCommand
2016-10-12 11:38:31 -05:00
yanas
491ce70e1a Merge pull request #999 from BeatC/theming
Add main file for switch theming
2016-10-12 11:34:01 -05:00
Lyubomir Marinov
7f3ff13c18 Merge jitsi-meet-react's mobile support
As a step toward merging jitsi-meet-react with jitsi-meet to share as
much source code as possible between mobile and Web, merge the part of
jitsi-meet-react's source tree which supports mobile inside the
jitsi-meet source tree and leave jitsi-meet-react's Web support in the
source code revision history but don't have it in master anymore because
it's different from jitsi-meet's Web support. In other words, the two
projects are mechanically merged at the file level and don't really
share source code between mobile and Web.
2016-10-12 10:31:52 -05:00
Lyubomir Marinov
1edebf83ae Remove .babelrc to simplify React Native support
React Native's module bundler (aka packager) has its default Babel
preset - react-native/babel-preset - which it uses in the absence of a
custom .babelrc. Unfortunately, the default may be tripped by the
presence of a .babelrc in dependencies. Additionally, if the default
does not get tripped, the npm install of lib-jitsi-meet as a dependency
may fall into a recursion in which Babel attempts to transpile
react-native/babel-preset. To reduce the risks of stumbling upon such
problems, move Babel's configuration inside the Webpack configuration
file.
2016-10-12 10:31:52 -05:00
Lyubomir Marinov
d55e0f70d9 Import jitsi/jitsi-meet-react#2f23d98
As an intermediate step on the path to merging jitsi-meet and
jitsi-meet-react, import the whole source code of jitsi-meet-react as it
stands at
2f23d98424
i.e. the lastest master at the time of this import. No modifications are
applied to the imported source code in order to preserve a complete
snapshot of it in the repository of jitsi-meet and, thus, facilitate
comparison later on. Consequently, the source code of jitsi-meet and/or
jitsi-meet-react may not work. For example, jitsi-meet's jshint may be
unable to parse jitsi-meet-react's source code.
2016-10-12 10:31:52 -05:00
Ilya Daynatovich
429325ca6d Add main file for switch theming 2016-10-12 12:08:45 +03:00
yanas
1238ffbc40 Merge branch 'BeatC-jit/dialogs-redesign' 2016-10-11 19:10:43 -05:00
yanas
e24d5da0ef Fix eslint errors 2016-10-11 19:09:16 -05:00
yanas
74f31db434 Dialogs re-design, invite and password modifications 2016-10-11 19:08:24 -05:00
damencho
a2c71d05e6 Calculates quality based on the resolution and upload. 2016-10-11 14:54:22 -05:00
hristoterezov
e5503deadd feat(RingOverlay): Add interfaceConfig option for disabling ringing 2016-10-11 10:17:41 -05:00
Дамян Минков
d5541f612f Merge pull request #994 from jitsi/disable_dominant_speaker_indicator
feat(SmallVideo.js): New interface.config property for dominant speaker icon disable
2016-10-10 22:23:21 -05:00
hristoterezov
8fafd2b4ea feat(SmallVideo.js): New interface.config property for dominant speaker icon disable 2016-10-10 17:37:21 -05:00
ibauersachs
f66555a88f Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-10-09 08:36:48 +00:00
ibauersachs
ab895280f4 Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-10-09 08:36:39 +00:00
hristoterezov
b9705b5eed Merge pull request #991 from jitsi/filmstripfix
Fixes desktop expansion on filmstirp shortcut hide.
2016-10-07 18:05:18 -05:00
Emil Ivov
224bbdf8a9 Fixes desktop expansion on filmstirp shortcut hide. 2016-10-07 17:27:32 -05:00
Lyubomir Marinov
b8af817ea3 Merge branch 'restyle-toggle-state' 2016-10-07 15:59:16 -05:00
Lyubomir Marinov
231cd49916 Remove duplication 2016-10-07 15:31:00 -05:00
Lyubomir Marinov
35c1a77845 Merge branch 'master' into restyle-toggle-state 2016-10-07 14:09:12 -05:00
yanas
125e894624 Rename functions, fix jquery element ref and indentetation 2016-10-07 13:55:27 -05:00
hristoterezov
53cb40be4c fix(chat): Issue with position of chat messages 2016-10-07 11:23:33 -05:00
yanas
7e26625324 Merge pull request #983 from kkrisstoff/bug/make-HD-label-a-circle
border-radius for HD
2016-10-06 16:52:51 -05:00
yanas
0e9835dde2 Restyles the toolbar button toggle state 2016-10-06 16:25:15 -05:00
Lyubomir Marinov
1f66abac4d Merge branch 'analytics' 2016-10-06 15:46:55 -05:00
hristoterezov
6e4a710df6 feat(analytics): Add analytics permanent properties and use new paramenters format 2016-10-06 15:28:16 -05:00
Lyubomir Marinov
3f0aa500f7 Merge branch 'external_api' 2016-10-06 12:57:30 -05:00
Kostiantyn Pashura
e868984116 border-radius for HD 2016-10-06 15:25:58 +03:00
hristoterezov
7f24d14832 refactor(conference.js) hangup functionality 2016-10-05 20:23:43 -05:00
hristoterezov
47d39ed5ca feat(iframe_api): Implement readyToClose event and hangup command 2016-10-05 16:33:09 -05:00
yanas
924bb3c7f7 Merge pull request #948 from m-voloshin/space-for-ptt
Spacebar is used to activate Push-To-Talk
2016-10-05 12:03:54 -05:00
yanas
3c8e704ace Merge pull request #973 from m-voloshin/remove-black-line
Removed black line from contact list and message list
2016-10-03 16:35:34 -05:00
yanas
f2d6ff3426 Merge pull request #974 from m-voloshin/feedback-icon-padding
Fix padding for feedback button
2016-10-03 15:15:11 -05:00
hristoterezov
480f0c703a Merge pull request #976 from jitsi/eslint
ESLint
2016-10-03 12:53:57 -05:00
Lyubomir Marinov
a2b076985a ESLint
Enable ESLint on jitsi-meet with the same configuration and the same
goals as in lib-jitsi-meet.
2016-10-03 11:12:27 -05:00
Maxim Voloshin
9babe4a44d Fix padding for feedback button 2016-10-03 15:47:45 +03:00
Maxim Voloshin
d2c2936efa Removed black line from contact list and message list 2016-10-03 15:24:55 +03:00
yanas
98bc16801c Merge pull request #967 from jitsi/analytics_feedback
feat(analytics): Implement sendFeedback method
2016-10-01 12:25:19 -05:00
hristoterezov
71790b07b7 feat(analytics): Implement sendFeedback method 2016-09-30 17:28:32 -05:00
yanas
4ffe013165 Merge pull request #965 from jitsi/raise-hand-update
Updates raised hand to overwrite dominant speaker.
2016-09-30 12:14:58 -05:00
damencho
6320ef1caa Updates raised hand to overwrite dominant speaker. 2016-09-30 11:47:43 -05:00
hristoterezov
d10158c9fb Merge pull request #964 from jitsi/webpack
Fix babel-preset-es2015's version
2016-09-30 11:20:26 -05:00
Lyubomir Marinov
92f1061db8 Fix babel-preset-es2015's version
The latest version of babel-preset-es2015 6.16.0 fails with 'Unsupported
preset format: undefined.' Use the previous one then.
2016-09-30 11:16:51 -05:00
Lyubomir Marinov
c8f18040f6 Merge branch 'master' into webpack 2016-09-30 11:16:22 -05:00
hristoterezov
17b57ea852 Merge pull request #957 from jitsi/webpack
Switch from Browserify to Webpack
2016-09-30 10:32:36 -05:00
Lyubomir Marinov
b2a70b263a Merge branch 'talk-muted' 2016-09-30 09:39:26 -05:00
Дамян Минков
b3f0620f5b Merge pull request #963 from m-voloshin/destroy-tooltips
Completely remove attributes to destroy tooltip properly
2016-09-30 09:28:26 -05:00
Lyubomir Marinov
c95a8e058c Merge branch 'master' into talk-muted 2016-09-30 08:57:28 -05:00
Lyubomir Marinov
ecf44498b8 Merge branch 'master' into webpack 2016-09-30 08:52:36 -05:00
Maxim Voloshin
2f92aa9645 Completely remove attributes to destroy tooltip properly 2016-09-30 14:06:57 +03:00
yanas
e894b0db43 Merge pull request #962 from jitsi/remove-tooltip
Remove tooltip update
2016-09-29 17:14:09 -05:00
damencho
da65bbaa2d Updates remove tooltip util method.
Destroy is just hiding current tooltip, we also need to remove other attributes to stop showing the tooltip.
2016-09-29 16:47:32 -05:00
ibauersachs
032509be15 Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-09-29 17:00:31 +00:00
Hristo Terezov
c6f81668de Remove an unnecessary exclude from Webpack 2016-09-29 11:31:28 -05:00
Lyubomir Marinov
43d0582b2f Don't use path.resolve 2016-09-29 11:31:28 -05:00
Lyubomir Marinov
818ddad2c3 Do not distribute unminimized artifacts
The build process is capable of bundling both minimized and unminimized
artifacts for lib-jitsi-meet, jitsi-meet and external_api. However,
there does not seem to be a good reason to (1) always wait for the
building of the two versions and (2) distributing the unminimized
artifacts.
2016-09-29 11:31:28 -05:00
Lyubomir Marinov
c8f79dbd2d Switch from Browserify to Webpack 2016-09-29 11:31:28 -05:00
Lyubomir Marinov
1ceb3f0129 Switch lib-jitsi-meet from Browserify to Webpack
Since the library lib-jitsi-meet does not publish its binaries, it is
always been necessary to produce the binaries i.e. lib-jitsi-meet.js and
lib-jitsi-meet.js as part of the npm install step. Which means that any
modifications to the devDependencies of lib-jitsi-meet's package.json
always have to be reflected in jitsi-meet's package.json. Because
Webpack replaced Browserify in lib-jitsi-meet, Webpack has to become a
devDependency of jitsi-meet.
2016-09-29 11:31:28 -05:00
yanas
fe7911b944 Merge pull request #959 from m-voloshin/keyboard-shortcuts-help
Removed duplicates from keyboard shortcuts
2016-09-29 10:42:27 -05:00
yanas
0dcf8add63 Merge pull request #961 from m-voloshin/username-editing
Allow user to edit initial username
2016-09-29 10:34:17 -05:00
Paweł Domas
ae2ea4f421 Merge pull request #954 from jitsi/handle-conference-left
Waits for conference left event before navigating away from the page.
2016-09-29 10:06:57 -05:00
Maxim Voloshin
664d7a4f67 Allow user to edit initial username 2016-09-29 17:40:26 +03:00
Maxim Voloshin
6e90b767ef Removed separate check for SPACE 2016-09-29 16:07:21 +03:00
Maxim Voloshin
268a2ea7ce Removed duplicates from keyboard shortcuts 2016-09-29 15:31:45 +03:00
yanas
854fef35cb Merge pull request #955 from jitsi/audio-levels-redesign
Audio levels redesign. PR Review done from @damencho and @emcho.
2016-09-29 00:48:29 -05:00
yanas
b58556b6c3 Fixes audio level algorithm. 2016-09-29 00:22:05 -05:00
hristoterezov
97aaa36f7d Merge pull request #942 from jitsi/enable-languages
Match enabled languages to available languages
2016-09-28 19:22:27 -05:00
damencho
07f111abbd Fixes hangup when callstats is disabled. 2016-09-28 17:27:55 -05:00
yanas
3bb877cc3a Audio levels redesign. 2016-09-28 16:41:13 -05:00
Любомир Маринов
17bcc9bfcc Merge pull request #956 from jitsi/revert-903-webpack
Revert "Switch from Browserify to Webpack"
2016-09-28 16:38:42 -05:00
hristoterezov
c7cd771de2 Revert "Switch from Browserify to Webpack" 2016-09-28 16:37:24 -05:00
hristoterezov
77e65f727f Merge pull request #903 from jitsi/webpack
Switch from Browserify to Webpack
2016-09-28 16:37:07 -05:00
damencho
d793cdc797 Waits for conference left event before navigating away from the page. 2016-09-28 16:05:51 -05:00
Дамян Минков
4ec266ef11 Merge pull request #953 from jitsi/log_server
feat(log): Logs server field from jwt token
2016-09-28 15:47:56 -05:00
hristoterezov
fcc9532bde feat(log): Logs server field from jwt token 2016-09-28 15:19:16 -05:00
Paweł Domas
b4a191e27a Merge pull request #946 from jitsi/fix-moderator-notifications
Fixes moderator notifications on moderator indicator disabled
2016-09-28 14:26:00 -05:00
Lyubomir Marinov
973d40a877 Don't use path.resolve 2016-09-28 14:15:02 -05:00
Lyubomir Marinov
ce3090b8fe Do not distribute unminimized artifacts
The build process is capable of bundling both minimized and unminimized
artifacts for lib-jitsi-meet, jitsi-meet and external_api. However,
there does not seem to be a good reason to (1) always wait for the
building of the two versions and (2) distributing the unminimized
artifacts.
2016-09-28 13:57:53 -05:00
Lyubomir Marinov
f6662745d1 Switch from Browserify to Webpack 2016-09-28 13:57:53 -05:00
Lyubomir Marinov
4289df1681 Switch lib-jitsi-meet from Browserify to Webpack
Since the library lib-jitsi-meet does not publish its binaries, it is
always been necessary to produce the binaries i.e. lib-jitsi-meet.js and
lib-jitsi-meet.js as part of the npm install step. Which means that any
modifications to the devDependencies of lib-jitsi-meet's package.json
always have to be reflected in jitsi-meet's package.json. Because
Webpack replaced Browserify in lib-jitsi-meet, Webpack has to become a
devDependency of jitsi-meet.
2016-09-28 13:57:53 -05:00
paweldomas
dad3c57fad fix(conference): react to local role change only when it changes
We initialise the UI for isModerator = false on startup, so we should
not react to the event unless it gets out of sync.
2016-09-28 13:41:02 -05:00
Lyubomir Marinov
8f4b94f732 Merge branch 'm-voloshin-tooltips-global-handler' 2016-09-28 13:10:51 -05:00
yanas
76f8ca2116 Merge pull request #947 from jitsi/not-allowed-error
Not allowed error
2016-09-28 12:40:53 -05:00
Paweł Domas
94e5cda02d Merge pull request #951 from jitsi/prosody-tokens-case-insensitive-room
Prosody tokens case insensitive room name
2016-09-28 12:36:28 -05:00
yanas
066b4f16a0 Merge pull request #949 from m-voloshin/videospace-layout-fix
Removed initial animation of the video thumbnail
2016-09-28 11:50:46 -05:00
damencho
f3381b31ed Updates tokens room name verification to be case insensitive.
Room names used inside prosody are all lower case, when verify with room name from token make sure we use the room name in lower case.
2016-09-28 11:49:50 -05:00
damencho
15f4288e4a Fixes some jshint errors. 2016-09-28 11:29:47 -05:00
Lyubomir Marinov
4569970bc4 Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 11:29:15 -05:00
Maxim Voloshin
b2e0b49556 Updated JSDocs for 'TOOLTIP_POSITIONS' constant 2016-09-28 18:09:09 +03:00
Lyubomir Marinov
03152d65ab Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 09:58:49 -05:00
Maxim Voloshin
96735d47c4 Attached JSDocs for 'TOOLTIP_POSITIONS' constant 2016-09-28 17:52:27 +03:00
Lyubomir Marinov
16266e3622 Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 09:27:58 -05:00
Maxim Voloshin
87ed7b7989 Redesigned "setTooltip" method 2016-09-28 17:22:03 +03:00
Lyubomir Marinov
fef95f7cf1 Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 07:38:32 -05:00
Maxim Voloshin
36d1f7d06f Removed initial animation of the video thumbnail 2016-09-28 15:08:15 +03:00
Maxim Voloshin
33078a868c Spacebar is used to activate Push-To-Talk 2016-09-28 13:03:47 +03:00
hristoterezov
2a8700bca3 Merge pull request #938 from jitsi/participant_conn_status
Adds participant connection status notifications
2016-09-27 17:54:22 -05:00
damencho
1e54111aad Adds authentication error page.
When we receive a conference failed event with reason not allowed we show that page.
2016-09-27 17:26:38 -05:00
damencho
57003be3a3 Renames the style from close to redirect page. 2016-09-27 16:49:23 -05:00
yanas
f10177a352 Fixes moderator notifications on moderator indicator disabled 2016-09-27 14:32:54 -05:00
Maxim Voloshin
939b87ffed Tooltiped elements are mardked with "data-tooltip" attribute 2016-09-27 19:49:49 +03:00
Emil Ivov
6ccc58a060 Merge pull request #945 from jitsi/feedback-improvements
Feedback window improvements.
2016-09-26 23:14:19 -05:00
yanas
08b2fbe30f Fixes feedback message and button active state 2016-09-26 22:43:20 -05:00
Emil Ivov
cbd15f45a4 Merge pull request #944 from jitsi/pin-hover-improvements
Pin hover improvements
2016-09-26 22:42:37 -05:00
yanas
37dcc6c994 Improves the pin and hover borders 2016-09-26 22:26:05 -05:00
yanas
6249ff89ff Feedback window improvements. 2016-09-26 21:15:24 -05:00
yanas
07441b092c Merge pull request #943 from m-voloshin/fix-cursor-for-icon
Default cursor for icons
2016-09-26 15:43:51 -05:00
yanas
1c8535a2d5 Improves the pin and hover borders 2016-09-26 15:40:56 -05:00
Maxim Voloshin
047a2369b3 Default cursor for icons 2016-09-26 22:46:39 +03:00
paweldomas
7585413e7d fix(VideoLayout): from avatar to video transition
When user reconnected and the avatar is displayed we need to perform
full large video update in order to transition correctly.
2016-09-26 14:40:00 -05:00
paweldomas
6e0ba1de33 ref(VideoLayout): rename 'videoConnectionMessage'
Renames 'videoConnectionMessage' to 'localConnectionMessage', because
it is displayed when we're having problems with our local connection
and a different one will be shown for the remote connectivity issues.
2016-09-26 14:40:00 -05:00
paweldomas
661ea2cf45 feat(VideoLayout): add remote connection problems UI
Grey filter will be applied to the remote video/avatar displayed on
"large" and a message indicating remote connectivity issues will be
shown on top of that.
2016-09-26 14:39:58 -05:00
ibauersachs
bcee2a207d Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-09-26 19:36:34 +00:00
Ingo Bauersachs
e94bf73cc3 Match enabled languages to available languages 2016-09-26 21:34:46 +02:00
Ingo Bauersachs
03e8331e4f Add polish and russian 2016-09-26 21:28:55 +02:00
ibauersachs
bbd5e55e5e Commit from translate.jitsi.org by user ibauersachs.: 263 of 263 strings translated (0 fuzzy). 2016-09-26 19:03:16 +00:00
Maxim Voloshin
212798ad19 Global handler for tooltips 2016-09-26 21:29:40 +03:00
yanas
bb0f6e0989 Remove unused variable. 2016-09-26 13:02:59 -05:00
paweldomas
42fd3097de feat(VideoContainer): add 'wasVideoRendered' flag
The 'wasVideoRendered' flag will tell whether or not we have any video
image rendered(even if stalled) on the large video element.
2016-09-26 13:01:35 -05:00
paweldomas
5952261e87 ref(LargeVideoManager): introduce 'setVideoConnectionMessage' 2016-09-26 13:01:35 -05:00
paweldomas
62d2e3e2a4 feat(conference.js): add 'getParticipantDisplayName' 2016-09-26 13:01:35 -05:00
paweldomas
5843c6c569 ref(LargeVideoManager): rename 'enableVideoProblemFilter' 2016-09-26 13:01:35 -05:00
paweldomas
352e784cad fix(VideoLayout): show video when the connection is back 2016-09-26 13:01:35 -05:00
paweldomas
b8937e0349 fix(LargeVideoManager): hide video when avatar is displayed 2016-09-26 13:01:35 -05:00
paweldomas
0aea799b50 doc(LargeVideoManager): fills missing JS doc 2016-09-26 13:01:35 -05:00
paweldomas
46766ec239 fix(RemoteVideo): avoid black thumbnail
When the user is having connectivity issues we use the image cached in
the video element to show the preview in greyscale. It looks like this
cached image gets invalided after prolonged periods of time the video
element being hidden(and it is hidden when the video is muted). So we
never show this image if the user gets muted during connectivity
disruption in order to avoid blackness.
2016-09-26 13:01:35 -05:00
paweldomas
66bbc4d9fd fix(RemoteVideo): change hasVideoStarted logic
We used to rely on 'currentTime' of the video element, but we execute
'updateView' from the 'onplay' callback and on fast machines it may
happen that the value is 0 even though the video has just started.
2016-09-26 13:01:35 -05:00
paweldomas
40f2c593a2 ref(SmallVideo): figure out what is to be displayed
At any point of time we display one of the three: video, avatar or
blackness. The purpose of this commit is to make that fact more clear
in the code.
2016-09-26 13:01:35 -05:00
paweldomas
30cb948dcf feat(SmallVideo): make thumbnail grey
The video or the avatar on a thumbnail will be displayed in greyscale
when the user is having connectivity issues.
2016-09-26 13:01:35 -05:00
paweldomas
fceb512a03 ref(SmallVideo): add 'isCurrentlyOnLargeVideo' 2016-09-26 13:01:35 -05:00
paweldomas
4722054c3e ref(SmallVideo): adds avatar selector 2016-09-26 13:01:34 -05:00
paweldomas
9d1364b6fb feat(RemoteVideo): show disconnected GSM bars for remotes 2016-09-26 13:01:34 -05:00
paweldomas
5daceaead7 feat(conference.js): add isParticipantConnectionActive 2016-09-26 13:01:34 -05:00
paweldomas
8a43699a89 feat(ConnectionIndicator): show disconnected GSM bars on local thumbnail 2016-09-26 13:01:34 -05:00
paweldomas
3ef5dd20ef ref(RemoteVideo): store JitsiParticipant instead of id 2016-09-26 13:01:34 -05:00
paweldomas
e9445866a5 ref(ConnectionIndicator.js): make CQ 'object' optional 2016-09-26 13:01:34 -05:00
paweldomas
cf931f8a9f ref(ConnectionIndicator.js) pass icon class as an argument 2016-09-26 13:01:34 -05:00
yanas
3140257b69 Remove unused function. 2016-09-26 12:55:18 -05:00
Дамян Минков
b3d6e5876e Merge pull request #922 from jitsi/fix_filter_not_applied
Fix notification about network issues not displayed when expected
2016-09-26 10:04:14 -05:00
Дамян Минков
c437f64f35 Merge pull request #933 from jitsi/fix-everyone-moderator
Fixes moderator related elements when everyone is moderator
2016-09-23 18:04:53 -05:00
yanas
af91fb50b2 Fixes moderator related elements when everyone is moderator 2016-09-23 17:42:29 -05:00
Emil Ivov
a35e194a2d Merge pull request #932 from jitsi/fix_jibri
fix(FilmStrip): Add check for thumbnails
2016-09-23 16:46:49 -05:00
hristoterezov
42d9d0393d fix(FilmStrip): Add check for thumbnails 2016-09-23 16:44:32 -05:00
jitsi-pootle
d319e837f5 New files added from translate.jitsi.org based on templates 2016-09-23 19:49:12 +00:00
yanas
a054a0d61d Merge pull request #919 from kkrisstoff/add/raise-hand-icon
rise-hand-ico: blured class added
2016-09-23 11:59:40 -05:00
yanas
8e75da8540 Merge pull request #926 from jitsi/lock-fixes
Changes the state of room locker if room was locked not by current user.
2016-09-23 11:51:42 -05:00
damencho
975b13f868 Fixes setting remote room lock state change. 2016-09-23 11:34:21 -05:00
yanas
75f80ae877 Update _close.scss 2016-09-23 11:26:48 -05:00
Kostiantyn Pashura
7c824d9da0 rise-hand-ico: blured class added 2016-09-23 15:56:16 +03:00
Gubin, Maksim
9aa7f80e82 hot fix api.executeCommand 2016-09-23 14:04:19 +03:00
hristoterezov
b772c151fc Merge pull request #925 from jitsi/invite-to-share-dialog
Invite to share dialog
2016-09-22 21:53:40 -05:00
yanas
d2e42c2a7d Update MessageHandler.js 2016-09-22 21:11:24 -05:00
yanas
b54f92b2ae Fixes the copy action. 2016-09-22 18:17:37 -05:00
yanas
5ef241ae66 Merge pull request #927 from jitsi/fix-feedback-resolve
Makes sure we always resolve(call the callback) in feedback dialog.
2016-09-22 17:47:17 -05:00
damencho
eb2e709749 Makes sure we always resolve(call the callback) in feedback dialog.
Call the callback even when clicking outside the dialog, or escaping to close it.
2016-09-22 16:55:08 -05:00
yanas
06247266ad Merge pull request #924 from jitsi/add-close-page
Adds close page
2016-09-22 16:20:14 -05:00
damencho
f9a5b62326 Changes the state of room locker if room was locked not by current user. 2016-09-22 16:10:17 -05:00
yanas
644faca306 Re-designs invite dialog as share link. 2016-09-22 15:50:09 -05:00
yanas
9cb0723f8d Remove duplicate styles. 2016-09-22 15:32:54 -05:00
yanas
48c99e796f Includes content to close html. 2016-09-22 15:32:54 -05:00
damencho
fcf7069b25 Adds close page.
When enabled after hanging up redirect to close page, if needed feedback will be displayed.
2016-09-22 15:32:54 -05:00
damencho
415619021f Moves handling of thank you dialog.
Moves handling of thank you dialog out of the Promise that handles the feedback and just before we redirect to welcome page.
2016-09-22 15:32:54 -05:00
yanas
88a45cf991 Fixes colors in dialogs. 2016-09-22 14:50:31 -05:00
yanas
7eb85fe7aa Merge pull request #923 from jitsi/fix_ringoverlay_sound
fix(ringoverlay): Path of the ogg file
2016-09-22 14:08:25 -05:00
hristoterezov
0e5fe88b5e fix(ringoverlay): Path of the ogg file 2016-09-22 13:50:10 -05:00
yanas
b754361268 Merge pull request #920 from jitsi/remove_prezi_leftovers
fix: remove Prezi leftovers
2016-09-22 12:45:20 -05:00
paweldomas
419950ca49 fix(VideoLayout): "connection interrupted" shown only on video
The message about having connectivity issues should be displayed only
on top of the video like the "video problems filter" is.
2016-09-22 12:43:23 -05:00
paweldomas
11953cbb60 feat(conference.js): add isConnectionInterrupted getter 2016-09-22 12:43:12 -05:00
paweldomas
ecfc05bcc8 fix(LargeVideoManager): enable video problems filter on VideoContainer
Only the VideoContainer is interested in showing the video problems
filter which is meant to be displayed when ICE is disconnected.
2016-09-22 12:43:03 -05:00
yanas
b0012b4d63 Merge pull request #921 from jitsi/contaclist-title-update
Always show number of participants badge in toolbar.
2016-09-22 12:40:39 -05:00
damencho
febaf49d07 Always show number of participants badge in toolbar.
Includes showing 1 when user is alone in the room.
2016-09-22 12:02:38 -05:00
paweldomas
e3f3287f14 fix: remove Prezi leftovers 2016-09-22 11:35:35 -05:00
Дамян Минков
fbd2879aa3 Merge pull request #918 from kkrisstoff/make-the-star-configurable
disable_star_indicator added
2016-09-22 10:19:16 -05:00
yanas
4db8faa526 Merge pull request #914 from jitsi/fix_toolbar_ringoverlay
fix(toolbar): Issue with toolbar is positioned under the ring overlay
2016-09-22 10:12:38 -05:00
Дамян Минков
586ea2ae0d Merge pull request #911 from jitsi/small_videolayout_refactoring
Small videolayout refactoring
2016-09-22 09:45:15 -05:00
paweldomas
e39648ce21 ref(LargeVideo): rename to LargeVideoManager
It is confusing when the name of the main class exported from the file
is not the same as the filename.
2016-09-22 08:57:14 -05:00
paweldomas
e0a05c5908 ref(LargeVideo): move VideoContainer to separate file
VideoContainer is a separate being which implements the LargeContainer
and it's confusing to have it in the same file. This was encouraging to
access private parts of the VideoContainer directly(not through
the interface).
2016-09-22 08:57:14 -05:00
paweldomas
2c01fde713 ref(SmallVideo): rename 'isMuted' to avoid confusion 2016-09-22 08:57:01 -05:00
Kostiantyn Pashura
82ebfd9945 disable_star_indicator added 2016-09-22 12:52:53 +03:00
yanas
92641c20f3 Merge pull request #916 from jitsi/contaclist-title-update
Moves the number in the code, not as a translation parameter.
2016-09-21 22:15:48 -05:00
yanas
f145d98a12 Merge pull request #915 from jitsi/update-tooltip-from-profile
Update tooltip from profile
2016-09-21 18:15:54 -05:00
yanas
a3d2c95d80 Merge pull request #913 from jitsi/adjust-feedback-question
Adjusts feedback dialog question.
2016-09-21 18:01:31 -05:00
yanas
a5a9936e25 Adjusts feedback text and takes into account comment 2016-09-21 18:00:21 -05:00
damencho
cfeb03740c Moves the number in the code, not as a translation parameter.
There is sometimes problems with cache and late loading of the translations, this commit avoids showing translation key in the contactlist title, by moving the parameter into the code.
2016-09-21 17:16:00 -05:00
damencho
4ab0fca4d7 Removes tooltip from profile avatar when not clickable. 2016-09-21 16:35:42 -05:00
damencho
df3b7e2dbc Adds utility method to remove tooltips. 2016-09-21 16:35:03 -05:00
hristoterezov
302b0cf776 fix(toolbar): Issue with toolbar is positioned under the ring overlay 2016-09-21 16:34:06 -05:00
yanas
e7cbacf9a2 Merge pull request #912 from jitsi/remove-download-logs-link
Remove download logs link
2016-09-21 16:18:18 -05:00
Любомир Маринов
f9817b12bf Merge pull request #910 from jitsi/fix_jitsi_track_error_import
fix(UI): Show the correct message on NO_DATA_FROM_SOURCE GUM errors
2016-09-21 15:57:32 -05:00
damencho
bbc7aedb48 Adds download logs method for debugging.
Adds a download logs method that can be called from console to take usefull messages for debugging.
console> APP.conference.saveLogs();
2016-09-21 15:46:10 -05:00
damencho
4fdc11c6fb Removes download logs references. 2016-09-21 15:45:08 -05:00
hristoterezov
e1cb75fe04 fix(UI): Show the correct message on NO_DATA_FROM_SOURCE GUM errors 2016-09-21 15:31:49 -05:00
yanas
0bf6d52eef Merge pull request #902 from jitsi/fix-authentication-failed-msg
Fixes message for authentication failed.
2016-09-20 12:47:53 -05:00
yanas
7453198472 Fixes message for authentication failed. 2016-09-20 12:08:44 -05:00
Дамян Минков
0c1120c1a8 Merge pull request #897 from jitsi/settings-css-adjustments
Some css and lang adjustments to settings and contact list.
2016-09-20 10:48:57 -05:00
yanas
efbc84d18b Merge pull request #898 from m-voloshin/tooltip-fix-layer
Adjustment for layer order
2016-09-20 10:45:57 -05:00
Дамян Минков
cdca1a46ef Merge pull request #901 from jitsi/remove-missing-method
Removes missing and unused method.
2016-09-20 10:20:23 -05:00
yanas
689f7dc8f3 Merge pull request #900 from jitsi/delete-css-ds_store
Delete css/.DS_Store
2016-09-20 10:17:35 -05:00
yanas
4ca9349de7 Removes missing and unused method. 2016-09-20 10:16:15 -05:00
Lyubomir Marinov
9d6253455a Delete css/.DS_Store 2016-09-20 10:12:56 -05:00
Maxim Voloshin
388f868165 Adjustment for layer order 2016-09-20 13:15:10 +03:00
yanas
aacb39a439 Some css adjustments to settings and contact list. 2016-09-20 01:14:00 -05:00
yanas
298338f076 Merge pull request #896 from jitsi/fix-feedback-dialog
Feedback dialog changes
2016-09-19 23:52:14 -05:00
yanas
2d2915967c Fixes focus in Feedback and makes animation configurable. 2016-09-19 23:25:03 -05:00
Kostiantyn Pashura
4572e1d344 feedback dialog changes 2016-09-19 22:27:41 -05:00
yanas
f8b200f32c Merge pull request #892 from m-voloshin/blue-badges
Blue badges
2016-09-19 22:27:10 -05:00
yanas
3d4addd9ef Fixes badge font and corrects file name. 2016-09-19 22:07:10 -05:00
yanas
2919a60403 Adds blue badges to contact list and chat. 2016-09-19 21:22:41 -05:00
Paweł Domas
a07858cc72 Merge pull request #891 from jitsi/video-thumbnail-toolbar-fixes
Video thumbnail toolbar fixes
2016-09-19 19:31:08 -05:00
yanas
d1d4674136 Fixes some jsdocs. 2016-09-19 18:04:55 -05:00
Paweł Domas
9b5d4b8ceb Merge pull request #856 from jitsi/implement_muted_ended_track_events
feat(UI): Add UI support for camera issue detection
2016-09-19 16:03:06 -05:00
hristoterezov
abe216a0bb feat(UI): Add UI support for camera issue detection 2016-09-19 14:49:50 -05:00
hristoterezov
84983c341e Merge pull request #844 from jitsi/device-selection-rework
Device selection rework
2016-09-19 13:56:21 -05:00
Paweł Domas
075423ee96 Merge pull request #895 from jitsi/fix-incorrect-json-file
Fix incorrect JSON file
2016-09-19 13:29:06 -05:00
Lyubomir Marinov
2ff77676e2 Fix incorrect JSON file
The extension of the file modules/UI/side_pannels/chat/smileys.json
suggests that the format of the file is JSON. However, it contains
JavaScript RegExp instances which do not represent valid JSON. Such
discrepancies between file extension and format cause failures in
certain tools such as Webpack. Convert the file (both extension and
format) into a valid ES2015 module.
2016-09-19 12:48:38 -05:00
yanas
2da3373e10 Merge pull request #890 from jitsi/updates-watermark-link
Updates handling links on watermarks.
2016-09-18 17:02:12 -05:00
yanas
1486eac752 Applies fixes to thumbnail video toolbar from m-voloshin 2016-09-18 16:58:34 -05:00
yanas
c5adecb6e1 Adds menu icon to font. 2016-09-18 16:42:33 -05:00
damencho
e4c4236386 Updates handling links on watermarks.
When link is missing disable clicking.
2016-09-16 15:17:34 -05:00
yanas
e5e7e043ee Merge pull request #889 from BeatC/tooltips-bg
Change color for tooltip
2016-09-16 12:54:15 -05:00
Ilya Daynatovich
f8d01b4312 Change color for tooltip 2016-09-16 19:05:23 +03:00
Дамян Минков
f0a898c674 Merge pull request #885 from jitsi/add-raise-hand-toggle
Adds raise hand toggle state.
2016-09-16 10:28:12 -05:00
yanas
8b7bdb4957 Changes the raise hand event name to fit better the action 2016-09-16 10:22:50 -05:00
yanas
bd46430434 Small color change 2016-09-16 10:22:50 -05:00
yanas
a1635ccc68 Adds javadoc 2016-09-16 10:22:50 -05:00
yanas
1853fa6fae Adds raise hand toggle state. 2016-09-16 10:22:50 -05:00
Дамян Минков
692f0792e1 Merge pull request #886 from jitsi/fix-some-tooltips
Fixes dominant speaker and raised hand tooltips
2016-09-16 10:18:23 -05:00
yanas
bc222c60e0 Fixes dominant speaker and raised hand tooltips 2016-09-16 00:37:29 -05:00
yanas
96bbf0419c Adds tooltips 2016-09-16 00:04:19 -05:00
yanas
531e3d2765 Merge pull request #884 from jitsi/updates-lock-room
Updates lock room
2016-09-15 22:24:58 -05:00
damencho
02165786f1 Handles case where somebody removed lock of the room while we attempt to join.
Receiving password required, marks the room as locked, but if we try to enter without password, mark it as unlocked till we receive a password required error or we successfully join.
2016-09-15 16:34:02 -05:00
damencho
a449223b40 Clears the password if user cancels password prompt.
Clears the password if user cancel attempt to enter password, as using one instance of locker for multiple attempts keeps the password.
2016-09-15 16:32:10 -05:00
yanas
12344ab486 Merge pull request #883 from jitsi/contactlist-displayname
Syncs contactlist display names with thumbnails.
2016-09-15 15:22:47 -05:00
yanas
b6e18d8a68 Merge pull request #882 from jitsi/fix-hide-toolbar
Fixes hiding toolbar.
2016-09-15 15:10:54 -05:00
damencho
1a0677cb59 Syncs contactlist display names with thumbnails.
Uses the same display names in the contact list as in the thumbnails, for local and remote.
2016-09-15 15:01:48 -05:00
damencho
c483587853 Fixes hiding toolbar.
Receiving messages docks the toolbar to be able to see number of unread messages. We need to undock it when we read the messages. We skip undocking if we are not in video mode (on large), cause stuff like youtube video share is docking/undocking the toolbar.
2016-09-15 14:02:56 -05:00
hristoterezov
9b25467080 Merge pull request #878 from jitsi/video-thumbnail-redesign
Video thumbnails redesign
2016-09-15 13:48:07 -05:00
yanas
f37fd15fca Merge pull request #876 from jitsi/ui-ringoverlay-stop
feat(ringoverlay): Stop ringing after 30s and change the message
2016-09-14 21:44:59 -05:00
yanas
5092f52716 Merge pull request #874 from jitsi/ui-fix-ringoverlay
feat(ringoverlay): Change the background when the avatar is displayed
2016-09-14 21:40:54 -05:00
yanas
0013745783 Video thumbnails redesign 2016-09-14 21:20:54 -05:00
hristoterezov
ad5fa13339 feat(ringoverlay): Stop ringing after 30s and change the message 2016-09-14 17:55:43 -05:00
yanas
e1fa5ecb34 Merge pull request #873 from jitsi/chat-updates
Chat updates
2016-09-14 17:08:34 -05:00
damencho
e1512e3776 Fixes focusing on write area or nickname input when chat is open. 2016-09-14 16:47:10 -05:00
hristoterezov
dab5252746 feat(ringoverlay): Change the background when the avatar is displayed 2016-09-14 16:26:17 -05:00
damencho
d8dd564b06 Fixes clearing message counter on opening the chat. 2016-09-14 15:22:36 -05:00
damencho
407b082780 Removes changing the message icon and flashing on new message. 2016-09-14 15:18:14 -05:00
damencho
a671093489 Introduces chat_container_id variable. 2016-09-14 15:13:15 -05:00
damencho
3ee61df319 Updates talk while muted indication after latest ui changes. 2016-09-14 13:26:28 -05:00
damencho
c43b1f54c7 Shows toolbar before showing talk while muted notification. 2016-09-14 13:26:28 -05:00
damencho
1a554828e1 Adds option to add custom timeout for hiding toolbar. 2016-09-14 13:26:28 -05:00
damencho
974a0334df Updates text for talk while muted. 2016-09-14 13:26:28 -05:00
damencho
e7e7c7d5a0 Handles talk while muted event. 2016-09-14 13:26:28 -05:00
Дамян Минков
29f0c0b311 Merge pull request #870 from jitsi/add-raised-hand-icon
Adds raise hand icon
2016-09-14 12:17:06 -05:00
yanas
955680018f Merge pull request #872 from jitsi/fix-hiding-toolbars
Fixes hiding toolbars.
2016-09-14 12:16:57 -05:00
damencho
686e85cd4f Fixes hiding toolbars.
Schedule new hide check if toolbar is hovered, overlay is shown or the sideBar container is visible (chat, contactlist , etc.).
2016-09-14 11:51:47 -05:00
hristoterezov
297d4e65fc style(gitignore): Add .sync-config.cson 2016-09-14 11:38:43 -05:00
yanas
0e94bf7e0b Merge pull request #871 from jitsi/fix-remote-video-thumb
Fixes parameters for VideoLayout.resizeThumbnails.
2016-09-14 11:00:14 -05:00
damencho
a5bc9625ef Fixes parameters for VideoLayout.resizeThumbnails. 2016-09-14 10:48:38 -05:00
yanas
cbde4f89b2 Adds raise hand icon 2016-09-14 09:00:59 -05:00
yanas
891c108191 Merges fix from m-voloshin for Firefox toolbar 2016-09-14 08:25:11 -05:00
yanas
764d767789 Update _variables.scss 2016-09-14 01:22:33 -05:00
yanas
7ded10cd8d Merge pull request #865 from jitsi/add-raise-hand-button
Adds a possibility to add raise hand as a button
2016-09-13 23:09:18 -05:00
yanas
3b05a16b32 Fix for button appearing in both toolbars 2016-09-13 22:10:13 -05:00
yanas
cf49c8c6ff Adds raise hand button to the side toolbar 2016-09-13 21:21:31 -05:00
yanas
99bf4bc44d Adds a possibility to add raise hand as a button 2016-09-13 21:21:31 -05:00
yanas
929639b06b Merge pull request #863 from jitsi/contact-list-update
Contact list update
2016-09-13 21:21:03 -05:00
Дамян Минков
c18b80c43f Merge pull request #862 from jitsi/make-settings-sections-configurable
Make settings sections configurable
2016-09-13 20:46:03 -05:00
yanas
9ce83250da Fixes console logs 2016-09-13 20:43:44 -05:00
yanas
a9e31a2843 Fixes settings menu for non moderators 2016-09-13 20:43:44 -05:00
yanas
45496b7592 Make settings sections configurable 2016-09-13 20:43:44 -05:00
yanas
4075a5f4f7 Merge pull request #864 from jitsi/origin/ui-redesign-guests-profile
fix(profile_icon): Cursor and background styles
2016-09-13 19:17:45 -05:00
hristoterezov
2d4819257b fix(profile_icon): Cursor and background styles 2016-09-13 18:19:38 -05:00
yanas
406618677b Merge pull request #861 from jitsi/ui-redesign-guests-profile
feat(profile): Don't allow non-guest users to edit their profile
2016-09-13 17:38:51 -05:00
damencho
4c72833f5a Adds an option and hide avatars in contact list. 2016-09-13 17:14:05 -05:00
damencho
e3eaac5bef Disables click toggler. 2016-09-13 17:12:10 -05:00
hristoterezov
f10b13328f feat(profile): Don't allow non-guest users to edit their profile 2016-09-13 16:56:05 -05:00
Дамян Минков
c609cd0ace Merge pull request #859 from jitsi/change-ringing-background
Ringing background changed to gradient
2016-09-13 16:53:32 -05:00
yanas
0396a05b38 Merge pull request #860 from jitsi/css-watermark-link-variable
Moves watermark link to be css variable.
2016-09-13 16:46:53 -05:00
damencho
4a460e09b9 Moves watermark link to be css variable. 2016-09-13 16:46:15 -05:00
yanas
d5d81c1bed Merge pull request #858 from jitsi/ui-redesign-feedback
Ui redesign feedback
2016-09-13 16:44:11 -05:00
yanas
dc6e8f99d8 Ringing background change to gradient 2016-09-13 16:32:00 -05:00
hristoterezov
e02a8c9103 fix(feedback): Styles of Feedback dialog 2016-09-13 16:06:53 -05:00
Maxim Voloshin
7b4941bde9 Redesigned feedback window 2016-09-13 16:06:53 -05:00
hristoterezov
c602839e06 Merge pull request #851 from jitsi/ui-redesign-in-progress
Ui redesign in progress
2016-09-13 14:50:59 -05:00
yanas
2aea6c4120 Remove unused dialog 2016-09-13 13:07:08 -05:00
hristoterezov
a937e025b5 fix(index.html): Remove preload attribute on local video tag 2016-09-13 12:59:59 -05:00
yanas
b9fb510006 Adds ringing.scss, which was missing 2016-09-13 10:47:22 -05:00
Дамян Минков
b3f66aea3b Merge pull request #618 from photoninger/add_firefox_supportedBrowsers
Add Firefox in list of supportedBrowsers for invite emails
2016-09-13 08:29:59 -05:00
yanas
8491fbbd95 Reverts change in makefile 2016-09-12 23:29:26 -05:00
yanas
c6ec96aca5 Adds avatar on stage specific background 2016-09-12 23:24:23 -05:00
yanas
d250623fde Ring overlay improvements and enable buttons fix 2016-09-12 23:24:10 -05:00
hristoterezov
c3b4ecbbd8 fix(ext_toolbar): position of authentication popup 2016-09-12 16:22:51 -05:00
hristoterezov
2b84a149fe fix(toolbar): Button popups 2016-09-12 14:43:34 -05:00
hristoterezov
99ca38d13f Merge pull request #852 from jitsi/make-node-sass
Installs node-sass on every update, fixes a problem in some operating…
2016-09-12 12:54:52 -05:00
damencho
bfc174ffdc Installs node-sass on every update, fixes a problem in some operating systems. 2016-09-12 12:02:43 -05:00
yanas
09f7615a35 Changes icon set. 2016-09-11 23:36:15 -05:00
yanas
fdf0e39516 Fix lock room 2016-09-11 20:49:59 -05:00
yanas
775f389e5c Fix watermark and help position related to toolbar 2016-09-11 17:06:08 -05:00
yanas
f811410b45 Settings re-design 2016-09-11 16:55:06 -05:00
yanas
50e803f1a0 Fixes side toolbar container behavior 2016-09-09 21:26:29 -05:00
Paweł Domas
9a0d8616ed Merge pull request #847 from jitsi/cs-custom-scriptUrl
Skips some url parameters that can inject scripts.
2016-09-08 18:09:04 -05:00
yanas
b4c9816d9f Rename side panels and implement toggle/untoggle policy 2016-09-08 17:38:41 -05:00
yanas
17e28069ab Re-designs toolbars, side panels like setting, contact list 2016-09-08 13:22:50 -05:00
yanas
8562d3d55d Remove bottom toolbar and change side panel position and behavior 2016-09-08 13:16:23 -05:00
damencho
d65479abc9 Skips some url parameters that can inject scripts. 2016-09-08 13:12:56 -05:00
yanas
ed29db290e Add mixins for animations and separate toolbar css 2016-09-08 12:19:45 -05:00
yanas
978c0f2f31 Remove unused import 2016-09-08 12:19:45 -05:00
damencho
62c4ff719e Fixes build. 2016-09-08 11:26:57 -05:00
Ilya Daynatovich
e28f646cef Fixed styles for unsupported browser page 2016-09-08 11:15:17 -05:00
yanas
fb63ed92a8 Resets the main font after remove 2016-09-07 22:07:13 -05:00
yanas
c0097d1e2b Merge pull request #833 from BeatC/configurable-text
Set up SASS and change base font
2016-09-07 22:05:58 -05:00
damencho
0683f94edb Skips storing devices (mic and camera) if there is no user selection.
Skips storing device ids in localstorage if the user hasn't selected a device to use, and keeps using system defaults. Removes calls to private library method for setting initial realDeviceIds, as this had been added to the library.
2016-09-07 16:48:57 -05:00
yanas
fe710d8de9 Merge pull request #842 from jitsi/revert-kicks
Revert "Temprorary disable kicks hack."
2016-09-07 10:59:23 -05:00
damencho
83546a899f Revert "Temprorary disable kicks hack."
This reverts commit 76a7c7b426.
2016-09-07 10:48:13 -05:00
hristoterezov
2eca459ff6 Merge pull request #840 from jitsi/moves-analytics-feedback
Moves analytics event for feedback to the library.
2016-09-07 09:42:30 -05:00
hristoterezov
6b23ad54db Merge pull request #839 from jitsi/removes-ds-error-onjoin
Skips selecting local participant when alone in the room.
2016-09-07 09:41:01 -05:00
damencho
5ef7f38bed Moves analytics event for feedback to the library. 2016-09-06 13:16:54 -05:00
damencho
f86056c4f8 Skips selecting local participant when alone in the room. 2016-09-06 12:00:13 -05:00
Emil Ivov
f19b364871 Merge pull request #838 from jitsi/fix_audio_not_working_msg
fix(lang): Change the message in the mic not working error dialog
2016-09-06 11:33:54 -05:00
hristoterezov
29f1d96d87 fix(lang): Change the message in the mic not working error dialog 2016-09-06 11:30:51 -05:00
yanas
2f966b7da4 Merge pull request #829 from BeatC/fix-sharing-resize-after-hiding-filmstrip
Fix problem with resizing
2016-09-04 20:16:08 -05:00
bgrozev
e3f599fbc0 Merge pull request #834 from jitsi/disable-kick-until-fixed-hack
Temprorary disable kicks hack.
2016-09-02 11:44:15 -05:00
yanas
76a7c7b426 Temprorary disable kicks hack. 2016-09-02 11:19:17 -05:00
Ilya Daynatovich
4044e11da2 Set up SASS and change base font 2016-09-02 12:55:33 +03:00
Дамян Минков
a07c21b2a3 Merge pull request #832 from jitsi/remove-avatar-url
Remove avatar url - not used anymore
2016-09-01 16:55:11 -05:00
yanas
109bedba75 Update index.html 2016-09-01 16:37:07 -05:00
Дамян Минков
aced860ba4 Merge pull request #830 from jitsi/detect_local_media_not_working
Shows dialog when lib-jitsi-meet report microphone issues
2016-09-01 14:16:50 -05:00
hristoterezov
d33324c198 Merge pull request #831 from jitsi/analytics-remove-browser-suffix
Adds browser name as parameter.
2016-09-01 14:16:41 -05:00
damencho
adb1b33441 Adds browser name as parameter. 2016-09-01 14:13:17 -05:00
yanas
238e1f1bea Merge pull request #814 from BeatC/fix-video-preview-when-resize
Fix problem with last video preview
2016-09-01 13:45:56 -05:00
hristoterezov
4c9b6ce193 Shows dialog when lib-jitsi-meet report microphone issues 2016-09-01 12:57:21 -05:00
Paweł Domas
5ef547d285 Merge pull request #828 from SamWhited/mod_token_use_proper_path
Use valid path for HTTP token fetches
2016-09-01 10:02:47 -05:00
Ilya Daynatovich
aea99b8ffb Fix problem with resizing 2016-09-01 08:53:51 +03:00
Sam Whited
9ec120d7cb Use valid path for HTTP token fetches 2016-08-31 16:25:49 -05:00
Дамян Минков
e2c5439112 Merge pull request #821 from SamWhited/hql1748_update_lock_icon_on_config_change
Update lock icon when moderator changes state
2016-08-31 15:53:17 -05:00
hristoterezov
19362d1904 Merge pull request #826 from jitsi/fix-random-avatar
Fixes random avatar
2016-08-31 15:46:53 -05:00
hristoterezov
1a69fd8a49 Merge pull request #822 from jitsi/removes-atarURL
Removes avatar url from UI.
2016-08-31 15:39:00 -05:00
yanas
224670ed03 Merge pull request #827 from jitsi/fix-missing-indications-on-no-video-device
Moves local video thumb initializations where they belong.
2016-08-31 14:55:12 -05:00
damencho
bb705e32d9 Moves local video thumb initializations where they belong.
Moves local video thumb initializations where they belong in the local video constructor. Fixes a problem when there is no video device, then audio levels and gsm bars are missing. We were doing this initializations every time a video device is changed.
2016-08-31 14:18:09 -05:00
Sam Whited
3e269978d9 Update lock icon when moderator changes state 2016-08-31 13:59:08 -05:00
Paweł Domas
9ba62c320b Merge pull request #825 from SamWhited/mod_token_improvements
Mod token improvements
2016-08-31 12:48:04 -05:00
damencho
8e6d7d3960 Sends and dispatches avatarId command. 2016-08-31 11:41:17 -05:00
damencho
3138748f57 Uses avatarId from settings.
Removes unused variable bottomToolbarEnabled.
2016-08-31 11:40:06 -05:00
damencho
6f10156bf3 Adds avatarId and respect it with lowest priority. 2016-08-31 11:37:11 -05:00
damencho
3852b34397 Adds avatarId to Settings. 2016-08-31 11:24:51 -05:00
Sam Whited
3128628d09 Populate the token cache 2016-08-31 09:30:07 -05:00
Sam Whited
d8c4c0627a SHA256 hash the kid claim before fetching tokens 2016-08-31 09:24:15 -05:00
hristoterezov
d9559ecf63 Merge pull request #817 from jitsi/fix-shortcut-tooltips
Fix shortcut appearing in tooltip of wrong buttons
2016-08-30 15:30:09 -05:00
yanas
2b492883ca Some code optimisations. 2016-08-30 14:14:52 -05:00
damencho
5ab6c551df Disables storing display name and email when using overlay ring. 2016-08-30 14:10:20 -05:00
damencho
0e27f471f1 Removes avatarURL from settings UI.
Removes storing avatarURL in localstorage and retrieving it.
2016-08-30 14:09:07 -05:00
hristoterezov
ba477ad720 Merge pull request #816 from jitsi/improve-device-errors
Updates string for not found devices.
2016-08-30 13:04:44 -05:00
yanas
7858c157c1 Fix shortcut appearing in tooltip of wrong buttons 2016-08-29 23:56:20 -05:00
damencho
a5d3cc63c3 Updates string for not found devices.
The user can be in case where there is no audio or no video device at all, so removing the requested word from the message.
2016-08-29 16:46:44 -05:00
hristoterezov
cac7ccf176 Merge pull request #812 from jitsi/attach-shortcuts-to-features
Attach keyboard shortcuts to features
2016-08-29 16:05:12 -05:00
yanas
9693cba17a Registers filmstrip shortcut from bottom toolbar 2016-08-29 15:47:24 -05:00
yanas
45e38ae4c9 Fix wrong import 2016-08-29 13:04:55 -05:00
Paweł Domas
ad68d535b4 Merge pull request #815 from SamWhited/mod_auth_token_tweaks
mod_auth_token: Misc minor fixes
2016-08-29 10:23:44 -05:00
Sam Whited
bb56ea4b33 mod_auth_token: Add semicolons
Remove unnecessary cjson config
2016-08-29 09:39:47 -05:00
Ilya Daynatovich
ba822eaeed Fix problem with last video preview 2016-08-29 16:39:57 +03:00
yanas
7076ada6f4 Attach keyboard shortcuts to features 2016-08-28 22:59:23 -05:00
Paweł Domas
84834dc4e6 Merge pull request #808 from SamWhited/auth_token_asap
Add support for fetching public keys from a server to mod_auth_token
2016-08-26 16:51:17 -05:00
hristoterezov
f9b3f34593 Merge pull request #810 from jitsi/fix-hangup-multiple-feedback-windows
Fix hangup triggering multiple feedback windows
2016-08-26 16:30:31 -05:00
Sam Whited
c17576a931 mod_auth_token: Don't timeout finished requests 2016-08-26 16:19:01 -05:00
yanas
570124058c Addresses comment about Feedback dependency 2016-08-26 16:07:20 -05:00
Sam Whited
3793119209 mod_auth_token: Fix cache hit log line 2016-08-26 16:03:08 -05:00
Sam Whited
7fb18d1cb3 Fix broken claims comparison 2016-08-26 14:47:34 -05:00
Sam Whited
4fc86175e1 mod_auth_token: Set room name on session 2016-08-26 14:41:06 -05:00
Sam Whited
c951f7f3e9 Add missing semicolons 2016-08-26 14:11:50 -05:00
yanas
777217bd75 Fixes hangup triggering multiple feedbacks. 2016-08-26 11:42:45 -05:00
yanas
2bb637e140 Fixes hangup triggering several times 2016-08-26 11:42:45 -05:00
Дамян Минков
b5c1c95a15 Merge pull request #807 from jitsi/fix_ss_external_install
Fixes the issue with SS external installation dialog is not closed after the plugin has been installed
2016-08-26 11:40:35 -05:00
Sam Whited
f2e369cfc0 mod_auth_token: Remove broken path.join 2016-08-26 09:48:02 -05:00
yanas
6329271731 Merge pull request #806 from BeatC/fix-help-dialog-behind-filmstrip
Change z-index of keyboard-shortcuts
2016-08-25 14:15:57 -05:00
yanas
1428559546 Merge pull request #805 from jitsi/fix-moderator-mute
Fixes muting particular remote participant.
2016-08-25 14:15:01 -05:00
hristoterezov
5c9a85e928 Fixes the issue with SS external installation dialog is not closed after the plugin has been installed 2016-08-25 13:27:58 -05:00
Illia Daynatovich
00355caf8d HQL-1829 Change z-index of keyboard-shortcuts 2016-08-25 12:12:29 +03:00
Sam Whited
feb1d9d8e1 Add an LRU cache to mod_auth_token 2016-08-24 15:28:13 -05:00
Sam Whited
7f2fa9597c Add basic ASAP support to mod_auth_token
See: http://s2sauth.bitbucket.org/
2016-08-24 14:08:21 -05:00
damencho
246ab88a3e Fixes muting particular remote participant.
There was a bug that the handlers for menuItem for mute and kick are added for all remote participants. When clicked multiple handlers are executed and the action will be executed for all remote participants.
2016-08-23 18:37:41 -05:00
Дамян Минков
49cc4ae087 Merge pull request #802 from jitsi/fix-video-linux-qt
Fix video thumbnails for Qt on Linux.
2016-08-23 15:36:52 -05:00
hristoterezov
8d466ad77f Merge pull request #801 from jitsi/reloads-update
Updates statistics implementation.
2016-08-23 10:20:44 -05:00
yanas
f824f78db9 Fix video thumbnails for Qt on Linux. 2016-08-22 16:31:20 -05:00
damencho
35f592bb2c Adds optional label to statistics implementation. 2016-08-22 15:18:13 -05:00
bgrozev
25a6728acc Merge pull request #663 from cmrd-senya/patch-1
Update manual-install.md
2016-08-21 14:36:06 -05:00
jitsi-pootle
169da33411 New files added from translate.jitsi.org based on templates 2016-08-21 19:30:40 +00:00
George Politis
db70cf4aa9 Merge pull request #795 from jitsi/hide-download-log
Hide download log by default
2016-08-17 16:00:09 -05:00
yanas
dcfab4401f Update main.css 2016-08-17 15:50:26 -05:00
hristoterezov
d85a91ae49 Merge pull request #792 from jitsi/remove-bottom-toolbar-button-separators-1
Remove unused css class
2016-08-16 16:53:49 -04:00
hristoterezov
a3b1a80658 Merge pull request #791 from jitsi/remove-bottom-toolbar-button-separators
Remove bottom toolbar button separators
2016-08-16 16:53:03 -04:00
yanas
db20f145fb Remove unused css class 2016-08-16 15:20:32 -05:00
yanas
986bfd02b3 Remove bottom toolbar button separators 2016-08-16 15:14:30 -05:00
Paweł Domas
57506934f2 Merge pull request #790 from jitsi/show-toolbar-in-ring-overlay
Show the toolbar even if in a ring overlay
2016-08-16 15:07:51 -05:00
yanas
372a5e2a49 Update UI.js
Show the toolbar even if in a ring overlay.
2016-08-16 13:44:34 -05:00
Дамян Минков
726b972223 Merge pull request #789 from bgrozev/cleanup
refactor: removes unused code.
2016-08-15 22:59:35 -05:00
Boris Grozev
65300b34df refactor: removes unused code. 2016-08-15 22:57:36 -05:00
Paweł Domas
d7a7733d30 Merge pull request #787 from bgrozev/resolution-change
Brings back resolution changes logging to callstats.
2016-08-15 15:16:05 -05:00
Boris Grozev
7154fd4d39 Brings back resolution changes logging to callstats. 2016-08-15 14:40:55 -05:00
Дамян Минков
45830c1086 Merge pull request #785 from bgrozev/stream-switch-logs
Logs stream switch delays using analytics instead of callstats.
2016-08-12 16:51:39 -05:00
Дамян Минков
202ad0542f Merge pull request #784 from bgrozev/round-analytics-values
Rounds floats passed to analytics (instead of truncating them).
2016-08-12 16:51:29 -05:00
Boris Grozev
c59d9e7c8b Rounds floats passed to analytics (instead of truncating them). 2016-08-12 15:22:38 -05:00
Boris Grozev
f4f0a7d90e Logs stream switch delays using analytics instead of callstats. 2016-08-12 15:13:27 -05:00
damencho
ec98e6fdff Revert "Skips the analytics file from main folder when creating deb." Excluding file, excludes it and from subfolders.
This reverts commit 157bb1931d.
2016-08-11 12:53:37 -05:00
Дамян Минков
c68bcb8fbc Merge pull request #782 from jitsi/fix-unsupported-browser-images
Fix unsupported browser images
2016-08-11 11:08:59 -05:00
yanas
c37876a8b7 Fix unsupported browser images
Fixes the path of the unsupported browser images
2016-08-11 10:14:06 -05:00
bgrozev
23a805b79c Merge pull request #780 from jitsi/fix-duplicate-analytics-files
Skips the analytics file from main folder when creating deb.
2016-08-10 16:09:01 -05:00
damencho
157bb1931d Skips the analytics file from main folder when creating deb. 2016-08-10 15:47:54 -05:00
bgrozev
e59ad67055 Merge pull request #779 from jitsi/fix_ss_from_popup
Implements extension external installation for popup windows
2016-08-10 15:25:35 -05:00
hristoterezov
97b9b67768 Merge pull request #777 from jitsi/analytics-move2
Moves loading of analytics in the library.
2016-08-10 15:19:36 -05:00
hristoterezov
f899d16a79 Implements extension external installation for popup windows 2016-08-10 14:13:32 -05:00
damencho
53288fc997 Moves analytics js next to libraries so it can be dynamically loaded. 2016-08-10 13:28:15 -05:00
yanas
7c89f2b7d1 Merge pull request #778 from jitsi/fix-toolbar-hide
Fixes the check whether we are hovering over the toolbar.
2016-08-09 18:04:04 -05:00
damencho
2c39514359 Fixes the check whether we are hovering over the toolbar. 2016-08-09 17:39:24 -05:00
damencho
536ffb31e0 Moves loading of analytics in the library. 2016-08-09 15:04:40 -05:00
Дамян Минков
a50a980de4 Merge pull request #776 from jitsi/isolate-object-fix-browser-specific
Isolate object-fit fix for Windows Qt browser only
2016-08-08 17:19:56 -05:00
yanas
da0898a066 Isolate object-fit fix for Windows Qt browser only 2016-08-08 17:03:13 -05:00
George Politis
541f83cf71 Merge pull request #774 from jitsi/analytics-move
Analytics move
2016-08-05 13:49:05 -05:00
Paweł Domas
fe6588516f Merge pull request #773 from jitsi/object-fit-fix-and-refactoring-around-it
Object fit fix and refactoring around it
2016-08-05 10:25:36 -05:00
damencho
6651168dd3 Moves render and ttfm connection times to the library. 2016-08-05 09:52:09 -05:00
yanas
ced7da405d Merge pull request #772 from jitsi/crash_no_mediastreamtrack
Fix a crash on IE/Safari when plugin is not installed
2016-08-04 16:24:03 -05:00
yanas
fd836560aa Fix object-fit on some browsers 2016-08-04 15:56:04 -05:00
yanas
5654d34ee8 Fix remote participant menu for moderator 2016-08-04 15:24:36 -05:00
damencho
6302e42229 Uses analytics from lib-jitsi-meet and adds new events.
Adds more analytics events for shortcuts, recording and shared video. Changes the way we calculate ttfm.
2016-08-04 14:19:09 -05:00
paweldomas
34a24ce290 Fix a crash on IE/Safari when plugin is not installed 2016-08-04 09:37:04 -05:00
bgrozev
71a778b65c Merge pull request #771 from jitsi/IE10-URL-fix
Fix broken invite URL on IE10
2016-08-03 15:12:25 -05:00
paweldomas
62fa4dffa8 Fix broken invite URL on IE10
IE 10 does not support "window.location.origin"
2016-08-03 14:45:50 -05:00
yanas
d3dd643a88 Revert "Fix object-fit: cover not supported for video"
This reverts commit db0c4e95f7.
2016-08-03 13:03:42 -05:00
yanas
6116df9411 Revert "Change the default font to Helvetica Neue"
This reverts commit b309ef25fd.
2016-08-03 13:01:46 -05:00
yanas
db0c4e95f7 Fix object-fit: cover not supported for video 2016-08-03 13:01:46 -05:00
Дамян Минков
9a25db34aa Merge pull request #763 from jitsi/hide_toolbar_when_ringing
Hide the toolbar when the the ring overlay is displayed
2016-08-03 13:00:52 -05:00
Paweł Domas
c7710bfe1c Merge pull request #769 from jitsi/ttfm
Adds analytics event and console log for TTFM (time to first media).
2016-08-03 12:52:20 -05:00
Дамян Минков
dd7502f8de Merge pull request #754 from bgrozev/log-json
Formats the resolution change log as JSON.
2016-08-03 12:50:22 -05:00
damencho
df01358fb8 Adds comment. 2016-08-03 12:49:19 -05:00
Paweł Domas
d3cd634bff Merge pull request #770 from jitsi/update-config-inclusion
Update config inclusion
2016-08-03 12:39:26 -05:00
damencho
1454a28a69 Fixes serving interface_config when using jetty. 2016-08-03 11:53:21 -05:00
damencho
7251c7a641 Fixes a problem when using base for the page.
The problem is when not using / before virtual files and having a base for the page nginx can search for the file in wrong location.
2016-08-03 11:52:56 -05:00
damencho
06c636311d Adds analytics event and console log for TTFM (time to first media). 2016-08-03 11:19:09 -05:00
hristoterezov
b457166726 Merge pull request #765 from jitsi/analytics-update2
Adds analytics event for rendering audio and video.
2016-08-02 14:53:19 -05:00
damencho
562c2e38db Adds analytics event for rendering audio and video. 2016-08-02 13:19:03 -05:00
hristoterezov
e2c16c9c11 Merge pull request #764 from jitsi/switch_to_luajwt
Switch back to 'luajwt' in order to fix broken JWT
2016-08-02 13:13:37 -05:00
hristoterezov
db91040443 Merge pull request #761 from jitsi/updates-index-title
Moves favicon into the title html.
2016-08-02 12:38:02 -05:00
paweldomas
9f3c209096 Switch back to 'luajwt' in order to fix broken JWT
Temporarily reference 'luajwtjitsi' luarock for immediate
deployment until our changes with RS256 support
eventually get merged with the master
2016-08-02 12:35:48 -05:00
paweldomas
123b5abb08 Hide the toolbar when the the ring overlay is displayed 2016-08-02 09:04:31 -05:00
damencho
6cb89891ce Moves favicon into the title html.
Moves favicon into the title html with all metadata for easy overriding. Moves the title html inclusion after all the connection optimisations to avoid downloading the icon to interfere those optimisations.
2016-08-01 17:11:16 -05:00
damencho
ff68caaa16 Adds a comment and disables jshint error.
Merge pull request #760 from aaronkvanmeerten/master
2016-08-01 17:00:47 -05:00
Aaron van Meerten
a58190a935 Interface Config loaded via SSI into index.html to allow deployment-specific overrides even when using CDN
update whitespace in toolbar buttons array to allow value to be more easily overridden
2016-08-01 16:42:15 -05:00
Дамян Минков
372278d163 Merge pull request #755 from jitsi/change-default-font
Change the default font to Helvetica Neue
2016-08-01 16:10:56 -05:00
Paweł Domas
a5a7b63abf Merge pull request #759 from jitsi/analytics-update
Adds more analytics events.
2016-08-01 15:43:31 -05:00
damencho
e9b7aaea84 Adds more analytics events. 2016-08-01 15:03:38 -05:00
George Politis
132d823f54 Merge pull request #758 from jitsi/updates-title-meta
Moves meta html headers inside title.html file.
2016-08-01 14:42:11 -05:00
George Politis
75eb30b09d Merge pull request #757 from jitsi/remove_query_string
Removes query arguments from the invite URL/address bar URL.
2016-08-01 14:22:43 -05:00
damencho
baa60347fb Moves meta html headers inside title.html file. 2016-08-01 14:18:54 -05:00
paweldomas
8de3e0ff0b Remove query parameters from the URL visible to the user 2016-08-01 13:44:42 -05:00
paweldomas
443c29f505 No longer use full href for the invite URL 2016-08-01 13:44:35 -05:00
yanas
b309ef25fd Change the default font to Helvetica Neue 2016-08-01 10:58:12 -05:00
Paweł Domas
0ea5175354 Merge pull request #737 from SamWhited/jwt_signing_none_check
Check for "none" alg in JWT signing
2016-08-01 08:33:08 -05:00
bgrozev
10517115c3 Merge pull request #752 from jitsi/fix_gsm_bars_resolution
Preventing the client for using/sending resolution data from/to remote participants
2016-07-28 15:37:38 -05:00
Boris Grozev
ddb356482f Formats the resolution change log as JSON. 2016-07-28 11:11:34 -05:00
hristoterezov
6ae35fb21d Preventing the client for using/sending resolution data from/to remote participants 2016-07-27 12:46:07 -05:00
bgrozev
330597182c Merge pull request #751 from jitsi/dc_send_throw
Handles the errors thrown by the data channel methods
2016-07-26 09:34:06 -05:00
Boris Grozev
adefa40dcc Simplifies code, reduces the scope of "try". 2016-07-26 08:32:25 -05:00
hristoterezov
8d162609e0 Handles the errors thrown by the data channel methods 2016-07-25 17:04:39 -05:00
Paweł Domas
0a51ddd7ef Merge pull request #750 from jitsi/fix_con_interrupted
Fixes issue with not removing connection interrupt label after reload
2016-07-25 14:09:30 -05:00
hristoterezov
c3ae8669e8 Fixes issue with not removing connection interrupt label after reload 2016-07-25 13:57:01 -05:00
Paweł Domas
974ba47e3c Merge pull request #748 from jitsi/gsm_bars_interrupted
Fixes the gsm bars during ice disconnected
2016-07-22 14:02:19 -05:00
hristoterezov
9d170e4c59 Fixes the gsm bars during ice disconnected 2016-07-22 13:42:41 -05:00
bgrozev
ae0e950c16 Merge pull request #746 from jitsi/dc_stats2
Changes the connection quality stats to be sent by the data channels
2016-07-22 07:34:01 +02:00
Дамян Минков
79412f20ab Updates quick-install doc with the new repo. 2016-07-21 22:53:58 -05:00
hristoterezov
7ea047cf1b Merge pull request #743 from jitsi/handle-initial-videotype
Uses videoType from the video track for the initial value.
2016-07-21 17:16:17 -05:00
hristoterezov
4bf5d69002 Changes the connection quality stats to be sent by the data channels 2016-07-21 17:00:57 -05:00
bgrozev
0e2d8a323a Merge pull request #732 from champtar/shortcut-help
Improve keyboard shortcut handling
2016-07-21 19:53:49 +02:00
Etienne CHAMPETIER
9a4cee1818 Improve keyboard shortcut handling
Use KeyboardEvent.key if available,
match both lower and upper case letters to keep previous behaviour

KeyboardEvent is a mess.

KeyboardEvent.which gives you, in theory, a decimal representation of the key pressed.
"r" or "R" gives you 82, which is "R", you can look at KeyboardEvent.shiftKey,
but you don't have access to capslock...

Maybe you want to use numbers, but of course NumPad will not give you the same than
"normal" numbers ...

Now if you use something else than letter, for exemple "?",
on a QWERTY keyboard "/" and "?" gives you 191,
on a AZERTY keyboard "," and "?" gives you 188, so we have to stick to letters.

This was for keydown and keyup events, keypressed event return the real char
(lower "a", "/", "?", ...) but it fails in some cases

The only non broken property is KeyboardEvent.key,
but it's only supported since Chrome 51, Opera 38, and not supported by Safari
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key

A good reference & test:
http://unixpapa.com/js/testkey.html
http://unixpapa.com/js/key.html

Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-07-21 16:58:52 +02:00
bgrozev
b0957f387e Merge pull request #744 from jitsi/revert-741-dc_stats
Revert "Changes the connection quality stats to be sent by the data channels"
2016-07-21 08:36:12 +02:00
bgrozev
1f8dc54368 Revert "Changes the connection quality stats to be sent by the data channels" 2016-07-21 08:33:04 +02:00
damencho
74ece3a775 Uses videoType from the video track for the initial value.
Handles the case where the remote track is with initial value of camera and no further events are received for video type changed.
2016-07-20 22:13:26 -05:00
Дамян Минков
60f7b9ab93 Merge pull request #741 from jitsi/dc_stats
Changes the connection quality stats to be sent by the data channels
2016-07-20 16:13:51 -05:00
Paweł Domas
f8d555790b Merge pull request #742 from jitsi/add_languages
Adds Armenian and Occitan languages
2016-07-20 15:41:44 -05:00
hristoterezov
4ff297730c Adds Armenian and Occitan languages 2016-07-20 15:38:50 -05:00
ibauersachs
29050ea917 Commit from translate.jitsi.org by user ibauersachs.: 118 of 250 strings translated (10 fuzzy). 2016-07-20 20:19:10 +00:00
ibauersachs
c4c0bc1c37 Commit from translate.jitsi.org by user ibauersachs.: 150 of 250 strings translated (7 fuzzy). 2016-07-20 20:19:00 +00:00
ibauersachs
0f52f4e5a1 Commit from translate.jitsi.org by user ibauersachs.: 160 of 250 strings translated (6 fuzzy). 2016-07-20 20:18:47 +00:00
ibauersachs
cff7a5c2f5 Commit from translate.jitsi.org by user ibauersachs.: 151 of 250 strings translated (7 fuzzy). 2016-07-20 20:18:36 +00:00
ibauersachs
626d9a40ed Commit from translate.jitsi.org by user ibauersachs.: 163 of 250 strings translated (8 fuzzy). 2016-07-20 20:18:28 +00:00
ibauersachs
b8f26c58e3 Commit from translate.jitsi.org by user ibauersachs.: 238 of 250 strings translated (0 fuzzy). 2016-07-20 20:18:13 +00:00
ibauersachs
9dbd9b8405 Commit from translate.jitsi.org by user ibauersachs.: 237 of 250 strings translated (1 fuzzy). 2016-07-20 20:18:03 +00:00
ibauersachs
08f200f0eb Commit from translate.jitsi.org by user ibauersachs.: 203 of 250 strings translated (1 fuzzy). 2016-07-20 20:17:33 +00:00
ibauersachs
9fa65ccda6 Commit from translate.jitsi.org by user ibauersachs.: 203 of 250 strings translated (1 fuzzy). 2016-07-20 20:17:24 +00:00
hristoterezov
d0fa9e7ef1 Changes the connection quality stats to be sent by the data channels 2016-07-20 15:16:21 -05:00
Paweł Domas
d7c1976a52 Merge pull request #740 from jitsi/add_languages
Adds new languages to the language select box
2016-07-20 15:11:42 -05:00
hristoterezov
39e71efb2f Adds new languages to the language select box 2016-07-20 15:04:14 -05:00
Ingo Bauersachs
855bcf8fe3 Remove pt_BR language files 2016-07-20 21:25:37 +02:00
ibauersachs
97069f1dc6 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-20 19:28:38 +00:00
ibauersachs
bc3c6412f6 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 21:08:44 +00:00
ibauersachs
51dcb2befb Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 21:08:32 +00:00
ibauersachs
805c9e4eda Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 21:08:23 +00:00
Ingo Bauersachs
a38e85b39c Update languages.json 2016-07-19 22:51:38 +02:00
Ingo Bauersachs
96bd3a54cb Update languages.json 2016-07-19 22:37:24 +02:00
ibauersachs
4fd5fba768 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 20:38:09 +00:00
ibauersachs
06027ea8e5 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 20:37:30 +00:00
ibauersachs
6f38d58954 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 20:37:10 +00:00
Ingo Bauersachs
30c964f1e3 Add Portuguese (Brazil) 2016-07-19 22:29:07 +02:00
ibauersachs
2a8e0bd866 Commit from translate.jitsi.org by user ibauersachs.: 249 of 249 strings translated (0 fuzzy). 2016-07-19 20:33:10 +00:00
Дамян Минков
644e12929c Merge pull request #733 from mbell8903/patch-1
Change reference to lib-jitsi-meet to use full github url
2016-07-19 10:50:06 -05:00
Sam Whited
d625b8e3f3 Check for "none" alg in JWT signing 2016-07-18 13:31:30 -05:00
hristoterezov
5b884806d2 Merge pull request #736 from jitsi/lock-error-dialog
Avoids multiple dialog when showing lock attempt errors.
2016-07-15 16:02:26 -05:00
damencho
7aa47647f0 Avoids multiple dialog when showing lock attempt errors. 2016-07-15 15:40:18 -05:00
Дамян Минков
c779dbe8ad Merge pull request #735 from jitsi/fix_typo
Fixes typo
2016-07-15 13:18:57 -05:00
Дамян Минков
64ee01d831 Merge pull request #734 from jitsi/no_audio_element_fix
Fixes the issue with missing audio element for remote participants
2016-07-15 13:18:47 -05:00
hristoterezov
52c6bbe731 Fixes typo 2016-07-15 13:14:10 -05:00
hristoterezov
1963972f75 Fixes the issue with missing audio element for remote participants 2016-07-15 13:12:14 -05:00
Michael Bell
85d0c62c1d Change reference to lib-jitsi-meet to use full github url
This resolves issue #694
2016-07-14 11:23:47 -04:00
Дамян Минков
dfa9bab9e1 Merge pull request #724 from jitsi/reloads
Implements support for conference reloads
2016-07-13 13:19:06 -05:00
champtar
3ed1532f25 Commit from translate.jitsi.org by user champtar.: 249 of 249 strings translated (0 fuzzy). 2016-07-13 11:01:42 +00:00
ibauersachs
115420db82 Commit from translate.jitsi.org by user ibauersachs.: 249 of 249 strings translated (0 fuzzy). 2016-07-12 16:39:53 +00:00
bgrozev
d2a6c4a97f Merge pull request #719 from jitsi/jibri-retries
Jibri retries
2016-07-11 15:53:25 -05:00
hristoterezov
c04874b087 Merge pull request #728 from jitsi/jwt-login-service-2
Jwt login service 2
2016-07-11 15:12:40 -05:00
Дамян Минков
a0b3018ea0 Merge pull request #729 from jitsi/issue_716
Fixes issue #716
2016-07-11 12:46:36 -05:00
hristoterezov
e46d45adea Fixes issue #716 2016-07-11 11:57:24 -05:00
paweldomas
f977030bd6 Add support for JWT login service 2016-07-11 13:47:10 +02:00
paweldomas
38fc1c01d4 Move XMPP login prompt handling to AuthHandler 2016-07-11 13:47:02 +02:00
hristoterezov
2f202deedf Merge branch 'master' into reloads 2016-07-08 16:03:10 -05:00
Дамян Минков
08bd40bb26 Merge pull request #722 from bgrozev/logging
Logs resolution changes to callstats.
2016-07-08 15:50:14 -05:00
Дамян Минков
28700173a0 Merge pull request #723 from bgrozev/doc
Adds documentation.
2016-07-08 15:49:48 -05:00
Boris Grozev
66a46fc580 Adds documentation. 2016-07-08 15:17:28 -05:00
Boris Grozev
de41977c77 Logs resolution changes to callstats. 2016-07-08 15:16:27 -05:00
hristoterezov
45c420561a Merge pull request #721 from jitsi/match-jquery-ui-version
Match the exact version of jquery-ui.
2016-07-08 14:43:22 -05:00
damencho
e240b15d61 Match the exact version of jquery-ui.
Using "compatible version" as ^... matches latest version 1.12.0 and not 1.10.5 (matches >=1.10.5 < 2.0.0) and this prevents it building from source with latest nodejs on clean environment.
2016-07-08 14:41:25 -05:00
bgrozev
486058834e Merge pull request #720 from jitsi/make-update
Executes npm update before making.
2016-07-08 10:54:45 -05:00
damencho
3e473ea9d7 Executes npm update before making.
Executes npm update before making, in order to update latest version of packages like lib-jitsi-meet which are updated from git. The npm install method is supposed to only resolve dependencies and not update to latest versions.
2016-07-08 10:52:04 -05:00
paweldomas
62dd54ab31 Display spinner for RETRYING recording status 2016-07-08 14:53:00 +02:00
paweldomas
b3e02add3d Fix moveToCorner method
If the class was contained the old code was removing it
2016-07-08 14:51:15 +02:00
hristoterezov
7bf9a82f0b Implements conference reload support 2016-07-07 20:44:04 -05:00
bgrozev
ce5ff20d5b Merge pull request #718 from jitsi/dialogs-update
Dialogs update
2016-07-06 14:52:45 -05:00
damencho
615daa8c9f Updates close function parameters. 2016-07-06 13:52:59 -05:00
damencho
5dffddceec Make sure we have only one dialog instance. 2016-07-06 13:26:27 -05:00
damencho
d5de49b5cf Returns the dialog instances that were created and adds an optional close callback. 2016-07-06 13:10:45 -05:00
damencho
62f7553ba4 Updates two button dialogs to be only single instance. 2016-07-06 11:00:04 -05:00
hristoterezov
b7ad6b606a Merge pull request #717 from tsareg/error_types
Expose JitsiTrackError through JitsiMeetJS.errorTypes.JitsiTrackError
2016-07-06 09:17:40 -05:00
tsareg
60c2ee41e3 Expose JitsiTrackError through JitsiMeetJS.errorTypes.JitsiTrackError 2016-07-06 16:21:26 +03:00
damencho
64475143cf Removes keyring dependency to switch to new build machine. 2016-06-30 15:31:35 -05:00
damencho
c1122eae3a Adds dependency to new keyring and new repo update. 2016-06-30 15:22:22 -05:00
Дамян Минков
1792b1ed85 Merge pull request #711 from jitsi/room_name_undefined
Fixes issue with room name parameter = undefined
2016-06-28 11:52:45 -05:00
hristoterezov
d624f2584d Fixes issue with room name parameter = undefined 2016-06-28 11:21:37 -05:00
Дамян Минков
f39f8d14fd Merge pull request #706 from jitsi/ui-improvements-and-styles
UI improvements and styles
2016-06-24 14:43:51 -05:00
yanas
770b003163 Change global font, unify fonts, colors and more 2016-06-24 14:09:34 -05:00
Дамян Минков
702b177e06 Merge pull request #708 from jitsi/gsm_bars_fix
Fixes issue with gsm bars for remote participants are always full
2016-06-24 12:26:48 -05:00
hristoterezov
3c0295e294 Removes console.debug 2016-06-24 12:25:21 -05:00
hristoterezov
970e8c764c Fixes issue with gsm bars for remote participants are always full 2016-06-24 12:22:51 -05:00
yanas
1d393f5786 Merge pull request #701 from tsareg/gum_permission_dialog_guidance
Show overlay with guidance for gUM permission prompts
2016-06-24 11:17:38 -05:00
tsareg
f03b228eea Merge remote-tracking branch 'remotes/upstream/master' into gum_permission_dialog_guidance 2016-06-24 13:02:58 +03:00
tsareg
d149ba6fc5 Fire an optional JitsiMediaDevices.PERMISSION_PROMPT_IS_SHOWN event when browser shows user media permission prompt when calling createLocalTracks 2016-06-24 12:47:13 +03:00
Дамян Минков
f3dc6f15e4 Merge pull request #705 from bgrozev/esc-shortcut
Hide the shortcuts panel when the Escape key is pressed.
2016-06-23 16:24:10 -05:00
tsareg
8ca282079a Changes after code review 2016-06-23 11:03:26 +03:00
yanas
769644a63f Merge pull request #700 from bgrozev/raise-hand2
Raise hand2
2016-06-22 21:59:22 -05:00
Boris Grozev
2cefea3677 Hide the shortcuts panel when the Escape key is pressed. 2016-06-22 13:30:00 -05:00
bgrozev
2e802c0f6d Merge pull request #698 from jitsi/external_api
Changes the implementation of the iframe API to use postis
2016-06-22 13:12:49 -05:00
hristoterezov
d29e39c1d2 Adds libs directory to .gitignore 2016-06-22 13:11:48 -05:00
hristoterezov
09fb5e5667 Merge pull request #703 from jitsi/fix-avatar-url-string
Fixes avatar URL setting string
2016-06-21 15:03:02 -05:00
yanas
70e5ce7aec Fixes avatar URL setting string 2016-06-21 15:01:43 -05:00
Любомир Маринов
1f942aa13d Merge pull request #697 from tsareg/fix_two_gum_error_dialogs
Fixing various edge-cases when two gUM error dialogs might be shown and other possible bugs
2016-06-21 12:49:10 -05:00
hristoterezov
b60095df28 Merge pull request #702 from jitsi/deb-update-deps
Removes unused dependency.
2016-06-21 10:52:20 -05:00
damencho
6715d41f92 Removes unused dependency.
Used to minimize strophe-plugins which were inside the source tree and now npm handles them.
2016-06-21 10:38:31 -05:00
tsareg
375b145030 Prevent possible memory leak 2016-06-21 17:39:00 +03:00
tsareg
9d3b2aee02 Show overlay with guidance for gUM permission prompts 2016-06-21 12:08:32 +03:00
Boris Grozev
2d2e27b8d0 Implements "raised hand". 2016-06-20 16:58:54 -05:00
Boris Grozev
4b6ac38058 Fixes a failure to show the dominant speaker indicator for the local participant. 2016-06-20 15:58:08 -05:00
hristoterezov
21c2469dd6 Removes unnecessary whitespaces from Makefile 2016-06-20 13:23:00 -05:00
hristoterezov
02f176c75a Changes the implementation of the iframe API to use postis 2016-06-17 15:35:40 -05:00
tsareg
8b528b582f Fixing various edge-cases when two gUM error dialogs might be shown and other possible bugs 2016-06-17 15:31:25 +03:00
Дамян Минков
72d38ad202 Merge pull request #696 from jitsi/add-pootle-langs
Add missing languages from Pootle
2016-06-15 12:53:59 -05:00
Ingo Bauersachs
7a5461e1cb Add missing languages from Pootle 2016-06-15 11:50:04 +02:00
Ingo Bauersachs
1714ede6d4 Rename Translation.md to readme.md 2016-06-15 11:45:03 +02:00
ibauersachs
f8ee97a71c Commit from translate.jitsi.org by user ibauersachs.: 240 of 240 strings translated (0 fuzzy). 2016-06-15 09:47:54 +00:00
tsareg
897a6bfbe6 Refactored conference.js code. Moved almost all code that relates to handling change of media devices to separate module. Fixed couple of bugs. 2016-06-14 20:40:15 -05:00
yanas
97237470af Visual improvements of keyboard shortcut popup 2016-06-14 20:21:32 -05:00
Boris Grozev
d79971a737 An initial version of a "keyboard shortcuts" help panel. 2016-06-14 20:16:38 -05:00
Дамян Минков
334f7bf95a Merge pull request #693 from jitsi/jwt_support
JWT client support
2016-06-14 14:38:36 -05:00
hristoterezov
661795fd51 Fixes accidentally changed value of strophejs-plugins property in package.json 2016-06-14 13:36:46 -05:00
hristoterezov
47fe71c1f1 Fixes issue with ToolbarToggle.setAlwaysVisibleToolbar 2016-06-14 11:34:56 -05:00
hristoterezov
c5eebcda98 Adds exception for preventing to send the JWT token 2016-06-13 16:43:15 -05:00
hristoterezov
8deb003ef6 JWT client support 2016-06-13 16:11:44 -05:00
George Politis
10b2746a3e Merge pull request #689 from bgrozev/makefile-improvements
Makefile improvements
2016-06-10 15:22:18 -05:00
Boris Grozev
62fd07e98e Copy the map files for the non-minified version to the deploy dir. 2016-06-10 19:44:27 +00:00
Boris Grozev
ee8a270a36 Don't run npm update, because it sometimes causes the lib-jitsi-meet npm link to be removed. 2016-06-10 19:43:29 +00:00
hristoterezov
870a4e705b Merge pull request #683 from jitsi/fixes-ff-warnings-2
Defines^2 the document encoding.
2016-06-09 10:41:43 -05:00
Любомир Маринов
9dcb717a51 Merge pull request #685 from tsareg/fix_type_error_when_enabling_permissions_for_devices
Fix TypeError when one of audioTracks or videoTracks was undefined
2016-06-09 09:37:02 -05:00
tsareg
f72e3bf552 Fix TypeError when one of audioTracks or videoTracks was undefined 2016-06-09 12:38:30 +03:00
George Politis
ef70ff7da0 Defines^2 the document encoding. 2016-06-08 23:51:45 -05:00
hristoterezov
61fa2d8ed1 Merge pull request #682 from jitsi/fixes-ff-warnings
Defines the document encoding.
2016-06-08 23:49:02 -05:00
George Politis
1bda4ca61c Defines the document encoding.
Make FF stop complaining about the character encoding of the HTML document
not being declared.
2016-06-08 18:35:28 -05:00
hristoterezov
ba00080462 Merge pull request #681 from jitsi/add-enable-disable-popup
Unifrms messageHandler access and adds enable disable
2016-06-08 15:05:03 -05:00
yanas
57815cb2fe Unifrms messageHandler access and adds enable disable 2016-06-08 14:48:45 -05:00
yanas
346ff889ea Merge pull request #679 from damencho/follow-me
Fixes follow-me to work without etherpad
2016-06-07 17:01:45 -05:00
damencho
165507b83a Removes printing audio levels by default in debug mode and makes it optional. 2016-06-07 16:40:43 -05:00
damencho
955e01a750 Adds comments for processing nextOnStage. 2016-06-07 16:39:08 -05:00
damencho
ca62f9bec2 Adds a check to make follow me work without etherpad enabled. 2016-06-07 15:13:28 -05:00
Emil Ivov
c82bf2a19c Merge pull request #678 from geekgonecrazy/master
Switch to https on iframe creation
2016-06-07 14:50:21 -05:00
Aaron Ogle
98919e0996 Changed variable from ssl to noSsl
Defaults to SSL, only if the noSsl flag is true will it use http
2016-06-07 14:08:02 -05:00
Aaron Ogle
81437263b4 Allow ssl variable to force https:// on the iframe 2016-06-06 23:06:37 -05:00
Aaron Ogle
f883199f4f Switch to https on iframe creation 2016-06-06 21:56:07 -05:00
damencho
207e6e1b7d Merge pull request #666 from champtar/source-package
Fix missing base.html in source-package
2016-06-06 17:19:45 -05:00
lyubomir
06911c4c75 Merge pull request #676 from jitsi/tsareg-handle_create_local_tracks_errors_better
Tsareg handle create local tracks errors better
2016-06-03 16:17:34 -05:00
Lyubomir Marinov
fa1ea94c5c Merge branch 'handle_create_local_tracks_errors_better' of https://github.com/tsareg/jitsi-meet into tsareg-handle_create_local_tracks_errors_better 2016-06-03 14:28:09 -05:00
hristoterezov
6b704f184b Merge pull request #675 from aaronkvanmeerten/master
Only push to history with present page URL plus room name
2016-06-03 14:13:49 -05:00
Aaron van Meerten
c2eede2bb5 Only push to history with present page URL plus room name
Use location.href instead of location.pathname to make the URL absolute
2016-06-03 13:00:09 -05:00
lyubomir
0fec9565e5 Merge pull request #668 from jitsi/jetty-ssi-impl
Adds property for initial jetty ssi configuration.
2016-06-03 09:56:43 -05:00
Emil Ivov
8114152369 Merge pull request #673 from jitsi/revert-history-pushState
Revert "Removes unnecessary history.pushState if the welcome page is …
2016-06-03 07:47:53 -05:00
yanas
968521ef7c Revert "Removes unnecessary history.pushState if the welcome page is disabled and the user enter the base URL"
This reverts commit 3d5af92c7a.
2016-06-03 07:45:57 -05:00
Paweł Domas
bdb4d019f8 Merge pull request #672 from tsareg/audio_output_change_warning
Log warning instead of error for audio output device change errors
2016-06-03 11:11:20 +02:00
tsareg
c1a93afeaf Log warning instead of error for audio output device change errors 2016-06-03 11:15:07 +03:00
hristoterezov
b8d8ef5cfd Merge pull request #670 from jitsi/handle-recording-errors
Handle recording errors
2016-06-02 18:18:42 -05:00
yanas
07c2e91ae2 Do not handle the actual error message yet 2016-06-02 17:12:40 -05:00
yanas
7e4b13fb44 Remove recorder errors import 2016-06-02 15:41:28 -05:00
yanas
69798848c0 Handle recording errors 2016-06-02 13:34:51 -05:00
Emil Ivov
9e52e65faa Merge pull request #669 from jitsi/remove_history_push
Removes unnecessary history.pushState if the welcome page is disabled and the user enter the base URL
2016-06-02 13:25:00 -05:00
hristoterezov
3d5af92c7a Removes unnecessary history.pushState if the welcome page is disabled and the user enter the base URL 2016-06-02 13:02:42 -05:00
damencho
ed9fd6c8fd Adds property for initial jetty ssi configuration. 2016-06-02 12:27:47 -05:00
Emil Ivov
6c1349c501 Merge pull request #667 from jitsi/history_fix
Fixes unhandled error from history.pushState
2016-06-01 17:53:41 -05:00
hristoterezov
6e34e33b0d Fixes unhandled error from history.pushState 2016-06-01 17:47:24 -05:00
Etienne CHAMPETIER
5d9d6b4642 Fix missing base.html in source-package
Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-06-01 15:58:55 +02:00
Senya
8196233ed2 Update manual-install.md
There is no YOURSECRET4 mentions in the document
2016-05-29 15:04:33 +03:00
yanas
c29f9921a1 Merge pull request #662 from aaronkvanmeerten/master
make the chatArrow image reference relative
2016-05-27 11:03:20 -05:00
tsareg
f574dbe056 Changes after code review 2016-05-27 18:49:26 +03:00
Aaron van Meerten
e6385bb95d make the chatArrow image reference relative, allows for better base href support 2016-05-27 10:45:38 -05:00
tsareg
ccdba03888 Minor fixes for error dialogs 2016-05-27 14:01:43 +03:00
tsareg
e257a3dfc9 Merge branch 'master' into handle_create_local_tracks_errors_better
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2016-05-27 11:29:23 +03:00
tsareg
448fcf36b6 Show dialog for GUM errors 2016-05-26 11:53:02 +03:00
tsareg
48b219111d Use special JitsiTrackError object instead just strings for various types of errors that may happen to JitsiTrack 2016-05-25 15:04:48 +03:00
yanas
7f9c4d6480 Merge pull request #659 from aaronkvanmeerten/master
SSI inclusion of config.js
2016-05-24 12:48:07 -05:00
hristoterezov
064917886e Merge pull request #660 from jitsi/fix-user-cancel-reject-handling
Handle Promise.reject for user cancel case
2016-05-23 17:22:51 -05:00
yanas
0cf291d796 Handle Promise.reject for user cancel case 2016-05-23 16:46:41 -05:00
champtar
8418fc97f1 Commit from translate.jitsi.org by user champtar.: 203 of 203 strings translated (0 fuzzy). 2016-05-23 09:13:54 +00:00
Aaron van Meerten
6170f6c268 add support for possible ssi of <base> attribute
left blank in default meet installations, to be overridden by adding <base href="CDN_URL"> to /base.html
2016-05-20 16:51:37 -05:00
Aaron van Meerten
4dd82b3376 switch config.js values to be present directly in index.html, loaded server-side during page render instead of as a separate request 2016-05-20 16:45:40 -05:00
bgrozev
9ce5e232bb Merge pull request #658 from jitsi/nuke-preconfigured-bridge
Nukes the pre-configured bridge from the config file.
2016-05-19 14:56:37 -05:00
George Politis
318ab2c9dc Nukes the pre-configured bridge from the config file. 2016-05-19 14:51:45 -05:00
yanas
29f06bbb77 Merge pull request #657 from tsareg/switch_tracks_on_device_list_change
Switch local audio and video track when list of available devices changes
2016-05-18 15:18:31 -05:00
Kostiantyn Tsaregradskyi
c1807c3649 Handle cases when new media devices are added/removed more precisely and more predictable 2016-05-18 14:23:12 +03:00
Kostiantyn Tsaregradskyi
b270256a7a Switch local audio and video track when list of available devices changes 2016-05-17 18:58:25 +03:00
damencho
27586643c3 Merge pull request #654 from jitsi/gsm_bars
Changes the way of calculating connection quality.
2016-05-17 10:53:38 +03:00
hristoterezov
99e6453e09 Changes the way of calculating connection quality. 2016-05-12 17:48:19 -05:00
yanas
eda11f4657 Merge pull request #653 from tsareg/device_list_change_basic_support
Update devices in settings panel when list of available devices changes
2016-05-12 15:02:19 -05:00
Kostiantyn Tsaregradskyi
474155ce9d Added ability to notify about available media device list changes 2016-05-11 16:59:27 +03:00
hristoterezov
49e60a8b4f Merge pull request #645 from tsareg/master
Added ability to change output audio device through settings
2016-05-10 13:28:40 -05:00
Kostiantyn Tsaregradskyi
5e027e0a91 Added ability to switch audio output device - changes after review 2016-05-10 13:11:41 +03:00
hristoterezov
e2a7a66772 Merge pull request #624 from jitsi/updates-callstats-error-reporting
Updates callstats error reporting
2016-05-09 13:23:01 -05:00
yanas
76017bcbe3 Merge pull request #649 from jitsi/flip_flag
Adds config option for enabling the flip menu for the local video
2016-05-09 13:21:33 -05:00
hristoterezov
1eb915d312 Adds config option for enabling the flip menu for the local video 2016-05-09 12:39:42 -05:00
bgrozev
3df47f0d72 Merge pull request #647 from jitsi/updates-deployment-non-min
Updates deployment with non-minified versions of libs.
2016-05-09 08:34:33 -05:00
champtar
cc5d563599 Commit from translate.jitsi.org by user champtar.: 203 of 203 strings translated (0 fuzzy). 2016-05-09 13:26:57 +00:00
damencho
c5e7ca8a26 Adds non-minified versions of app.bundle and lib-jitsi-meet to the libs folder which is included in the deb package. 2016-05-09 11:49:04 +03:00
yanas
626b37b4fe Merge pull request #646 from jitsi/flip
Implements custom context menu to flip the local video
2016-05-08 10:50:35 -05:00
hristoterezov
c3338d3bf2 Implements custom context menu to flip the local video 2016-05-06 20:50:37 -05:00
Kostiantyn Tsaregradskyi
d34adb67dd Added ability to switch audio output device 2016-05-06 17:31:23 +03:00
George Politis
ae543e68d6 Merge pull request #642 from jitsi/fix_ff_hangup
Fixes issue with not working hangup button on FF
2016-05-05 17:03:46 -05:00
Paweł Domas
50f261effc Merge pull request #643 from jitsi/fix-recorder-error-states
Fix recorder error and state handling
2016-05-05 14:50:51 -05:00
yanas
0736206722 Fix recorder error and state handling 2016-05-05 11:46:06 -05:00
hristoterezov
9dc9dc3685 Fixes issue with not working hangup button on FF 2016-05-05 11:11:05 -05:00
Kostiantyn Tsaregradskyi
2bd600aeaf Very raw version of ability to switch audio output device 2016-05-05 17:34:15 +03:00
jitsi-pootle
2c0d60a1f4 New files added from translate.jitsi.org based on templates 2016-05-05 10:45:10 +00:00
ibauersachs
25a62f330f Commit from translate.jitsi.org by user ibauersachs.: 203 of 203 strings translated (0 fuzzy). 2016-05-04 08:40:00 +00:00
Paweł Domas
b191c58462 Merge pull request #640 from jitsi/fix-recorder-states
Fix recorder state and moderator restart
2016-05-03 15:42:50 -05:00
yanas
c07060c9cd Fix recorder state and moderator restart 2016-05-03 15:26:35 -05:00
yanas
0957ee7547 Merge pull request #639 from jitsi/external_connect_and_auth
Fixes issues when external connect and authentication are enabled
2016-05-02 15:00:06 -05:00
hristoterezov
d6ef36b4b4 Passes the room name to connect when using authentication 2016-05-02 14:47:40 -05:00
hristoterezov
6b5f6ec704 Fixes issue with multiple room query parameters added to bosh url 2016-05-02 14:22:02 -05:00
hristoterezov
0970fdd7e7 Clears external connect data after using it 2016-05-02 14:09:57 -05:00
George Politis
1ff3efa7d2 Merge pull request #638 from jitsi/hide-recorder-thumbnail
Hide recorder local thumbnail
2016-05-01 13:59:41 -05:00
yanas
ab67b42eb9 Hide recorder local thumbnail 2016-05-01 13:47:43 -05:00
hristoterezov
cdefca9fbd Merge pull request #633 from jitsi/fix-and-refactor-shared-video
Fix and refactor shared video
2016-04-29 15:39:30 -05:00
hristoterezov
9b334777b3 Merge pull request #634 from jitsi/fix-remote-video-check
Make sure remote video exist before we use it
2016-04-29 12:55:01 -05:00
George Politis
4f2a57c3a5 Merge pull request #636 from jitsi/fix_externalConnectUrl_param
Fixes issue with externalConnectUrl hash param when the value is null
2016-04-29 11:47:44 -05:00
hristoterezov
d535765648 Fixes issue with externalConnectUrl hash param when the value is null 2016-04-29 11:46:24 -05:00
yanas
edf2f8114b Make sure remote video exist before we use it 2016-04-28 21:18:48 -05:00
yanas
d95b2b034b Fix initial state of user interaction mute 2016-04-28 17:47:40 -05:00
yanas
c2f46a5cfe Refactor shared video manager 2016-04-28 17:44:12 -05:00
hristoterezov
bd7740cba1 Merge pull request #632 from jitsi/add-url-param-conn-opt
Add support for connection optimisation URL param
2016-04-28 15:17:01 -05:00
yanas
4a4e25de28 Add support for connection optimisation URL param 2016-04-28 14:56:11 -05:00
damencho
65c49b6b4c Merge pull request #622 from jitsi/add-smart-mutes-unmutes-shared-video
Add shared video smart mike mutes unmutes
2016-04-28 19:59:00 +03:00
bgrozev
202c506a8d Merge pull request #630 from jitsi/fix-missing-remote-video
Fix missing remote video exception
2016-04-27 16:51:10 -05:00
yanas
aeabad4891 Fix missing remote video exception 2016-04-27 16:28:00 -05:00
bgrozev
5cb2b15b54 Merge pull request #629 from jitsi/lipsync
Lipsync
2016-04-27 15:16:15 -05:00
damencho
81a487b856 Merge pull request #628 from jitsi/add-hidden-participant-support
Add hidden participant support
2016-04-27 18:49:37 +03:00
yanas
c881e7b640 Add hidden participant support 2016-04-27 10:16:30 -05:00
paweldomas
f2c9b8b7a5 Fix issue updating large video 'src' while on stage 2016-04-26 15:42:18 -05:00
paweldomas
0116f547ed Log an error when not an audio nor a video track is added 2016-04-26 15:40:57 -05:00
ibauersachs
13a55089a5 Commit from translate.jitsi.org by user ibauersachs.: 203 of 203 strings translated (0 fuzzy). 2016-04-26 17:13:55 +00:00
George Politis
7bb20bb967 Merge pull request #617 from bgrozev/refactor-util
Exposes the number of participants with tracks.
2016-04-26 10:23:34 -05:00
damencho
08b60bf750 Merge pull request #625 from champtar/source-package
Fix "make source-package"
2016-04-26 17:14:09 +03:00
Etienne CHAMPETIER
ca31bb935b Fix "make source-package"
Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-04-26 13:51:09 +02:00
damencho
1f98fbb99f Adds unhandledrejection, that catches all unhandled promise rejection and logs them in callstats. 2016-04-26 11:00:42 +03:00
damencho
2442f0dfd3 Removes playerPaused variable and just use player to get its state. 2016-04-26 10:22:12 +03:00
yanas
3a9d743d47 Add shared video smart mike mutes unmutes 2016-04-25 15:39:31 -05:00
emcho
6a74296d3e Commit from translate.jitsi.org by user emcho.: 180 of 180 strings translated (0 fuzzy). 2016-04-25 19:29:18 +00:00
jitsi-pootle
af46e28fcc New files added from translate.jitsi.org based on templates 2016-04-25 17:14:01 +00:00
Bernhard Lichtinger
c9ebecbf10 Add Firefox in list of supportedBrowsers for invite emails 2016-04-22 12:32:46 +02:00
Boris Grozev
fb7c2082e6 Exposes the number of participants with tracks. 2016-04-21 17:48:30 -05:00
emcho
1feb5d00fe Commit from translate.jitsi.org by user emcho.: 180 of 180 strings translated (0 fuzzy). 2016-04-20 23:06:12 +00:00
jitsi-pootle
faa519cbeb New files added from translate.jitsi.org based on templates 2016-04-20 22:35:07 +00:00
Emil Ivov
40c7a7e1b8 Merge pull request #615 from jitsi/prosody_jwt_errors
Improve token error reporting in Prosody JWT plugin
2016-04-20 17:16:19 -05:00
paweldomas
5a95edbdcd Improve token error reporting in Prosody JWT plugin 2016-04-20 16:38:16 -05:00
hristoterezov
846ec1c9c8 Merge pull request #614 from jitsi/add-initial-id-pass-login
Adds id and password initial login
2016-04-20 15:06:23 -05:00
yanas
1c9903642b Do not remove the login params after read 2016-04-20 14:41:29 -05:00
yanas
6bfb28f63f Merge pull request #610 from jitsi/callstats_fix
Leaves the call when the hangup button is pressed
2016-04-20 14:06:16 -05:00
yanas
3408737693 Adds id and password initial login 2016-04-20 14:02:16 -05:00
damencho
bbc91f6e0c Merge pull request #613 from jitsi/fix-display-name-dialog
Fix require display name dialog
2016-04-19 16:26:22 -05:00
yanas
0bf4660309 Fix require display name dialog 2016-04-19 16:06:16 -05:00
damencho
58d5823d12 Merge pull request #612 from jitsi/add-smart-shared-video-unmute
Adds smart un-mute to the shared video
2016-04-19 13:27:08 -05:00
yanas
326dedaf40 Fix string 2016-04-19 13:24:27 -05:00
yanas
d08e37b42b Adds smart un-mute to the shared video logic 2016-04-19 13:07:04 -05:00
hristoterezov
7c7ce66ae4 Prettifying the code related to showing the feedback dialog 2016-04-19 12:15:04 -05:00
hristoterezov
73b4ad5a63 Added JitsiConference.leave() when the hangup button is pressed 2016-04-18 17:02:34 -05:00
hristoterezov
2b7ae5c167 Merge pull request #609 from jitsi/fix-feedback-enabling
Fix enable feedback button check
2016-04-15 16:11:04 -05:00
yanas
7ba8b0a24e Fix enable feedback button check 2016-04-15 15:41:51 -05:00
damencho
47a64190a6 Merge pull request #602 from jitsi/performanceTime_format
Renames performanceTimes to ConnectionTimes
2016-04-11 13:41:40 -05:00
hristoterezov
b00fb2ec7e Merge pull request #599 from damencho/updates-onDisplayNameChanged
Updates onDisplayNameChanged
2016-04-11 13:12:42 -05:00
damencho
13e3e99994 Updates websockets example. 2016-04-11 10:16:08 -05:00
hristoterezov
655b7019d1 Renames performanceTimes to ConnectionTimes 2016-04-11 10:01:23 -05:00
damencho
702eb8cbbe Merge pull request #600 from jitsi/performanceTime_format
Fixes time console.log text
2016-04-10 12:55:58 -05:00
hristoterezov
ddf39a20b8 Fixes time console.log text 2016-04-10 12:25:37 -05:00
damencho
0e4f4cbd74 Initializes display name with initial value and does not depend on initial on display name changed event. 2016-04-09 22:08:06 -05:00
bgrozev
26443b6d72 Merge pull request #598 from damencho/minimize-document-modifications
Minimize document modifications on every presence
2016-04-09 21:57:16 -05:00
damencho
0974e31da1 Updates connection quality popover only if its visible or about to be visible. 2016-04-09 12:35:54 -05:00
damencho
613569ff09 Checks whether we need to modify document, before change - on display name change. 2016-04-09 12:04:01 -05:00
hristoterezov
4d63ea2021 Merge pull request #597 from jitsi/fix-isvisible-early-call
Fix early call of SidePanel isVisible
2016-04-08 14:49:15 -05:00
yanas
b597f44605 Fix early call of SidePanel isVisible 2016-04-08 14:46:13 -05:00
lyubomir
28bac7b329 Merge pull request #596 from jitsi/fix-black-stripe
Fix the black stripe (another try)
2016-04-08 11:13:12 -05:00
yanas
d9c3eec9a8 Fix the black stripe (another try) 2016-04-08 10:55:19 -05:00
hristoterezov
a8aa62b075 Merge pull request #593 from jitsi/custom-role-recorder-view
Add custom-role to presence and special view for Recorders
2016-04-07 14:58:54 -05:00
yanas
9ef43d1fe7 Remove self and use this instead in conference.js 2016-04-07 14:11:59 -05:00
yanas
562eba8d78 Removed unused variable 2016-04-07 13:58:15 -05:00
yanas
351775a1c0 Add jsdocs to the recording view manager 2016-04-07 13:09:19 -05:00
yanas
99d9b16c13 Add Recorder controller. 2016-04-07 13:06:28 -05:00
yanas
e43c5ab54c Add custom-role to presence and special view for Recorders 2016-04-07 12:08:00 -05:00
damencho
a112b10a36 Merge pull request #591 from jitsi/fix-black-stripe
Fix black stripe and side panel animations
2016-04-06 16:15:22 -05:00
yanas
4990406010 Fix black stripe on the right of the screen 2016-04-06 15:36:41 -05:00
hristoterezov
8842823607 Merge pull request #587 from damencho/global-error-handler
Enables global error handler.
2016-04-06 13:11:22 -05:00
damencho
ccc9f4e033 Adds a check and reuses any previous onerror handlers if they exist. 2016-04-06 11:52:31 -05:00
damencho
e56c936798 Enables global error handler. 2016-04-05 17:18:38 -05:00
damencho
b46480dc16 Merge pull request #586 from jitsi/shared-video-auto-mute-popup
Shared video auto mute popup
2016-04-05 14:40:30 -05:00
yanas
a1cef0f181 Add notification popup for shared video auto mute 2016-04-05 14:17:50 -05:00
yanas
ba871d269f Fix toolbar slide up effect. 2016-04-05 14:14:30 -05:00
Paweł Domas
b60e074710 Merge pull request #584 from bgrozev/enable-as
Enable adaptive simulcast by default
2016-04-04 16:23:58 -05:00
Boris Grozev
8466aa2f78 Renames adaptiveSimulcast to disableAdaptiveSimulcast.
In conjunction with corresponding commits in lib-jitsi-meet and jicofo
this enables adaptive simulcast whenever simulcast is enabled.
2016-04-04 14:15:59 -05:00
yanas
e28975dcb5 Merge pull request #581 from damencho/shared-video-volumes
Changes mute/unmute behavior when playing a shared video.
2016-04-01 17:38:52 -05:00
damencho
e579a41284 Merge pull request #582 from jitsi/set-follow-me-initial
Init follow me attributes after enable
2016-04-01 17:29:26 -05:00
damencho
b949ffdda1 Prevents users that are not sharing the video of pausing the video and leaves the control to the user sharing the video. 2016-04-01 17:23:30 -05:00
damencho
7dad981112 Follow seeking while player is paused. 2016-04-01 17:08:35 -05:00
damencho
6efbf058fa Merge pull request #579 from jitsi/fix-black-stripe-on-load
Fix large black stripe on load.
2016-04-01 16:28:32 -05:00
yanas
a3bfce4c40 Set follow-me initial state after enable 2016-04-01 16:26:30 -05:00
damencho
bede8feccc Mutes local video when shared video is playing and mutes shared video if user wants to talk. 2016-04-01 16:24:35 -05:00
damencho
2d1e7c9baf Merge pull request #580 from jitsi/performance_torture
Stores measured times and exposes them
2016-04-01 15:43:33 -05:00
damencho
9a984b7f84 Instantly update volume changes. 2016-04-01 14:46:42 -05:00
hristoterezov
8d77088f6d Stores measured times and exposes them 2016-04-01 14:44:25 -05:00
yanas
56690037d0 Fix large black stripe on load. 2016-04-01 11:30:05 -05:00
damencho
bd09fa2601 Merge pull request #578 from jitsi/fix-settings-dialog-strings
Unifies all strings in Settings.
2016-04-01 11:21:29 -05:00
damencho
7c7f8960fa Merge pull request #576 from jitsi/hide-feedback-with-filmstrip
Hide feedback with filmstrip
2016-04-01 10:58:01 -05:00
damencho
af2809258c Merge pull request #575 from jitsi/fix-follow-me-exception
Fixes exception in follow-me when we receive an update for a video th…
2016-04-01 08:38:06 -05:00
damencho
2353c6f7e3 Merge pull request #577 from jitsi/update_gitignore
Adds libs/external_connect.js to .gitignore
2016-03-31 22:21:02 -05:00
hristoterezov
b031fdc398 Adds libs/external_connect.js to .gitignore 2016-03-31 18:03:27 -05:00
yanas
144dd85e98 Unifies all strings in Settings. 2016-03-31 17:58:02 -05:00
yanas
67e8118d74 Shows/hides feedback button when the filmstrip is shown/hidden. 2016-03-31 17:35:10 -05:00
yanas
ea9b909775 Fixes exception in follow-me when we receive an update for a video thumbnail that's not there yet. 2016-03-31 15:13:00 -05:00
yanas
b7cc03df26 Merge pull request #573 from damencho/shared-video-updates
Shared video updates
2016-03-31 14:31:57 -05:00
damencho
ebe37ff98a Handle on player error so we can remove the player. 2016-03-31 14:11:33 -05:00
damencho
fcf5c16945 Merge pull request #574 from jitsi/fix-welcome-page-field
Fixes enter room name field in the welcome page.
2016-03-31 13:45:54 -05:00
yanas
5cbe710075 Fixes enter room name field in the welcome page. 2016-03-31 13:31:05 -05:00
damencho
104503ee13 Make sure we store initial attributes in order, so it will hold the last state we want to be in. Respects quick initial stop received. 2016-03-31 12:14:45 -05:00
damencho
2e3dcb142d Updates translation. 2016-03-31 11:43:37 -05:00
damencho
6951089130 Force seek when transition from and to pause state. 2016-03-31 00:07:12 -05:00
damencho
952eaf5a0c Avoids double loading of the player. 2016-03-30 21:36:05 -05:00
hristoterezov
d9e08032ce Changes translation module to load async 2016-03-30 21:01:21 -05:00
damencho
8a80df2828 Merge pull request #561 from jitsi/connection_optimization
Implements server side connection establishment
2016-03-30 14:30:36 -05:00
hristoterezov
166a609b94 Removes console.warn message from do_external_connect.js if there is no error passed. 2016-03-30 13:32:17 -05:00
bgrozev
ff256f15a5 Merge pull request #567 from jitsi/recording-recorder-parameter
Adds an I am a recorder parameter that allows for the UI to be cleane…
2016-03-29 17:29:54 -05:00
damencho
06f3ddc822 Hides the toolbar if the user is a recorder. 2016-03-29 17:28:20 -05:00
yanas
7f7d9d5594 Adds an I am a recorder parameter that allows for the UI to be cleaner and simpler for the recorders. 2016-03-29 17:26:39 -05:00
damencho
3c33542874 Merge pull request #566 from jitsi/recording-related-work-in-progress
Fixes streaming tooltip. Checks if the stream id is not provided and …
2016-03-29 16:31:22 -05:00
yanas
76820bed8d Fixes recording state handling. 2016-03-29 16:30:08 -05:00
yanas
39c350cdba Fixes streaming tooltip. Checks if the stream id is not provided and requests the user before starting the recorder. 2016-03-29 16:07:01 -05:00
yanas
2ef9412a01 Merge pull request #565 from damencho/dock-toolbar-on-shared-video
Docks toolbar when shared video is shown.
2016-03-29 15:58:28 -05:00
damencho
a38b628d76 Docks toolbar when shared video is shown. 2016-03-29 14:36:20 -05:00
damencho
24896634f6 Merge pull request #564 from jitsi/recording-related-work-in-progress
Recording related UI modifications.
2016-03-29 13:52:24 -05:00
yanas
8b060e9cc0 Fixes mistakenly removed button. 2016-03-29 13:51:21 -05:00
yanas
6d51cb5f40 Fixes mistakenly removed button. 2016-03-29 13:49:05 -05:00
yanas
51037c2dca Fixes status change from pending to unavailable. 2016-03-29 13:46:10 -05:00
yanas
7df5e92bc9 Adds new recording module. 2016-03-29 13:10:31 -05:00
yanas
68994fbe74 Recording related UI modifications. 2016-03-29 12:13:54 -05:00
hristoterezov
4a1175d44f Fixes comments after review 2016-03-28 17:42:20 -05:00
hristoterezov
bf9c4ea444 Implements server side connection establishment 2016-03-28 16:19:32 -05:00
yanas
0bde7de37b Merge pull request #560 from damencho/seek-on-start-paused
Seeks in video when we start in paused state.
2016-03-28 13:56:09 -05:00
damencho
9632bd531c Does not accumulate multiple pause events in commands. 2016-03-28 13:38:48 -05:00
yanas
740c920cbb Merge pull request #557 from damencho/enables-sharedvideo-for-all-participants
Enables shared video for all participants, the first to share is the …
2016-03-28 13:13:46 -05:00
damencho
885210452c Updates button states on non moderator participants before showing the toolbar. 2016-03-28 11:46:45 -05:00
damencho
7c02803ef9 Seeks in video when we start in paused state. 2016-03-27 15:32:45 -05:00
damencho
7d0cd00a50 Enables shared video for all participants, the first to share is the video all will see, later attempts will result just a dialog informing that video is already shared. 2016-03-25 19:38:56 -05:00
damencho
055f96bb03 Merge pull request #556 from jitsi/fix-follow-me-exception
Fixes exception on follow me command.
2016-03-25 17:22:05 -05:00
yanas
76548f1cd0 Fixes exception on follow me command. 2016-03-25 17:15:50 -05:00
yanas
1897de75b1 Merge pull request #555 from damencho/fix-shared-video-undefined
Uses player functions only after the player has reported playing event.
2016-03-25 15:58:20 -05:00
damencho
508fd4a8df Uses player functions only after the player has reported playing event. 2016-03-25 15:36:41 -05:00
bgrozev
30cf17d99d Merge pull request #554 from jitsi/fix-background-css
Reverts back to black background. We need to fix some other things be…
2016-03-25 14:50:31 -05:00
yanas
568a5ba816 Reverts back to black background. We need to fix some other things before moving to grey background. 2016-03-25 14:48:31 -05:00
yanas
9b09e61877 Merge pull request #553 from damencho/fix-replacing-pinned
Fixes and issue where: if we receive dominant speaker event just befo…
2016-03-24 17:43:18 -05:00
yanas
1e7cd06555 Merge pull request #552 from damencho/shared-video-fixes
Shared video fixes
2016-03-24 17:42:13 -05:00
damencho
d48ef06ddb Fixes and issue where: if we receive dominant speaker event just before the video start playing, this can override already pinned video. 2016-03-24 17:10:29 -05:00
damencho
af9f651702 Check whether commands are coming from moderator. 2016-03-24 16:20:27 -05:00
damencho
9abc78ef24 Do not send SELECTED_ENDPOINT events for custom containers. 2016-03-24 16:20:27 -05:00
damencho
5112041e15 Merge pull request #551 from jitsi/fix-shared-video-ui-glitches
Fixes shared video thumbnail size and shared video on large background.
2016-03-24 14:51:42 -05:00
yanas
6edbcb9311 Fixes shared video thumbnail size and shared video on large background. 2016-03-24 14:49:26 -05:00
yanas
4ffafbe9a8 Merge pull request #545 from damencho/fix-video-switching-on-hide-container
Fix video switching on hide container
2016-03-24 13:27:41 -05:00
yanas
d0ad928d39 Merge pull request #549 from damencho/fixes-early-pause-shared-video
Fixes early initial pause event, may lead to player keep buffering wi…
2016-03-24 13:27:22 -05:00
yanas
c4f4dcdb4f Merge pull request #546 from damencho/shared-video-display-name
Removes hoverIn/Out detection for shared video that shows/hides displ…
2016-03-24 13:25:51 -05:00
damencho
27607e8754 Update variable name to pinnedId. 2016-03-24 13:16:42 -05:00
damencho
94d98ec0ab Fixes returning to dominant speaker after closing shared video. Renames a method and fix its behaviour was handling both case when removing just video element in small videos (local or remote) and when we are removingParticipantContainer, now just handles the second one and uses focusedID if any or dominantSpeakerID if any, otherwise elects new video. 2016-03-24 13:11:03 -05:00
damencho
e330dbf5d1 Fixes switching to pinned video when hiding a container. 2016-03-24 13:06:52 -05:00
damencho
f788a45bac Merge pull request #548 from jitsi/follow-me
Follow me
2016-03-24 13:02:42 -05:00
bgrozev
3f62b479da Merge pull request #550 from jitsi/polish-ui
Polish ui
2016-03-24 12:26:13 -05:00
yanas
d49dff4ae1 Fixes a config parameter name. Removes a console.log, which got there by mistake. Fixes some css properties of the chat unread messages. 2016-03-24 12:17:58 -05:00
yanas
1526d4e239 Toolbar style changes. 2016-03-24 10:03:48 -05:00
yanas
0a2a6e5677 Changing random avatars to robohash. 2016-03-24 10:03:48 -05:00
yanas
72454ff279 HD label added when the large video is in HD. 2016-03-24 10:03:48 -05:00
yanas
64d8cb2db2 Turning video thumbnails into squares. Changes the size of the dominant speaker avatar and fixes some minor thing around those two. 2016-03-24 10:01:08 -05:00
yanas
5c0088d2ef Main UI polishing. Removes rounded corners, fixes gaps. Adding custom avatars. 2016-03-24 09:59:03 -05:00
damencho
9efebc3702 Fixes early initial pause event, may lead to player keep buffering without starting. 2016-03-23 22:42:17 -05:00
yanas
cc761700fe Extends the follow-me feature by adding the possibility to follow the pinned participant, the shared video and the shared document. Adds the possibility to enable disable follow-me from the settings panel. Some other small fixes throughout the UI. 2016-03-23 20:43:29 -05:00
damencho
8df6a29741 Removes hoverIn/Out detection for shared video that shows/hides displayname, as we always display the name of the video when there is no thumb shown. And we do not want the name over the thumb. 2016-03-22 17:15:35 -05:00
yanas
b1469186d1 Merge branch 'master' of https://github.com/jitsi/jitsi-meet into follow-me 2016-03-22 15:24:02 -05:00
yanas
32c2d912be Merge pull request #543 from damencho/shared-video
Shared video, synchronized play/pause/seek/muting/volume, initial commit.
2016-03-22 15:15:36 -05:00
damencho
586b8401ae Renames event name. 2016-03-22 15:04:52 -05:00
damencho
f0fd7d7435 Renames method. 2016-03-22 14:59:03 -05:00
damencho
9a39898eea Renames event name. 2016-03-22 14:57:36 -05:00
damencho
fe7d05a951 Reverse the check to use only VIDEO_CONTAINER_TYPE. 2016-03-22 14:56:50 -05:00
damencho
1bdeda4ec3 Fixes updateLarge video to change to different container types which do not have stream. 2016-03-22 14:49:37 -05:00
damencho
2c1a9d20fd Fixes setting local video, default videoType. Fixes showing local video when there is no video device shown. 2016-03-22 13:27:11 -05:00
damencho
d82d4cbed9 Creates first the container before setting avatar, cause the avatar set will check the large video container type and type may be missing. Fixes error 'container of type undefined doesn't exist':
>    at LargeVideoManager.getContainer
>    at LargeVideoManager.get
>    at Object.isCurrentlyOnLarge
>    at Object.changeUserAvatar
>    at Object.UI.setUserAvatar
>    at Object.UI.addUser
2016-03-18 17:44:32 -05:00
damencho
9e7275acfb Updates large video when user left and we are removing the shared video. 2016-03-18 17:21:41 -05:00
damencho
ba01733c4f Adds confirmation dialog when closing shared video. 2016-03-18 17:04:13 -05:00
damencho
a1ac18a632 Fixes pausing. 2016-03-18 16:47:47 -05:00
damencho
38275ce045 Shared video, synchronized playing/seek/muting/volume initial commit. 2016-03-18 15:00:55 -05:00
damencho
83f07a7e67 Merge pull request #542 from champtar/unsupported_browser
Add unsupported_browser.css to source-package
2016-03-18 09:58:32 -05:00
Etienne CHAMPETIER
a61ce8ee3b Add unsupported_browser.css to source-package
Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-03-18 15:23:15 +01:00
yanas
eec8129026 Merge pull request #540 from damencho/fix-etherpad
Fix etherpad
2016-03-17 22:37:00 -05:00
damencho
2b26580a7c Disables switching to dominant speaker when Etherpad is shown on large video. 2016-03-17 22:19:09 -05:00
damencho
eefdbd4fe5 Renames EtherpadContainerType to ETHERPAD_CONTAINER_TYPE. 2016-03-17 21:58:40 -05:00
Paweł Domas
7b55d8b526 Merge pull request #537 from jitsi/max_users_error
Implements dialog for max users error
2016-03-17 14:52:48 -05:00
yanas
20af89abfa Merge pull request #539 from damencho/ui-container-management-and-fixes
Ui container management and fixes
2016-03-17 14:13:18 -05:00
damencho
5963f85ad6 Fixes avatar that is shown, when we switch from container with muted video to container from other type, like etherpad. 2016-03-17 13:29:07 -05:00
hristoterezov
438cae101f Fixes error with max users limit after review 2016-03-17 13:23:03 -05:00
yanas
6a7919a904 Merge pull request #532 from damencho/resize-ds-onfilm-toggle
Resizes large video on filmstrip toggle.
2016-03-16 14:46:32 -05:00
damencho
3577f338cc Does not do force-update when resizing. 2016-03-16 14:35:30 -05:00
damencho
9e0b1beed5 Always uses current video type to search for container that will handle it. Renames video container type to camera, to match the type ot the tracks. Add the same container to be used and for tracks with type of desktop. 2016-03-16 13:28:35 -05:00
damencho
ca56734d9c Moves VideoLayout reference in SmallVideo as it is used there in updateView. 2016-03-16 13:28:28 -05:00
damencho
6955bb71f3 Adds methods to abstraction LargeContainer which are used by LargeVideo when updating video. 2016-03-16 13:28:20 -05:00
damencho
5837ef506c Removes remoteVideoTypes and uses the set/get in the small video instances. 2016-03-16 13:28:09 -05:00
damencho
3fc839cb37 Adds optional parameter to addParticipantContainer, make possible to create the SmallVideo outside VideoLayout and pass it to be displayed. 2016-03-16 13:28:00 -05:00
yanas
15865c3d42 Merge pull request #531 from damencho/remove-prezi
Merges damencho's PR for removing prezi. We still need to remove all prezi related strings from translations through translate.jitsi.org.
2016-03-16 13:18:08 -05:00
Emil Ivov
897e7a1925 Update main.json 2016-03-15 16:16:50 -05:00
hristoterezov
02ff54b659 Implements dialog for max users error 2016-03-15 14:08:01 -05:00
damencho
95f36cfd9a Merge pull request #530 from isymchych/nwjs
Example NW.js app.
2016-03-14 15:19:33 -05:00
damencho
97733cd17a Resizes large video on filmstrip toggle. 2016-03-11 12:57:49 -06:00
damencho
4ff6d276ce Removes prezi. 2016-03-11 12:00:10 -06:00
isymchych
72a761e80a integrate with nwjs 2016-03-11 15:18:37 +02:00
Lyubomir Marinov
605a892f78 Implements an initial (demo) version of "Follow Me" for film strip visibility. 2016-03-11 04:55:29 -06:00
Lyubomir Marinov
c35590dbda Allows UI.toggleFilmStrip() and UIEvents.TOGGLE_FILM_STRIP to act as setters in addition to toggles. 2016-03-11 04:54:06 -06:00
Lyubomir Marinov
972fc402e4 Exposes a Command(s) API from conference.js. 2016-03-11 04:49:13 -06:00
yanas
ed85658ce5 Merge pull request #520 from isymchych/improve-settings
Apply new settings without clickint "Update" button
2016-03-10 13:08:23 -06:00
yanas
3759676770 Merge pull request #525 from damencho/sync-mute
Syncs mute/unmute calls.
2016-03-09 16:17:00 -06:00
damencho
1c3aafd5c4 Uses the Promise returned on mute/unmute, just prints when calls were canceled due to operation in progress. 2016-03-08 17:33:09 -06:00
yanas
729ca2fbe6 Merge pull request #524 from damencho/ds-error-handle
Improves desktop sharing error handling.
2016-03-07 13:41:17 -06:00
damencho
45d997e9f1 Adds a comment to default error handling for desktop sharing. 2016-03-07 12:57:12 -06:00
damencho
6b5a52926a Merge pull request #522 from jitsi/fix_lib_rename
Fixes the compatability with lib-jitsi-meet for TRACK_REMOVED events for remote track to use peerconnection event instead of relying on TRACK_STOPPED event.
2016-03-07 11:22:22 -06:00
damencho
3a933cfb84 Avoids showing two warning dialogs when firefox extension is required and missing. 2016-03-04 15:55:44 -06:00
damencho
d78666a49d Removes listener to missing event and duplicate dialog code. 2016-03-04 15:36:53 -06:00
damencho
413e5098c8 Handles the error when user cancels desktop sharing window. 2016-03-04 15:21:07 -06:00
damencho
0470106524 Shows and error dialog when we fail to install desktop sharing plugin for some reason. 2016-03-04 15:20:05 -06:00
hristoterezov
30e1e3b23a Fixes jitsi meet to work with the renamed events and methods from the latest version of lib-jitsi-meet. 2016-03-03 14:53:36 +02:00
damencho
25a9928758 Merge pull request #521 from jitsi/fix-resizing
Fixes resizing problems introduced in last resizing commit and some previous problems with side panel open/close.
2016-03-02 14:59:23 -06:00
yanas
67a73b163e Removes empty space from the available width calculation. 2016-03-02 14:46:57 -06:00
yanas
ad44cc518a Fixes resizing problems introduced with previous resizing commit. Fixes side panel open/close code and resizing. 2016-03-02 13:50:55 -06:00
isymchych
be0abf908e auto-save setiings 2016-03-02 17:39:39 +02:00
yanas
c201de86cc Merge pull request #519 from isymchych/lastn
Use overriden config.channelLastN property in VideoLayout
2016-02-29 13:49:28 -06:00
yanas
48b225f382 Merge pull request #516 from isymchych/fix-auth
Code cleanup
2016-02-29 13:35:53 -06:00
yanas
1339b306e6 Merge pull request #517 from jitsi/fix-resizing
An additional fix should be added, which allow for more smooth resizing (we still see thumbnails going on a second row and then coming back up again), but this will be added in a separate commit.
2016-02-29 13:20:19 -06:00
isymchych
cd71b0a603 use latest version of the config.channelLastN 2016-02-26 15:22:04 +02:00
isymchych
f242c8cfdc handle missing remoteVideo when removing video element 2016-02-26 15:20:36 +02:00
Paweł Domas
259fae331f Merge pull request #518 from isymchych/really-fix-auth
Fix login/logout
2016-02-25 11:06:21 -06:00
isymchych
3cf478826e implement user logout 2016-02-25 15:52:15 +02:00
isymchych
b73bddf1c4 handle AUTH_STATUS_CHANGED event 2016-02-25 14:32:52 +02:00
isymchych
e478a73988 fix on-the-fly auth 2016-02-25 14:32:34 +02:00
isymchych
c294f592c8 code cleanup: remove redundant span.nick elements 2016-02-25 12:40:24 +02:00
isymchych
5ec28ff3c1 code cleanup: remove unused settings 2016-02-25 12:40:24 +02:00
yanas
30f3da98e5 Fixes thumbnail resize and thumbnails going on a second row. Refactors code around the film strip and resize in general. 2016-02-24 15:05:24 -06:00
yanas
194b991fb1 Merge pull request #515 from damencho/handle-track-removed
Handles track removed and removes video elements. Tested by starting/stopping desktop sharing several times and we only have one video and one audio element after the PR is applied.
2016-02-24 11:09:07 -06:00
damencho
3c61bac3c8 Handles track removed and removes video elements. When switching on and off desktop sharing video elements number grow under remote video span. 2016-02-23 16:47:55 -06:00
Paweł Domas
1a656c2c89 Merge pull request #494 from isymchych/escape-nicknames
Escape nicknames before displaying them
2016-02-23 10:50:03 -06:00
isymchych
ebf57923ae hide chat if local display name is empty 2016-02-23 17:20:33 +02:00
isymchych
0bcbd105e3 escape nicknames before displaying them 2016-02-23 17:20:33 +02:00
Paweł Domas
47f2320e94 Merge pull request #511 from isymchych/improve-focus-left
leave the room if focus left
2016-02-22 12:55:10 -06:00
isymchych
c027050e11 leave the room if focus left 2016-02-22 16:57:36 +02:00
Paweł Domas
93d5497c76 Merge pull request #508 from isymchych/fix-unmute
LargeVideo: detach previous stream when attaching new one
2016-02-19 10:11:25 -06:00
isymchych
6476503240 LargeVideo: detach previous stream when attaching new one 2016-02-18 15:38:57 +02:00
Paweł Domas
8b2244b47a Merge pull request #503 from isymchych/fix-logo-blink
Fix watermark logo blinking during video switching
2016-02-17 09:27:41 -06:00
isymchych
255f374894 fix watermark logo blinking during video switching 2016-02-17 14:37:06 +02:00
Paweł Domas
61b28fccf2 Merge pull request #499 from isymchych/fix-auth-dialog
fix authentication dialog
2016-02-16 10:48:37 -06:00
Paweł Domas
8d65fcc4c2 Merge pull request #498 from isymchych/reorder-streams-operations
Remove old track from the conference before adding new one
2016-02-16 10:32:38 -06:00
isymchych
5a1d200098 fix authentication dialog 2016-02-16 17:42:28 +02:00
isymchych
9581afb612 remove old track from the conference before adding new one 2016-02-16 15:34:32 +02:00
Paweł Domas
de8f75ddee Merge pull request #493 from isymchych/fix-screensharing-mute-on-safari
Fix screensharing mute on safari
2016-02-12 11:43:08 -06:00
isymchych
24ffc816f4 LargeVideo: show watermark even if video is muted 2016-02-12 16:47:42 +02:00
isymchych
401e5e7ae0 fix jshint issues 2016-02-12 16:28:43 +02:00
isymchych
fdfa9de150 hide large video if stream is muted 2016-02-12 16:28:43 +02:00
Paweł Domas
61f4bb63ab Merge pull request #492 from isymchych/device-selection
Allow user to select camera and microphone
2016-02-10 15:51:36 -06:00
isymchych
f65d630ad8 allow user to select camera and microphone 2016-02-10 15:37:50 +02:00
damencho
b4b9160fcb Adds room name to the bosh connection. 2016-02-09 17:44:41 -06:00
damencho
bd16b9e346 Prints audio levels in debug mode. 2016-02-09 16:49:58 -06:00
Paweł Domas
e688a5cb9f Merge pull request #487 from isymchych/video-mute-screensharing
Handle video mute/unmute during screensharing
2016-02-09 11:31:42 -06:00
damencho
dbed8c2976 Fixes push to talk. 2016-02-09 10:29:50 -06:00
isymchych
79d5bf6cfa move screensharing into single function, properly handle mute/unmute 2016-02-09 12:52:54 +02:00
isymchych
44bae94701 code cleanup 2016-02-09 12:30:34 +02:00
damencho
e81d3c02ad Shows dominant speaker icon for the local user, when he is the dominant speaker. 2016-02-08 15:42:03 -06:00
Paweł Domas
ff4de4cb5b Merge pull request #489 from isymchych/handle-focus-left
handle FOCUS_LEFT conference error
2016-02-08 09:37:57 -06:00
yanas
e09a2f5bee Fixes all shortcuts. 2016-02-05 12:53:31 -06:00
yanas
e7e8dc3457 Fixes shifted audio level glow on thumbnails. Fixes missing audio level indicator on large video avatar. 2016-02-05 11:32:09 -06:00
isymchych
379f786225 handle FOCUS_LEFT conference error 2016-02-05 17:04:48 +02:00
damencho
4228537390 Fixes autoEnableDesktopSharing option. 2016-02-04 12:43:02 -06:00
damencho
9ebf4bfacb Adds method to access stats from torture. 2016-02-04 12:41:23 -06:00
paweldomas
7ec6e9ae29 Gets rid fo RTCBrowserType usages. 2016-02-02 15:52:02 -06:00
damencho
522ca64bce Adds some docs. 2016-02-02 14:54:15 -06:00
paweldomas
8a65407d0c Merge remote-tracking branch 'isymchych/move-statistics' 2016-02-02 13:55:00 -06:00
paweldomas
8144201636 Uses RTCUIHelper class from lib-jitsi-meet to select video elements. 2016-02-02 13:54:37 -06:00
paweldomas
a6ff9f8ee2 Removes unused code related to Firefox.
Commented part seems not to be required anymore as everything work well without it.
2016-02-02 13:54:37 -06:00
hristoterezov
67f1a040eb Removes link tag for the SS plugin because it is created dynamically by the library. 2016-02-02 11:40:29 -06:00
isymchych
d19789005e use statistics module from the library 2016-02-02 17:12:40 +02:00
paweldomas
103b5d71d0 Encapsulates direct access to .currentTime field into 'hasVideoStarted' method of RemoteVideo.
Removes duplicated logic for hiding video element when the user is muted.
2016-02-01 16:08:47 -06:00
paweldomas
ab13fa35b4 'currentTime' property of stream elements are now supported by Temasys plugin. 2016-02-01 16:08:36 -06:00
paweldomas
0bf98bf6cf Fixes broken call to waitForPlayback in lastN logic. 2016-02-01 15:37:35 -06:00
paweldomas
48cedb0865 Adopts to new semantics of JitsiTrack#attach method. 2016-02-01 15:01:45 -06:00
hristoterezov
11d43f32b2 Fixes JS error for function call that not exists when start desktop sharing. 2016-01-29 16:48:12 -06:00
hristoterezov
cea0916bfd Merge branch 'master' of github.com:jitsi/jitsi-meet 2016-01-29 16:07:04 -06:00
hristoterezov
ffbaaa2622 Moves videotype signaling to the library 2016-01-29 16:06:54 -06:00
Paweł Domas
04858e7f06 Merge pull request #481 from isymchych/fix-pinning
Do not pin participant if moderator clicked item in remote user menu
2016-01-29 13:44:46 -06:00
hristoterezov
1176390214 Fixes issues for audio only participants 2016-01-29 13:31:58 -06:00
damencho
4e66aefa26 Merge pull request #482 from isymchych/docs
Describe how to use local lib-jitsi-meet repository with npm link
2016-01-29 09:41:45 -07:00
isymchych
352195bcdd Describe how to use local library with npm link 2016-01-29 18:26:16 +02:00
yanas
fe2804f474 Fixes SmallVideo object not making a difference between an audio and a video stream, which was causing FireFox issues with large video set to the audio stream. 2016-01-28 18:33:27 -06:00
damencho
2c7ee3527a Updates readme for working with lib-jitsi-meet sources. Separates deploy make targets for deploying only the lib. 2016-01-28 17:43:48 -06:00
George Politis
70346e2307 Replaces obsolete config option and enables simulcast by default. 2016-01-28 22:07:39 +00:00
damencho
33cb79fb8a Fixes lib filename. 2016-01-28 15:28:56 -06:00
damencho
e3b518cb91 Uses lib-jitsi-meet from git repo and deploy it on make. 2016-01-28 15:06:09 -06:00
damencho
c0dde18e6b Merge branch 'jitsi-meet-new' 2016-01-28 14:10:50 -06:00
paweldomas
cd8af2a823 Logs an error which occurred when trying to obtain video stream to be used after screen sharing. 2016-01-28 11:28:07 -06:00
Paweł Domas
8221a59261 Merge pull request #477 from isymchych/fix-safari-audio
do not hide small video until stream has been attached
2016-01-28 11:10:02 -06:00
isymchych
93aac798f3 do not pin participant if moderator clicked item in remote user menu 2016-01-28 16:36:55 +02:00
isymchych
6998827982 do not hide small video until stream has been attached 2016-01-28 13:59:33 +02:00
yanas
6e7ed13370 Fixes missing local video thumbnail before entering a conference. 2016-01-26 17:18:10 -06:00
yanas
ae4f5c64d4 Merge branch 'jitsi-meet-new' of https://github.com/jitsi/jitmeet into jitsi-meet-new 2016-01-26 15:28:35 -06:00
yanas
5834fbe31a Re-implements last N related code to use the library. Fixes issues with resizeThumbnails. Fixes last N related event handling. 2016-01-26 15:27:07 -06:00
paweldomas
875a7b6f4f Uses property instead of jquery to hook "onplay" event of the large video. 2016-01-26 15:27:05 -06:00
paweldomas
4cf1f92e25 Fixes broken large video resize functionality. 2016-01-26 15:26:48 -06:00
paweldomas
2fb65dd752 Uses fadeTo instead of fadeIn/fadeOut which do not seem to work correctly on Safari. 2016-01-26 11:19:21 -06:00
Lyubomir Marinov
feb0abf701 Does not disconnect from the XMPP server on unload in jitsi-meet-new because the API has taken on that responsibility. 2016-01-26 11:11:50 -06:00
hristoterezov
2ccfc30813 Merge pull request #469 from isymchych/fix-fullscreen
fix issue with fullscreen in Safari in jitsi-meet-new
2016-01-26 11:01:41 -06:00
damencho
eab83e4fbc Merge pull request #471 from isymchych/minor-fixes
Minor fixes for jitsi-meet-new
2016-01-26 09:46:20 -06:00
isymchych
bc2afd7d64 Minor fixes for jitsi-meet-new
* use proper context for the function
* remove duplicate line
2016-01-26 13:50:33 +02:00
Lyubomir Marinov
a0becb918e Do synchronous Strophe disconnect in order to increase the chances of the delivery of the unavailable presence to the XMPP server. 2016-01-25 17:01:12 -06:00
hristoterezov
e0ba89e001 Merge branch 'isymchych-video-resize-issue' into jitsi-meet-new 2016-01-25 16:45:57 -06:00
hristoterezov
714e304e98 Merge branch 'video-resize-issue' of git://github.com/isymchych/jitsi-meet into isymchych-video-resize-issue 2016-01-25 16:45:36 -06:00
hristoterezov
5e3133547d Merge branch 'isymchych-replace-remaining-events' into jitsi-meet-new 2016-01-25 16:39:53 -06:00
hristoterezov
089a9880b0 Fixes issues related to PR #452 2016-01-25 16:39:05 -06:00
damencho
66212862ce Merge branch 'chat-subject-new' of https://github.com/isymchych/jitsi-meet into jitsi-meet-new 2016-01-25 16:13:53 -06:00
damencho
e707eb9a79 Merge branch 'video-fadein-fix' of https://github.com/isymchych/jitsi-meet into jitsi-meet-new 2016-01-25 15:35:40 -06:00
hristoterezov
d6620310f5 Merge pull request #464 from isymchych/jsdocs
added documentation (jsdocs) to jitsi-meet-new
2016-01-25 14:17:46 -06:00
hristoterezov
d09021457b Fixes JS error in API module 2016-01-25 14:08:50 -06:00
damencho
5bd0074eff Adds FF fake device settings when creating local tracks. 2016-01-25 13:44:48 -06:00
hristoterezov
c2cfd4d6e2 Merge pull request #456 from isymchych/rewrite-API-module
do not use xmpp module in API module
2016-01-25 12:55:30 -06:00
Lyubomir Marinov
6dbbea9944 Decides whether to use analytics after the analytics API has been given a chance to load. 2016-01-25 11:58:15 -06:00
Lyubomir Marinov
41872781f9 Fixes a lint error about a constructor name not starting with an uppercase letter. 2016-01-25 11:40:31 -06:00
isymchych
6cda300861 synchronize Large video fadeIn/fadeOut animations 2016-01-25 19:08:07 +02:00
isymchych
6df1fcef40 Avatar.js code cleanup 2016-01-25 19:08:07 +02:00
isymchych
6b98fd52ea added some documentation (jsdocs) 2016-01-25 19:07:05 +02:00
isymchych
d31aca4483 use lib to change chat subject 2016-01-25 19:00:18 +02:00
hristoterezov
a0355ea080 Updates the lib 2016-01-22 17:30:40 -06:00
damencho
8b8cbb2ccc Handles fake video track and fixes remote audio. 2016-01-22 16:37:33 -06:00
hristoterezov
dbd24417c4 Fixes DS icon glow 2016-01-22 15:10:59 -06:00
hristoterezov
724ebdfe04 Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-22 11:41:02 -06:00
hristoterezov
6ad9243446 Updates the library. Removes oncontextmenu handlers. 2016-01-22 11:37:48 -06:00
damencho
03a9c8aa1c Updates library to fix start muted. 2016-01-22 11:35:27 -06:00
paweldomas
ea6eaad563 Fixes bridge is down UI notification. 2016-01-22 11:33:17 -06:00
hristoterezov
c5f94fadd8 Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-22 11:30:29 -06:00
isymchych
93aef0683b fix issue with fullscreen in Safari 2016-01-22 19:18:59 +02:00
George Politis
ff97321ea4 Updates lib-jitsi-meet@ba21635b3d04bb7f2505b446f21d341992149107 2016-01-21 17:19:53 -06:00
hristoterezov
ce41ddd024 Merge branch 'jitsi-meet-new-callstats' into jitsi-meet-new 2016-01-21 13:29:53 -06:00
hristoterezov
b174f231bf Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-21 13:28:54 -06:00
hristoterezov
4ec62e40f1 Fixes jshint 2016-01-21 13:28:43 -06:00
damencho
2ef96d21e9 Updates package.json with some changes from master. 2016-01-21 13:27:55 -06:00
yanas
3fe0487df7 Fixes local video flickering when locally muted. Rearranges some of the large video avatar related code. 2016-01-21 11:39:05 -06:00
damencho
bc43108877 Makes sure we unmark remote videos as dominant speaker if any when the local participant becomes dominant speaker. 2016-01-21 11:28:47 -06:00
damencho
0291287ecb Temporary fix to make sure 2.2.0 isn't pulled which has a bug. 2016-01-21 11:08:08 -06:00
damencho
0db262da6a Fixes showing local resolution in UI. 2016-01-21 10:45:19 -06:00
damencho
c54e6c0f3c Fixes showing remote resolutions in UI. 2016-01-20 22:54:05 -06:00
hristoterezov
8787723330 Fixes desktop streaming for FF 2016-01-20 18:17:22 -06:00
George Politis
e0e5de6ec0 Revert "Temporarily disable hard video mute."
This reverts commit f02bee06aa.
2016-01-20 17:38:07 -06:00
damencho
1dd0fe4bca Decrease the ping interval. 2016-01-20 17:02:10 -06:00
hristoterezov
0d03a4fceb callstats 2016-01-20 15:41:37 -06:00
isymchych
cff44286f5 resize #videospace on window resize 2016-01-20 16:26:39 +02:00
yanas
27d509332a Merges Boris Grozev's commit from Dec 8, 2015, named: Uses a single avatar URL, allows to override gravatar with a custom URL. Commit: a2c41392 2016-01-19 17:11:16 -06:00
damencho
2af941d607 Fixes forcing tcp connections. 2016-01-19 16:58:04 -06:00
yanas
dacd54b73c Fixes clicking remote participant in the contact list. 2016-01-19 16:51:48 -06:00
yanas
2bee98744d Merges commit from Boris Grozev on jitsi-meet: Fixes a typo. 2016-01-19 16:51:47 -06:00
damencho
41b1a6f3c3 Merge branch 'logs' of https://github.com/isymchych/jitsi-meet into jitsi-meet-new 2016-01-19 14:53:10 -06:00
damencho
482f71f5ea Adds helpers to access audio levels from torture. 2016-01-19 13:32:29 -06:00
damencho
09d08b034c Removes unused code. 2016-01-19 13:31:37 -06:00
paweldomas
2dba1d9d17 Requires prosody-trunk at least 607 for jitsi-meet-tokens 2016-01-19 12:59:22 -06:00
paweldomas
428fa3f16a New JWT token impl that does not require token verification in Jicofo and uses anonymous authentication method(token goes as BOSH query param). Adds 'allow_empty_token" config option. 2016-01-19 12:59:06 -06:00
paweldomas
ac8e1ce388 Configures Jicofo when jitsi-meet-tokens package is installed 2016-01-19 12:58:59 -06:00
paweldomas
d666fbb6a4 Uses JWT for token generation in prosody plugin. 2016-01-19 12:58:51 -06:00
paweldomas
1565f0a598 Removes Prosody patch(the code is in trunk) 2016-01-19 12:55:10 -06:00
George Politis
f02bee06aa Temporarily disable hard video mute. 2016-01-15 18:50:03 -06:00
George Politis
954345da48 Removes space in cname generation of recvonly streams. 2016-01-15 14:39:53 -06:00
damencho
029ccf3b31 Adds method used by torture to obtain current audio levels. 2016-01-15 14:12:15 -06:00
damencho
7e35794e47 Passes all configs to the connection. 2016-01-15 13:50:16 -06:00
Lyubomir Marinov
ec954ad3cc Decides whether to use analytics after the analytics API has been given a chance to load. 2016-01-15 16:09:29 +02:00
Lyubomir Marinov
b49a08c485 Decides whether to use analytics after the analytics API has been given a chance to load. 2016-01-15 15:42:04 +02:00
damencho
aed2d97c10 Fixes displayname on remote video on FF. Seems innerText is not working on FF, replace it with innerHTML. 2016-01-14 16:34:22 -06:00
damencho
dcb607a586 Shows displayname after editing it. 2016-01-14 16:21:03 -06:00
damencho
3cd549a758 Hides video wrapper when avtar is shown, and make it visible when we hide the avtar. 2016-01-14 14:11:01 -06:00
damencho
765f07109a Adds utility to check for remote participants with tracks. 2016-01-14 13:50:10 -06:00
paweldomas
ea24c6a66a Fixes broken requireDisplayName feature.
It was asking for new display name even if we have had one configured already.
2016-01-14 13:39:32 -06:00
damencho
cd4ebca730 Fixes showing display name and hiding avtar, when video is muted and avtar is on large. 2016-01-14 13:30:56 -06:00
damencho
a6a6d2992e Adds helper function to obtain large video id from tests. 2016-01-14 13:30:27 -06:00
damencho
b875dc62dc Fixing remote avatars to be the same as local one. 2016-01-14 13:04:21 -06:00
damencho
809f68104d Fixes undefined error. 2016-01-14 11:15:38 -06:00
damencho
0531daf541 Updates the way we update large/small video, avatars and displayname. Fixes issue with not displying avatars in local or remote video when video muted. Fixes if pinned participant turns off video and when unpin we return to the correct dominant speaker. 2016-01-14 10:28:24 -06:00
isymchych
24b24a62c4 fixed "download logs" button 2016-01-14 17:35:37 +02:00
isymchych
666dfb9b63 do not use xmpp module in API module 2016-01-14 17:05:54 +02:00
Lyubomir Marinov
4a6e8e5e6e Manually formats config.js to bring in a bit of consistency and make uncommenting properties a tad easier and less error prone. 2016-01-14 10:06:47 +02:00
Lyubomir Marinov
ca3dd8865f Asynchronously downloads the callstats.io API because the third-party server may take 'forever' to respond. 2016-01-14 09:39:57 +02:00
Lyubomir Marinov
9b28e64e5d Prevents breakages of our functionality caused by side-effect callstats.io API failures. 2016-01-14 09:28:14 +02:00
Lyubomir Marinov
2b570a2251 Prefers public getters over duplication of logic and/or access to private fields at multiple locations. 2016-01-14 09:27:46 +02:00
Lyubomir Marinov
d7c9a97e8d Adds a FIXME (comment) to make a note of the fact that loading analytics.js after modules/statistics/AnalyticsAdapter.js forces the method AnalyticsAdapter.sendEvent to a no-op. 2016-01-14 09:27:46 +02:00
damencho
cb40ab5420 Fixes moderator icon on remote videos. 2016-01-13 15:17:33 -06:00
hristoterezov
f8c12304dc Fixes start muted. Adds the local track before the conference is joined. 2016-01-12 21:38:58 -06:00
hristoterezov
78c4c11736 Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-12 21:13:03 -06:00
damencho
6a91a48823 Fixes element id name. 2016-01-12 17:29:52 -06:00
damencho
c64d008d05 Fixes element id name. 2016-01-12 16:48:47 -06:00
hristoterezov
5cda355142 Merge branch 'isymchych-jitsi-meet-new' into jitsi-meet-new 2016-01-12 15:51:00 -06:00
damencho
9fa4b02673 Reports pinned participants back to the library. 2016-01-12 15:11:24 -06:00
isymchych
0262917aa6 implementation of "start muted" 2016-01-12 15:51:43 +02:00
damencho
3fd68fa0fd Renames all active speaker references to be called dominant speaker. 2016-01-11 18:14:01 -06:00
damencho
f2c5e7da41 Removes unused code. 2016-01-11 17:34:02 -06:00
damencho
8249aea796 Call mucJoined of video layout when the actual joining occurs, as the local id is needed when the presence for the email is received/processed and avatar is set. 2016-01-11 17:14:56 -06:00
George Politis
dc07fd733f Removes the local SSRC replacement hack and fixes video muting/unmuting when simulcast is enabled. 2016-01-11 15:51:55 -06:00
George Politis
8ec90ea675 Bumps the sdp-simulcast version. 2016-01-11 15:05:56 -06:00
yanas
d6a1192a0f Fixes issue with avatar not being centered. 2016-01-11 14:58:07 -06:00
yanas
bbb144f1bd Fixes issue with conference starting before the UI is ready + enableWelcomePage config support. 2016-01-11 14:26:04 -06:00
hristoterezov
632b56b069 Fixes audio mute issue 2016-01-06 17:25:53 -06:00
hristoterezov
00e606663d Updates lib-jitsi-meet.js 2016-01-06 17:02:08 -06:00
hristoterezov
29a85b797a Fixes audio / video mutes 2016-01-06 16:39:13 -06:00
damencho
8aad75d9fa Sets local avatar after local video id is set on joined (VideoLayout.mucJoined()). 2016-01-05 17:23:24 -06:00
damencho
01a9d47959 Fixes setting custom avatar based on the email and reverts the functionality to set custom avatar links to replace the default gravatars. 2016-01-05 17:22:29 -06:00
damencho
1702105b06 Adds utility methods used by torture. 2016-01-05 16:20:02 -06:00
hristoterezov
a56d462dae Fixes the format of the data in connection quality module 2016-01-04 17:16:58 -06:00
hristoterezov
54f2364f18 Updates the library 2016-01-04 16:23:18 -06:00
hristoterezov
95b23f994c Fixes issues with unloading the page 2016-01-04 14:55:43 -06:00
hristoterezov
3168c86f77 Fixes mute participant functionality 2015-12-31 16:02:03 -06:00
hristoterezov
c8c6a6d583 Implements recording 2015-12-31 14:38:43 -06:00
hristoterezov
ce43ce4cd8 Remove unused files 2015-12-30 16:36:46 -06:00
hristoterezov
97697ed9f0 Fixes JS errors in UI.js 2015-12-30 14:57:28 -06:00
hristoterezov
9b7ddec703 Merge pull request #441 from isymchych/jitsi-meet-new
refactoring of Etherpad and Prezi
2015-12-30 13:52:30 -06:00
isymchych
335cc6ca6f cleanup desktopsharing events 2015-12-30 15:28:56 +02:00
isymchych
c36001f861 removed xmpp and RTC modules 2015-12-30 14:34:10 +02:00
isymchych
6ee6b6e9e5 fixes after rebase 2015-12-30 14:14:56 +02:00
isymchych
b375b14696 abstract out remoteVideos management 2015-12-30 13:12:01 +02:00
isymchych
3400925f99 on-the-fly auth improvements 2015-12-30 13:12:01 +02:00
isymchych
a10f9437f1 Integration of statistics module 2015-12-30 13:12:01 +02:00
isymchych
0fd0f5b633 refactoring of Etherpad and Prezi 2015-12-30 13:12:01 +02:00
hristoterezov
e494c3028d Adds SIP calls support 2015-12-29 17:52:24 -06:00
hristoterezov
3ec04d5a95 Implements desktop sharing. 2015-12-29 16:30:50 -06:00
paweldomas
ca8a147ea6 JWT token is now passed as BOSH URL parameter. 2015-12-23 14:58:15 +01:00
hristoterezov
6e007a03af Merge pull request #433 from isymchych/jitsi-meet-new
Integration of UI module with lib-jitsi-meet
2015-12-22 16:56:47 -06:00
paweldomas
9d60af1a9d New JWT token impl that does not require token verification in Jicofo and uses anonymous authentication method(token goes as BOSH query param). Adds 'allow_empty_token" config option. 2015-12-22 19:51:43 +01:00
isymchych
ebaa657678 finished "on the fly" auth 2015-12-21 15:02:07 +02:00
isymchych
035e20eceb allow to kick users 2015-12-21 14:30:54 +02:00
isymchych
f56eb3440a properly update toolbar if auth enabled 2015-12-21 13:27:36 +02:00
isymchych
3a00837107 better error handling while establishing connection 2015-12-18 19:54:15 +02:00
isymchych
0ec8ab69a0 properly update nickname 2015-12-18 17:26:31 +02:00
damencho
baf31aa9f3 Adds logging for results of mungeLocalVideoSSRC. 2015-12-17 16:22:07 -06:00
isymchych
58d1c76ab0 handle external auth; xmpp auth tbd 2015-12-17 18:05:03 +02:00
isymchych
28e5bf4bec add "authentication required" dialog 2015-12-17 17:31:56 +02:00
isymchych
ec2be349df refactor authentication module 2015-12-17 17:31:56 +02:00
isymchych
fbe5ef7ee6 fix issue with nickname input in chat 2015-12-17 17:31:56 +02:00
isymchych
e666ed70f7 use proper message timestamp 2015-12-17 17:31:56 +02:00
isymchych
4f91ac01fd refactoring 2015-12-17 17:31:56 +02:00
isymchych
2af591f6d9 updated library 2015-12-17 17:31:56 +02:00
isymchych
36874c395a remove user from VideoLayout 2015-12-17 17:31:56 +02:00
isymchych
6ded050b51 do not use RTC/xmpp in UI module 2015-12-17 17:31:56 +02:00
isymchych
cb522eadd8 code cleanup 2015-12-17 17:31:56 +02:00
isymchych
de9d991f98 do not use xmpp module in side_panels module 2015-12-17 17:31:56 +02:00
isymchych
437a8a6ef0 refactor ToolbarToggler 2015-12-17 17:31:56 +02:00
isymchych
e23dd62d86 refactor BottomToolbar 2015-12-17 17:31:56 +02:00
isymchych
cf578b7732 do not use xmpp module in Toolbar 2015-12-17 17:31:56 +02:00
isymchych
7cc682d5a4 move random stuff out of Toolbar 2015-12-17 17:31:56 +02:00
isymchych
eeb390cd9d handle DTMF_SUPPORT_CHANGED event 2015-12-17 17:31:56 +02:00
isymchych
fc207ccf34 extract room locking out of Toolbar 2015-12-17 17:31:56 +02:00
isymchych
5846a25fc3 remove Prezi and Etherpad dependencies from Toolbar 2015-12-17 17:31:56 +02:00
isymchych
fbcd2d2320 use JitsiParticipant to handle user roles 2015-12-17 17:31:56 +02:00
isymchych
0460e7da29 add local media streams to UI 2015-12-17 17:31:56 +02:00
isymchych
6a3704d826 replace resourceIds with ids in AudioLevels 2015-12-17 17:31:56 +02:00
isymchych
586988f327 properly generate room name 2015-12-17 17:31:56 +02:00
isymchych
fc76aa5293 handle incoming messages 2015-12-17 17:31:56 +02:00
isymchych
ff6ec2ec6b use babel 2015-12-17 17:31:56 +02:00
isymchych
1690be3e5b add missing module dependency 2015-12-17 17:31:56 +02:00
damencho
034ed200f3 Displays correct resolution coming from FF. 2015-12-16 12:46:32 -06:00
damencho
589380c7b3 Displays correct resolution coming from FF. 2015-12-16 12:45:13 -06:00
damencho
97ebcebdbe Revert "Fixes a problem with receiving presence for start muted video before creating the stream element, which will end up that the muted video element will hide the avatar."
This reverts commit 303287f7a6.
2015-12-15 16:55:25 -06:00
paweldomas
9734da3083 Configures Jicofo when jitsi-meet-tokens package is installed 2015-12-15 11:46:58 -06:00
Boris Grozev
2b2a34175f Adds a missing require. 2015-12-14 13:43:05 -06:00
Boris Grozev
e06ec616a6 Changes enableThirdParty requests to disableThirdParty requests, in
order to not change existing behaviour (without changes to config.js).
2015-12-14 13:39:57 -06:00
Jesse Bickel
2b06ca9df7 Shrink the avatar on contact list to <=30px. 2015-12-14 13:39:47 -06:00
Jesse Bickel
fd9485b7e5 Use gravatar when enabled. 2015-12-14 13:34:13 -06:00
Jesse Bickel
46a5c909c8 Only load 3rd party JavaScript when config.enableThirdPartyRequests is true. 2015-12-14 13:26:27 -06:00
damencho
303287f7a6 Fixes a problem with receiving presence for start muted video before creating the stream element, which will end up that the muted video element will hide the avatar. 2015-12-11 14:18:16 -06:00
damencho
067de62a6d Fixes long line. 2015-12-11 14:18:05 -06:00
paweldomas
e0e0baf87e Makes sure that we keep local video SSRC as a "recvonly" when muted. 2015-12-09 23:30:53 -06:00
damencho
75a822be66 Removes second audio track for fake FF devices. 2015-12-08 19:00:21 -06:00
damencho
08107ca95b Fixes retrieving correct local ssrc in FF. Fixes tests that were checking for audio levels. 2015-12-08 19:00:21 -06:00
Boris Grozev
a2c41392dd Uses a single avatar URL, allows to override gravatar with a custom URL for avatars in interface_config.js. 2015-12-08 17:34:40 -06:00
Boris Grozev
a647400cb8 Merge branch 'third-party-requests' 2015-12-08 22:53:43 +00:00
Boris Grozev
f42684d789 Changes enableThirdParty requests to disableThirdParty requests, in
order to not change existing behaviour (without changes to config.js).
2015-12-08 22:52:12 +00:00
paweldomas
1e3ef532aa Adds 'enforcedBridge' property used to make Jicofo use specific bridge and ignore what BridgeSelector module says. 2015-12-08 15:30:46 -06:00
paweldomas
3406802aa8 Uses JWT for token generation in prosody plugin. 2015-12-08 15:30:46 -06:00
Jesse Bickel
c2c3d0fd87 Shrink the avatar on contact list to <=30px. 2015-12-07 15:52:11 -06:00
Jesse Bickel
895bb3fd60 Use gravatar when enabled. 2015-12-07 14:41:35 -06:00
Jesse Bickel
3f42f8bf67 Only load 3rd party JavaScript when config.enableThirdPartyRequests is true. 2015-12-04 13:03:10 -06:00
damencho
5f6bba435c Fixes Uncaught TypeError: mediaStream.detachEvent on stopping desktop sharing. 2015-12-04 11:30:11 -06:00
damencho
09a509400f Fixes showing prezi button. 2015-12-04 10:38:42 -06:00
hristoterezov
98f0de258b Merge pull request #421 from isymchych/use-API
Use JS API in jitsi-meet
2015-12-03 16:21:03 -06:00
isymchych
91fbf1e274 added editorconfig 2015-12-03 15:11:25 +02:00
isymchych
09aa9482c0 do not use members module 2015-12-03 15:11:01 +02:00
damencho
1c19f977ad Converts ssltcp candidate to tcp one on FF. 2015-12-02 17:15:55 -06:00
damencho
d7317a94bb Converts ssltcp candidate to tcp one on FF. 2015-12-02 16:35:45 -06:00
isymchych
272cfea493 share user email through commands 2015-12-02 17:24:57 +02:00
isymchych
941cd13193 do not use xmpp in connectionquality module 2015-12-02 15:05:29 +02:00
George Politis
3ca288d74d Adds comment. 2015-12-01 13:27:01 -06:00
George Politis
72c7812376 Revert "Sets up simulcast for 2 layers."
This reverts commit b2993d8cf3.
2015-12-01 13:26:24 -06:00
George Politis
d42415959f Adds comment. 2015-12-01 13:25:20 -06:00
George Politis
b678671607 Revert "Sets up simulcast for 2 layers."
This reverts commit b2993d8cf3.
2015-12-01 13:24:15 -06:00
isymchych
8226914348 load library from index.html 2015-12-01 18:55:54 +02:00
isymchych
8002dcbe66 update lib 2015-12-01 15:44:50 +02:00
isymchych
fe77846b89 do not use xmpp in settings menu 2015-12-01 15:41:58 +02:00
isymchych
c50151d85d do not use NicknameHandler 2015-12-01 14:53:01 +02:00
isymchych
4152106a06 listen to CONNECTION_INTERRUPTED and CONNECTION_RESTORED events 2015-12-01 12:05:55 +02:00
isymchych
c21c9ce1b8 do not use xmpp module in AudioLevels 2015-12-01 11:12:40 +02:00
isymchych
4ef57ceada do not use XMPP or RTC modules in UI 2015-11-30 17:24:42 +02:00
isymchych
59f98205c7 use JS API; UI module refactoring 2015-11-30 13:54:54 +02:00
paweldomas
0a7cea26b3 Exposes methods for obtaining stream SSRCs and audio levels. 2015-11-25 20:09:24 -06:00
paweldomas
286225e81e Removes unused code used to inject local SSRCs. 2015-11-25 20:09:12 -06:00
bgrozev
b2a3866fe4 Fixes a typo (reported by Emil Ivov) 2015-11-25 15:46:41 -06:00
damencho
c5b3677e71 Updates sdp-interop and sdp-transform versions, thanks to virtuacoplenny. 2015-11-24 13:10:29 -06:00
damencho
6b621654ab Adds speaker indicator and no longer use the display name for that purpose. 2015-11-23 17:30:24 -06:00
George Politis
c3f9226ec8 Updates the supported browser list and closes #372.
- Adds Safari and IE in the supported browser list.
- Adds version numbers for the supported browsers.
2015-11-23 15:56:35 -06:00
hristoterezov
d060db476f Merge branch 'isymchych-bug/large-video-on-safari' 2015-11-20 11:21:14 -06:00
hristoterezov
2e7e7d2dd8 Merge branch 'bug/large-video-on-safari' of git://github.com/isymchych/jitsi-meet 2015-11-20 11:06:40 -06:00
isymchych
1d59283518 fixed switching to large video from FF on safari 2015-11-20 14:05:37 +02:00
hristoterezov
de311b1372 Updates gitignore 2015-11-19 16:21:10 -06:00
isymchych
19d9c0be50 fixed switching to large video from FF on safari 2015-11-19 14:32:07 +02:00
yanas
236c4bb37c Adds a method in callstats in order to check if it's enabled. 2015-11-17 16:39:40 -06:00
isymchych
72c39a0162 accumulate erorrs unitl connected to callstats 2015-11-17 16:39:40 -06:00
damencho
94b54279f2 Fixes wrong handler name, which causes adding multiple local video tags in the local video. 2015-11-17 14:27:38 -06:00
George Politis
9f1e953e8a Bumps sdp-simulcast@0.1.2. 2015-11-17 18:16:19 +00:00
George Politis
5d571e696f Sets up simulcast for 2 layers. 2015-11-17 18:16:19 +00:00
George Politis
ce397d9e74 Fixes issue in ssrc-group SDP parsing.
How did this even work before?
2015-11-17 18:15:24 +00:00
damencho
b64f3a5913 Adds method to obtain remote video type. 2015-11-16 18:17:18 -06:00
yanas
7ea675159e Disables feedback functionality if callstats isn't available. 2015-11-16 18:06:47 -06:00
damencho
0ae702922c Makes the room parameter lower case. 2015-11-16 16:50:15 -06:00
damencho
f9d1fd13df Fixes an issue where lastN event, includes in the logic local resource and detects it as removed from lastN and schedules update of large video. If we receive this event for newly joined participant and we have pinned the local video, the event triggers update of large video which displays the wrong participant, not the pinned local video. 2015-11-16 13:33:29 -06:00
damencho
74c420a609 Adds config option for auto enable desktop sharing when opening an url. 2015-11-13 16:18:22 -06:00
yanas
26e2fd6ef0 Fixes desktop streaming layout. 2015-11-13 11:04:49 -06:00
damencho
4b62f7f0ac Adds shortcut to toggle desktop sharing. 2015-11-12 16:57:00 -06:00
damencho
fbb5f9b6c1 Merge pull request #361 from bickelj/master
Use member.isFocus to decide whether a given member is the focus user
2015-11-12 10:37:35 -06:00
damencho
e460f0c8fa Fixes lastN video change. Resulting 'Uncaught TypeError: stream.getOriginalStream is not a function', problem detected by torture (3 participants and the last one receives last-n changed event on joining and screenshot shows: it is missing one of the participants and logs contain this error). 2015-11-10 16:40:34 -06:00
damencho
dc2a60edbb Fixes long lines. 2015-11-10 16:40:25 -06:00
yanas
071fbfbd0d Merge pull request #399 from isymchych/callstats-error-reporting
Callstats error reporting. Ivan is going to publish another PR about earlier failures that would apply on top of this one.
2015-11-10 13:39:23 -06:00
Ingo Bauersachs
819f1414d6 Add Swedish to active languages 2015-11-10 09:38:59 +01:00
damencho
1bb5188ac8 Simplifies the check for installed nginx, fixes purge when nginx was not used. 2015-11-09 16:26:13 -06:00
damencho
b6cb424720 Fixes ff logo width. 2015-11-09 13:30:13 -06:00
damencho
6a30e9178c Updates firefox logo in unsupported page. 2015-11-09 13:12:05 -06:00
damencho
f005606428 Reverts messing with css files. 2015-11-09 12:36:01 -06:00
damencho
8f6fe2a5b3 Revert "Reorder css files in alphabet order."
This reverts commit 88fa2ae8b3.
2015-11-09 11:48:35 -06:00
damencho
7cebc563db Use all css file. 2015-11-09 11:39:15 -06:00
damencho
840dbbeef1 Adds missing unsupported_browser.css. 2015-11-09 11:38:57 -06:00
damencho
88fa2ae8b3 Reorder css files in alphabet order. 2015-11-09 11:38:25 -06:00
damencho
b6f9cf93d5 Updates dev build instructions. 2015-11-09 09:38:42 -06:00
ibauersachs
ea7283aa52 Commit from translate.jitsi.org by user ibauersachs.: 175 of 180 strings translated (0 fuzzy). 2015-11-09 13:01:12 +00:00
ibauersachs
76f889bcdd Commit from translate.jitsi.org by user ibauersachs.: 180 of 180 strings translated (0 fuzzy). 2015-11-09 13:00:59 +00:00
paweldomas
cfcf6fbc67 Merge branch 'multiple-tracks' 2015-11-06 16:27:14 -06:00
Boris Grozev
4009fed35d Moves the roomname generator to util, reuses a function. 2015-11-06 16:21:21 -06:00
paweldomas
27fc4636b7 Adjustments to make lip-sync work. Stream merging is now done by Jicofo. 2015-11-06 16:18:33 -06:00
Boris Grozev
fb6367d687 Wraps at 80 chars. 2015-11-06 16:05:22 -06:00
Boris Grozev
5542642933 Exposes functions in RandomUtils. 2015-11-06 15:45:34 -06:00
Boris Grozev
005cc4b27a Simplifies code. 2015-11-06 15:30:41 -06:00
yanas
a2c37fa3f6 Fixes some warnings. 2015-11-06 15:02:42 -06:00
isymchych
9f2b3aa011 rename callStatsUID to callStatsUserName 2015-11-06 14:58:07 -06:00
isymchych
c89c9e78ff move username generator to utils 2015-11-06 14:56:12 -06:00
isymchych
0a71c2e1d3 Generate random username for callstats 2015-11-06 14:49:32 -06:00
yanas
03018a2ead Fixing documentation warnings. 2015-11-06 11:48:00 -06:00
paweldomas
333cd6f25f Converts constants in RandomUtil to hex. 2015-11-05 14:14:52 -06:00
isymchych
05b3df0560 added jsdocs 2015-11-05 20:30:30 +02:00
isymchych
5be8c33054 report webrtc errors to callstats 2015-11-05 20:21:34 +02:00
bgrozev
a64627aa47 Clarifies supported systems 2015-11-05 11:58:13 -06:00
yanas
73b1d3c7c2 Adds a feedback button and dialog. 2015-11-05 11:28:01 -06:00
Boris Grozev
2117aefacc Removes unused code. 2015-11-05 11:01:19 -06:00
yanas
a3264ce6b7 Merge pull request #396 from isymchych/fix-username-xss
Escape html from username.
2015-11-05 10:06:05 -06:00
damencho
374763c325 Fixes mute check, prevents disabling the menu when the remote participant is muted. 2015-11-04 17:23:49 -06:00
paweldomas
73317c920a Merge branch 'master' into multiple-tracks 2015-11-04 15:09:51 -06:00
isymchych
fdc2ecd86f escape html from username 2015-11-04 17:01:11 +02:00
damencho
5446c513f5 Adds room name parameter to the bosh connection. 2015-11-03 14:32:41 -06:00
paweldomas
b1f617502e Integrates token authentication. 2015-11-03 13:21:52 -06:00
Boris Grozev
a5e15025f8 Implements switching streams on firefox by using RTPSender.replaceTrack(). Fixes bugs with switching between camera and screen sharing. 2015-11-03 11:27:48 -06:00
paweldomas
7ff7545570 Reload Prosody after successful tokens install. 2015-11-03 11:14:01 -06:00
paweldomas
ca89b59638 Fixes for jitsi-meet-tokens Debian package. 2015-11-03 11:11:54 -06:00
damencho
67b35f0f1e Uses inactive callback if available instead of deprecated onended one. 2015-11-02 16:42:32 -06:00
damencho
249e032ad6 Uses stopping tracks and use MediaStream.stop method only if defined. Based on previous code and inspired by PR #390. 2015-11-02 16:42:32 -06:00
damencho
fa138eae43 Replaces deprecated ended call with active check for media streams. 2015-11-02 16:42:32 -06:00
paweldomas
9406669aae Fix for jitsi-meet-tokens 2015-11-02 15:28:19 -06:00
paweldomas
531b81cce3 Adds Prosody plugin for token authentication. 2015-11-02 15:28:18 -06:00
damencho
b08308e5e4 Fixes isMuted check. 2015-11-02 10:48:09 -06:00
damencho
74227e182a Makes sure we use stream.ended in one place. 2015-10-30 17:57:25 -05:00
damencho
8cebbbb347 Stops the MediaStream using the utility method in RTC. 2015-10-30 17:57:25 -05:00
damencho
1ba0a182f6 Makes sure we add/remove all onended events for media streams in one central place. 2015-10-30 17:57:25 -05:00
damencho
11e1197901 Uses one method from RTC to stop media streams. 2015-10-30 17:57:25 -05:00
Boris Grozev
932af962b2 Adds an option to advertise our SSRCs in presence to the MUC (as well as
Jingle) for backward compatibility with jirecon. Partially reverts
a1b0677442
2015-10-29 16:50:33 -05:00
Boris Grozev
e0522f6977 Simplifies code. 2015-10-29 16:30:36 -05:00
Boris Grozev
9111797913 Removes a tangle of spaghetti. 2015-10-29 14:30:30 -05:00
Boris Grozev
a2ad7b8f53 Mutes video elements. 2015-10-28 12:05:42 -05:00
paweldomas
7abe02d756 Merge audio and video on the receiver's side. 2015-10-28 12:01:21 -05:00
Boris Grozev
cd1e761699 Creates multiple (Jitsi-Meet) MediaStreams if the RTCMediaStream object
contains both audio and video tracks.
2015-10-28 11:30:48 -05:00
damencho
14fe5d09d1 Adds ssl stronger settings to default nginx config. 2015-10-26 12:47:34 -05:00
bgrozev
83339382ab s/jessie/Wheezy/ 2015-10-21 09:53:51 -05:00
bgrozev
28d63ec2c1 Adds a note for running on Debian jessie. 2015-10-21 09:52:42 -05:00
bgrozev
30c601e054 Removes words from the roomname generator. 2015-10-21 09:46:54 -05:00
Boris Grozev
23ff99db6e Implements choosing from a list of possible BOSH addresses. 2015-10-20 10:44:41 -05:00
Boris Grozev
554808549e Fixes a bug reported by George Politis. 2015-10-19 15:59:24 -05:00
Boris Grozev
657a3fb2e1 Removes comments (fixes warnings). 2015-10-19 15:59:16 -05:00
bgrozev
bbbe1fe5c7 Merge pull request #374 from spellauge/authdomain2
authdomain2
2015-10-14 11:25:19 -05:00
Yana Stamcheva
b2f94783fa Loads css before js, attempting to fix an issue with incorrect video initial size. 2015-10-13 16:07:27 -05:00
Spellauge
277f340063 authdomain2 2015-10-12 17:38:35 +02:00
Jesse Bickel
806cacb755 Use member.isFocus to decide whether a given member is the conference focus user. 2015-09-25 08:49:19 -05:00
1469 changed files with 162750 additions and 25169 deletions

6
.buckconfig Normal file
View File

@@ -0,0 +1,6 @@
[android]
target = Google Inc.:Google APIs:23
[maven_repositories]
central = https://repo1.maven.org/maven2

13
.editorconfig Normal file
View File

@@ -0,0 +1,13 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
max_line_length = 80
trim_trailing_whitespace = true
[Makefile]
indent_style = tab

12
.eslintignore Normal file
View File

@@ -0,0 +1,12 @@
# The build artifacts of the jitsi-meet project.
build/*
# Third-party source code which we (1) do not want to modify or (2) try to
# modify as little as possible.
flow-typed/*
libs/*
# ESLint will by default ignore its own configuration file. However, there does
# not seem to be a reason why we will want to risk being inconsistent with our
# remaining JavaScript source code.
!.eslintrc.js

5
.eslintrc.js Normal file
View File

@@ -0,0 +1,5 @@
module.exports = {
'extends': [
'eslint-config-jitsi'
]
};

86
.flowconfig Normal file
View File

@@ -0,0 +1,86 @@
[ignore]
; We fork some components by platform
.*/*[.]android.js
; Ignore "BUCK" generated dirs
<PROJECT_ROOT>/\.buckd/
; Ignore unexpected extra "@providesModule"
.*/node_modules/.*/node_modules/fbjs/.*
; Ignore duplicate module providers
; For RN Apps installed via npm, "Libraries" folder is inside
; "node_modules/react-native" but in the source repo it is in the root
.*/Libraries/react-native/React.js
; Ignore polyfills
.*/Libraries/polyfills/.*
; Ignore metro
.*/node_modules/metro/.*
; Ignore packages in node_modules which we (i.e. the jitsi-meet project) have
; seen to cause errors and we have chosen not to fix.
.*/node_modules/@atlaskit/.*/*.js.flow
.*/node_modules/react-native-keep-awake/.*
.*/node_modules/react-native-permissions/.*
.*/node_modules/styled-components/.*
.*/\.git/.*
[include]
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/flow/
node_modules/react-native/flow-github/
[options]
emoji=true
esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable
module.system=haste
module.system.haste.use_name_reducers=true
# get basename
module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1'
# strip .js or .js.flow suffix
module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1'
# strip .ios suffix
module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1'
module.system.haste.paths.blacklist=.*/__tests__/.*
module.system.haste.paths.blacklist=.*/__mocks__/.*
module.system.haste.paths.blacklist=<PROJECT_ROOT>/node_modules/react-native/Libraries/Animated/src/polyfills/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/Libraries/.*
munge_underscores=true
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
; We (i.e. the jitsi-meet project) are using the haste module system on Web as
; well, not only on React Native. Unfortunately, Flow does not support .web.js
; by default. Override Flow's defaults to include .web.js as well. Technically,
; we have .native.js as well so the choice of .web.js may lead to errors.
; Practically though, it is a potential future problem that we do not have at
; the time of this writing.
module.file_ext=.web.js
; Flow's defaults:
module.file_ext=.js
module.file_ext=.jsx
module.file_ext=.json
[version]
^0.78.0

2
.gitattributes vendored
View File

@@ -1 +1,3 @@
*.bundle.js -text -diff
*.pbxproj -text
lib-jitsi-meet.js -text -diff

27
.github/ISSUE_TEMPLATE/bug-report.md vendored Normal file
View File

@@ -0,0 +1,27 @@
---
name: Bug Report
about: Before posting, please make sure you check https://community.jitsi.org
---
*This Issue tracker is only for reporting bugs and tracking code related issues.*
Before posting, please make sure you check community.jitsi.org to see if the same or similar bugs have already been discussed. General questions, installation help, and feature requests can also be posted to community.jitsi.org.
## Description
---
## Current behavior
---
## Expected Behavior
---
## Possible Solution
---
## Steps to reproduce
---
# Environment details
---

78
.gitignore vendored
View File

@@ -1,8 +1,78 @@
node_modules
*.swp
.idea/
*.iml
.*.tmp
deploy-local.sh
libs/app.bundle.*
libs/
all.css
*css.map
.remote-sync.json
.sync-config.cson
# CocoaPods
Pods/
# The following are automatically generated by the react-native command line
# utility (either with the init or upgrade option which pull in the latest
# template files recommended by Facebook for React Native).
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
#
buck-out/
\.buckd/
*.keystore
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots
# Bundle artifact
*.jsbundle
# precommit-hook
.jshintignore
.jshintrc

View File

@@ -1,8 +0,0 @@
node_modules
libs
debian
analytics.js
modules/xmpp/strophe.emuc.js
modules/UI/prezi/Prezi.js
modules/RTC/adapter.screenshare.js

View File

@@ -1,19 +0,0 @@
{
// Refer to http://jshint.com/docs/options/ for an exhaustive list of options
"asi": false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
"expr": true, // true: Tolerate `ExpressionStatement` as Programs
"loopfunc": true, // true: Tolerate functions being defined in loops
"curly": false, // true: Require {} for every new block or scope
"evil": true, // true: Tolerate use of `eval` and `new Function()`
"white": true,
"undef": true, // true: Require all non-global variables to be declared (prevents global leaks)
"browser": true, // Web Browser (window, document, etc)
"node": true, // Node.js
"trailing": true,
"indent": 4, // {int} Number of spaces to use for indentation
"latedef": true, // true: Require variables/functions to be defined before being used
"newcap": true, // true: Require capitalization of all constructor functions e.g. `new F()`
"maxlen": 80, // {int} Max number of characters per line
"latedef": false, //This option prohibits the use of a variable before it was defined
"laxbreak": true //Ignore line breaks around "=", "==", "&&", etc.
}

4
.travis.yml Normal file
View File

@@ -0,0 +1,4 @@
osx_image: xcode10
language: objective-c
script:
- "./ios/travis-ci/build-ipa.sh"

1
.watchmanconfig Normal file
View File

@@ -0,0 +1 @@
{}

29
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,29 @@
# How to contribute
We would love to have your help. Before you start working however, please read
and follow this short guide.
# Reporting Issues
Provide as much information as possible. Mention the version of Jitsi Meet,
Jicofo and JVB you are using, and explain (as detailed as you can) how the
problem can be reproduced.
# Code contributions
Found a bug and know how to fix it? Great! Please read on.
## Contributor License Agreement
While the Jitsi projects are released under the
[Apache License 2.0](https://github.com/jitsi/jitsi-meet/blob/master/LICENSE), the copyright
holder and principal creator is [Atlassian](https://www.atlassian.com/). To
ensure that we can continue making these projects available under an Open Source license,
we need you to sign our Apache-based contributor
license agreement as either a [corporation](https://jitsi.org/ccla) or an
[individual](https://jitsi.org/icla). If you cannot accept the terms laid out
in the agreement, unfortunately, we cannot accept your contribution.
## Creating Pull Requests
- Make sure your code passes the linter rules beforehand. The linter is executed
automatically when committing code.
- Perform **one** logical change per pull request.
- Maintain a clean list of commits, squash them if necessary.
- Rebase your topic branch on top of the master branch before creating the pull
request.

11
ConferenceEvents.js Normal file
View File

@@ -0,0 +1,11 @@
/**
* Notifies interested parties that hangup procedure will start.
*/
export const BEFORE_HANGUP = 'conference.before_hangup';
/**
* Notifies interested parties that desktop sharing enable/disable state is
* changed.
*/
export const DESKTOP_SHARING_ENABLED_CHANGED
= 'conference.desktop_sharing_enabled_changed';

View File

@@ -1,34 +1,78 @@
NPM = npm
BROWSERIFY = ./node_modules/.bin/browserify
UGLIFYJS = ./node_modules/.bin/uglifyjs
EXORCIST = ./node_modules/.bin/exorcist
BUILD_DIR = build
CLEANCSS = ./node_modules/.bin/cleancss
CSS_FILES = font.css toastr.css main.css videolayout_default.css font-awesome.css jquery-impromptu.css modaldialog.css notice.css popup_menu.css login_menu.css popover.css jitsi_popover.css contact_list.css chat.css welcome_page.css settingsmenu.css
DEPLOY_DIR = libs
BROWSERIFY_FLAGS = -d
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet/
LIBFLAC_DIR = node_modules/libflacjs/dist/min/
NODE_SASS = ./node_modules/.bin/node-sass
NPM = npm
OUTPUT_DIR = .
STYLES_BUNDLE = css/all.bundle.css
STYLES_DESTINATION = css/all.css
STYLES_MAIN = css/main.scss
WEBPACK = ./node_modules/.bin/webpack
WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack-dev-server
all: compile uglify deploy clean
all: compile deploy clean
compile:
$(NPM) update && $(BROWSERIFY) $(BROWSERIFY_FLAGS) -e app.js -s APP | $(EXORCIST) $(OUTPUT_DIR)/app.bundle.js.map > $(OUTPUT_DIR)/app.bundle.js
$(WEBPACK) -p
clean:
rm -f $(OUTPUT_DIR)/app.bundle.*
rm -fr $(BUILD_DIR)
deploy:
mkdir -p $(DEPLOY_DIR) && \
cp $(OUTPUT_DIR)/app.bundle.min.js $(OUTPUT_DIR)/app.bundle.min.map $(DEPLOY_DIR) && \
(cd css; cat $(CSS_FILES)) | $(CLEANCSS) > css/all.css && \
deploy: deploy-init deploy-appbundle deploy-lib-jitsi-meet deploy-libflac deploy-css deploy-local
deploy-init:
rm -fr $(DEPLOY_DIR)
mkdir -p $(DEPLOY_DIR)
deploy-appbundle:
cp \
$(BUILD_DIR)/app.bundle.min.js \
$(BUILD_DIR)/app.bundle.min.map \
$(BUILD_DIR)/do_external_connect.min.js \
$(BUILD_DIR)/do_external_connect.min.map \
$(BUILD_DIR)/external_api.min.js \
$(BUILD_DIR)/external_api.min.map \
$(BUILD_DIR)/flacEncodeWorker.min.js \
$(BUILD_DIR)/flacEncodeWorker.min.map \
$(BUILD_DIR)/device_selection_popup_bundle.min.js \
$(BUILD_DIR)/device_selection_popup_bundle.min.map \
$(BUILD_DIR)/dial_in_info_bundle.min.js \
$(BUILD_DIR)/dial_in_info_bundle.min.map \
$(BUILD_DIR)/alwaysontop.min.js \
$(BUILD_DIR)/alwaysontop.min.map \
$(OUTPUT_DIR)/analytics-ga.js \
$(DEPLOY_DIR)
deploy-lib-jitsi-meet:
cp \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.js \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.map \
$(LIBJITSIMEET_DIR)/connection_optimization/external_connect.js \
$(LIBJITSIMEET_DIR)/modules/browser/capabilities.json \
$(DEPLOY_DIR)
deploy-libflac:
cp \
$(LIBFLAC_DIR)/libflac4-1.3.2.min.js \
$(LIBFLAC_DIR)/libflac4-1.3.2.min.js.mem \
$(DEPLOY_DIR)
deploy-css:
$(NODE_SASS) $(STYLES_MAIN) $(STYLES_BUNDLE) && \
$(CLEANCSS) $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
rm $(STYLES_BUNDLE)
deploy-local:
([ ! -x deploy-local.sh ] || ./deploy-local.sh)
uglify:
$(UGLIFYJS) -p relative $(OUTPUT_DIR)/app.bundle.js -o $(OUTPUT_DIR)/app.bundle.min.js --source-map $(OUTPUT_DIR)/app.bundle.min.map --in-source-map $(OUTPUT_DIR)/app.bundle.js.map
dev: deploy-init deploy-css deploy-lib-jitsi-meet deploy-libflac
$(WEBPACK_DEV_SERVER)
source-package:
mkdir -p source_package/jitsi-meet/css && \
cp -r analytics.js external_api.js favicon.ico fonts images index.html interface_config.js libs plugin.*html sounds title.html unsupported_browser.html LICENSE config.js lang source_package/jitsi-meet && \
cp -r *.js *.html connection_optimization favicon.ico fonts images libs static sounds LICENSE lang source_package/jitsi-meet && \
cp css/all.css source_package/jitsi-meet/css && \
(cd source_package ; tar cjf ../jitsi-meet.tar.bz2 jitsi-meet) && \
rm -rf source_package

128
README.md
View File

@@ -1,25 +1,43 @@
Jitsi Meet - Secure, Simple and Scalable Video Conferences
====
Jitsi Meet is an open-source (Apache) WebRTC JavaScript application that uses [Jitsi Videobridge](https://jitsi.org/videobridge) to provide high quality, scalable video conferences. You can see [Jitsi Meet in action](http://youtu.be/7vFUVClsNh0) here at the session #482 of the VoIP Users Conference.
# Jitsi Meet - Secure, Simple and Scalable Video Conferences
You can also try it out yourself at https://meet.jit.si .
Jitsi Meet is an open-source (Apache) WebRTC JavaScript application that uses [Jitsi Videobridge](https://jitsi.org/videobridge) to provide high quality, [secure](#security) and scalable video conferences. You can see Jitsi Meet in action [here at the session #482 of the VoIP Users Conference](http://youtu.be/7vFUVClsNh0).
Jitsi Meet allows for very efficient collaboration. It allows users to stream their desktop or only some windows. It also supports shared document editing with Etherpad and remote presentations with Prezi.
The Jitsi Meet client runs in your browser, without the need for installing anything on your computer. You can also try it out yourself at https://meet.jit.si .
Jitsi Meet allows for very efficient collaboration. It allows users to stream their desktop or only some windows. It also supports shared document editing with Etherpad.
## Installation
Installing Jitsi Meet is quite a simple experience. For Debian-based systems, we recommend following the [quick-install](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md) document, which uses the package system.
On the client side, no installation is necessary. You just point your browser to the URL of your deployment. This section is about installing the Jitsi Meet suite on your server and hosting your own conferencing service.
Installing Jitsi Meet is quite a simple experience. For Debian-based systems, we recommend following the [quick-install](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md) document, which uses the package system. You can also see a demonstration of the process in [this tutorial video](https://jitsi.org/tutorial).
For other systems, or if you wish to install all components manually, see the [detailed manual installation instructions](https://github.com/jitsi/jitsi-meet/blob/master/doc/manual-install.md).
## Download
| Latest stable release | [![release](https://img.shields.io/badge/release-latest-green.svg)](https://github.com/jitsi/jitsi-meet/releases/latest) |
|---|---|
You can download Debian/Ubuntu binaries:
* [stable](https://download.jitsi.org/stable/) ([instructions](https://jitsi.org/downloads/ubuntu-debian-installations-instructions/))
* [testing](https://download.jitsi.org/testing/) ([instructions](https://jitsi.org/downloads/ubuntu-debian-installations-instructions-for-testing/))
* [nightly](https://download.jitsi.org/unstable/) ([instructions](https://jitsi.org/downloads/ubuntu-debian-installations-instructions-nightly/))
You can download source archives (produced by ```make source-package```):
* [source builds](https://download.jitsi.org/jitsi-meet/src/)
You can get our mobile versions from here:
* [Android](https://play.google.com/store/apps/details?id=org.jitsi.meet)
* [iOS](https://itunes.apple.com/us/app/jitsi-meet/id1165103905)
## Building the sources
Jitsi Meet uses [Browserify](http://browserify.org). If you want to make changes in the code you need to [install Browserify](http://browserify.org/#install). Browserify requires [nodejs](http://nodejs.org).
Node.js >= 8 and npm >= 6 are required.
On Debian/Ubuntu systems, the required packages can be installed with:
```
sudo apt-get install npm
sudo npm install -g browserify
sudo apt-get install npm nodejs
cd jitsi-meet
npm install
```
@@ -29,9 +47,95 @@ To build the Jitsi Meet application, just type
make
```
## Discuss
Please use the [Jitsi dev mailing list](http://lists.jitsi.org/pipermail/dev/) to discuss feature requests before opening an issue on Github.
### Working with the library sources (lib-jitsi-meet)
By default the library is build from its git repository sources. The default dependency path in package.json is :
```json
"lib-jitsi-meet": "jitsi/lib-jitsi-meet",
```
To work with local copy you must change the path to:
```json
"lib-jitsi-meet": "file:///Users/name/local-lib-jitsi-meet-copy",
```
To make the project you must force it to take the sources as 'npm update' will not do it.
```
npm install lib-jitsi-meet --force && make
```
Or if you are making only changes to the library:
```
npm install lib-jitsi-meet --force && make deploy-lib-jitsi-meet
```
Alternative way is to use [npm link](https://docs.npmjs.com/cli/link).
It allows to link `lib-jitsi-meet` dependency to local source in few steps:
```bash
cd lib-jitsi-meet
#### create global symlink for lib-jitsi-meet package
npm link
cd ../jitsi-meet
#### create symlink from the local node_modules folder to the global lib-jitsi-meet symlink
npm link lib-jitsi-meet
```
So now after changes in local `lib-jitsi-meet` repository you can rebuild it with `npm run install` and your `jitsi-meet` repository will use that modified library.
Note: when using node version 4.x, the make file of jitsi-meet do npm update which will delete the link, no longer the case with version 6.x.
If you do not want to use local repository anymore you should run
```bash
cd jitsi-meet
npm unlink lib-jitsi-meet
npm install
```
### Running with webpack-dev-server for development
Use it at the CLI, type
```
make dev
```
By default the backend deployment used is `beta.meet.jit.si`, you can point the Jitsi-Meet app at a different backend by using a proxy server. To do this set the WEBPACK_DEV_SERVER_PROXY_TARGET variable:
```
export WEBPACK_DEV_SERVER_PROXY_TARGET=https://your-example-server.com
make dev
```
The app should be running at https://localhost:8080/
## Contributing
If you are looking to contribute to Jitsi Meet, first of all, thank you! Please
see our [guidelines for contributing](CONTRIBUTING.md).
## Embedding in external applications
Jitsi Meet provides a very flexible way of embedding it in external applications by using the [Jitsi Meet API](doc/api.md).
## Security
WebRTC today does not provide a way of conducting multiparty conversations with
end-to-end encryption. As a matter of fact, unless you consistently vocally
compare DTLS fingerprints with your peers, the same goes for one-to-one calls.
As a result when using a Jitsi Meet instance, your stream is encrypted on the
network but decrypted on the machine that hosts the bridge.
The Jitsi Meet architecture allows you to deploy your own version, including
all server components, and in that case your security guarantees will be roughly
equivalent to these of a direct one-to-one WebRTC call. This is what's unique to
Jitsi Meet in terms of security.
The [meet.jit.si](https://meet.jit.si) service is maintained by the Jitsi team
at [8x8](https://8x8.com).
## Mobile app
Jitsi Meet is also available as a React Native app for Android and iOS.
Instructions on how to build it can be found [here](doc/mobile.md).
## Acknowledgements
Jitsi Meet started out as a sample conferencing application using Jitsi Videobridge. It was originally developed by then ESTOS' developer Philipp Hancke who then contributed it to the community where development continues with joint forces!
Jitsi Meet started out as a sample conferencing application using Jitsi Videobridge. It was originally developed by then ESTOS' developer Philipp Hancke who then contributed it to the community where development continues with joint forces!

163
analytics-ga.js Normal file
View File

@@ -0,0 +1,163 @@
/* global ga */
(function(ctx) {
/**
*
*/
function Analytics(options) {
/* eslint-disable */
if (!options.googleAnalyticsTrackingId) {
console.log(
'Failed to initialize Google Analytics handler, no tracking ID');
return;
}
/**
* Google Analytics
* TODO: Keep this local, there's no need to add it to window.
*/
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', options.googleAnalyticsTrackingId, 'auto');
ga('send', 'pageview');
/* eslint-enable */
}
/**
* Extracts the integer to use for a Google Analytics event's value field
* from a lib-jitsi-meet analytics event.
* @param {Object} event - The lib-jitsi-meet analytics event.
* @returns {Object} - The integer to use for the 'value' of a Google
* Analytics event.
* @private
*/
Analytics.prototype._extractAction = function(event) {
// Page events have a single 'name' field.
if (event.type === 'page') {
return event.name;
}
// All other events have action, actionSubject, and source fields. All
// three fields are required, and the often jitsi-meet and
// lib-jitsi-meet use the same value when separate values are not
// necessary (i.e. event.action == event.actionSubject).
// Here we concatenate these three fields, but avoid adding the same
// value twice, because it would only make the GA event's action harder
// to read.
let action = event.action;
if (event.actionSubject && event.actionSubject !== event.action) {
// Intentionally use string concatenation as analytics needs to
// work on IE but this file does not go through babel. For some
// reason disabling this globally for the file does not have an
// effect.
// eslint-disable-next-line prefer-template
action = event.actionSubject + '.' + action;
}
if (event.source && event.source !== event.action
&& event.source !== event.action) {
// eslint-disable-next-line prefer-template
action = event.source + '.' + action;
}
return action;
};
/**
* Extracts the integer to use for a Google Analytics event's value field
* from a lib-jitsi-meet analytics event.
* @param {Object} event - The lib-jitsi-meet analytics event.
* @returns {Object} - The integer to use for the 'value' of a Google
* Analytics event, or NaN if the lib-jitsi-meet event doesn't contain a
* suitable value.
* @private
*/
Analytics.prototype._extractValue = function(event) {
let value = event && event.attributes && event.attributes.value;
// Try to extract an integer from the "value" attribute.
value = Math.round(parseFloat(value));
return value;
};
/**
* Extracts the string to use for a Google Analytics event's label field
* from a lib-jitsi-meet analytics event.
* @param {Object} event - The lib-jitsi-meet analytics event.
* @returns {string} - The string to use for the 'label' of a Google
* Analytics event.
* @private
*/
Analytics.prototype._extractLabel = function(event) {
let label = '';
// The label field is limited to 500B. We will concatenate all
// attributes of the event, except the user agent because it may be
// lengthy and is probably included from elsewhere.
for (const property in event.attributes) {
if (property !== 'permanent_user_agent'
&& property !== 'permanent_callstats_name'
&& event.attributes.hasOwnProperty(property)) {
// eslint-disable-next-line prefer-template
label += property + '=' + event.attributes[property] + '&';
}
}
if (label.length > 0) {
label = label.slice(0, -1);
}
return label;
};
/**
* This is the entry point of the API. The function sends an event to
* google analytics. The format of the event is described in
* AnalyticsAdapter in lib-jitsi-meet.
* @param {Object} event - the event in the format specified by
* lib-jitsi-meet.
*/
Analytics.prototype.sendEvent = function(event) {
if (!event || !ga) {
return;
}
const ignoredEvents
= [ 'e2e_rtt', 'rtp.stats', 'rtt.by.region', 'available.device',
'stream.switch.delay', 'ice.state.changed', 'ice.duration' ];
// Temporary removing some of the events that are too noisy.
if (ignoredEvents.indexOf(event.action) !== -1) {
return;
}
const gaEvent = {
'eventCategory': 'jitsi-meet',
'eventAction': this._extractAction(event),
'eventLabel': this._extractLabel(event)
};
const value = this._extractValue(event);
if (!isNaN(value)) {
gaEvent.eventValue = value;
}
ga('send', 'event', gaEvent);
};
if (typeof ctx.JitsiMeetJS === 'undefined') {
ctx.JitsiMeetJS = {};
}
if (typeof ctx.JitsiMeetJS.app === 'undefined') {
ctx.JitsiMeetJS.app = {};
}
if (typeof ctx.JitsiMeetJS.app.analyticsHandlers === 'undefined') {
ctx.JitsiMeetJS.app.analyticsHandlers = [];
}
ctx.JitsiMeetJS.app.analyticsHandlers.push(Analytics);
})(window);
/* eslint-enable prefer-template */

View File

@@ -1,18 +0,0 @@
(function (ctx) {
function Analytics() {
/**
* Google Analytics
*/
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-319188-14', 'jit.si');
ga('send', 'pageview');
}
Analytics.prototype.sendEvent = function (action, data) {
ga('send', 'event', 'jit.si', action);
};
ctx.Analytics = Analytics;
}(window));

519
android/README.md Normal file
View File

@@ -0,0 +1,519 @@
# Jitsi Meet SDK for Android
## Build your own, or use a pre-build SDK artifacts/binaries
Jitsi conveniently provides a pre-build SDK artifacts/binaries in its Maven repository. When you do not require any modification to the SDK itself, it's suggested to use the pre-build SDK. This avoids the complexity of building and installing your own SDK artifacts/binaries.
### Use pre-build SDK artifacts/binaries
In your project, add the Maven repository
`https://github.com/jitsi/jitsi-maven-repository/raw/master/releases` and the
dependency `org.jitsi.react:jitsi-meet-sdk` into your `build.gradle` files.
The repository typically goes into the `build.gradle` file in the root of your project:
```gradle
allprojects {
repositories {
google()
jcenter()
maven {
url "https://github.com/jitsi/jitsi-maven-repository/raw/master/releases"
}
}
}
```
Dependency definitions belong in the individual module `build.gradle` files:
```gradle
dependencies {
// (other dependencies)
implementation ('org.jitsi.react:jitsi-meet-sdk:+') { transitive = true }
}
```
### Build and use your own SDK artifacts/binaries
1. Install all required [dependencies](https://github.com/jitsi/jitsi-meet/blob/master/doc/mobile.md).
2. Create the SDK-release assembly, by invoking the following in the jitsi-meet
project source:
```bash
cd android/
./gradlew :sdk:assembleRelease
```
When this successfully executes, artifacts/binaries are ready to be published
into a Maven repository of your choice.
3. Configure the Maven repositories in which you are going to publish the
artifacts/binaries during step 4.
In the file `android/sdk/build.gradle` modify the line that contains
`"file:${rootProject.projectDir}/../../../jitsi/jitsi-maven-repository/releases"`
Change this value (which represents the Maven repository location used internally
by the Jitsi Developers) to the location of the repository that you'd like to use.
4. Publish the Maven artifact/binary of Jitsi Meet SDK for Android in the Maven
repository configured in step 3:
```bash
./gradlew :sdk:publish
cd ../
```
5. In _your_ project, add the Maven repository that you configured in step 3, as well
as the dependency `org.jitsi.react:jitsi-meet-sdk` into your `build.gradle`
file. Note that it's needed to pull in the transitive dependencies:
```gradle
implementation ('org.jitsi.react:jitsi-meet-sdk:+') { transitive = true }
```
Generally, if you are modifying the JavaScript code of Jitsi Meet SDK for Android only,
the above will suffice. If you would like to publish a third-party react-native module
which Jitsi Meet SDK for Android depends on (and is not publicly available in Maven
repositories) continue below.
6. Create the release assembly for _each_ third-party react-native module that you
need, replacing it's name in the example below.
```bash
./gradlew :react-native-webrtc:assembleRelease
```
7. Configure the Maven repositories in which you are going to publish the
artifacts/binaries during step 8.
In the file `android/build.gradle` (note that this is a different file than the file
that was modified in step 3) modify the line that contains
`"file:${rootProject.projectDir}/../../../jitsi/jitsi-maven-repository/releases"`
Change this value (which represents the Maven repository location used internally
by the Jitsi Developers) to the location of the repository that you'd like to use.
You can use the same repository as the one you configured in step 3 if you want.
8. Publish the Maven artifact/binary of _each_ third-party react-native module that
you need, replacing it's name in the example below. For example, to publish
react-native-webrtc:
```bash
./gradlew :react-native-webrtc:publish
```
Note that there should not be a need to explicitly add these dependencies in
_your_ project, as they will be pulled in as transitive dependencies of
`jitsi-meet-sdk`.
## Using the API
=======
Jitsi Meet SDK is an Android library which embodies the whole Jitsi Meet
experience and makes it reusable by third-party apps.
First, add Java 1.8 compatibility support to your project by adding the
following lines into your `build.gradle` file:
```
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
```
To get started, extends your `android.app.Activity` from
`org.jitsi.meet.sdk.JitsiMeetActivity`:
```java
package org.jitsi.example;
import org.jitsi.meet.sdk.JitsiMeetActivity;
public class MainActivity extends JitsiMeetActivity {
}
```
Alternatively, you can use the `org.jitsi.meet.sdk.JitsiMeetView` class which
extends `android.view.View`:
```java
package org.jitsi.example;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import org.jitsi.meet.sdk.JitsiMeetView;
public class MainActivity extends AppCompatActivity {
private JitsiMeetView view;
@Override
public void onBackPressed() {
if (!JitsiMeetView.onBackPressed()) {
// Invoke the default handler if it wasn't handled by React.
super.onBackPressed();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = new JitsiMeetView(this);
view.loadURL(null);
setContentView(view);
}
@Override
protected void onDestroy() {
super.onDestroy();
view.dispose();
view = null;
JitsiMeetView.onHostDestroy(this);
}
@Override
public void onNewIntent(Intent intent) {
JitsiMeetView.onNewIntent(intent);
}
@Override
protected void onResume() {
super.onResume();
JitsiMeetView.onHostResume(this);
}
@Override
protected void onStop() {
super.onStop();
JitsiMeetView.onHostPause(this);
}
}
```
### JitsiMeetActivity
This class encapsulates a high level API in the form of an Android `Activity`
which displays a single `JitsiMeetView`.
#### getDefaultURL()
See JitsiMeetView.getDefaultURL.
#### isPictureInPictureEnabled()
See JitsiMeetView.isPictureInPictureEnabled.
#### isWelcomePageEnabled()
See JitsiMeetView.isWelcomePageEnabled.
#### loadURL(URL)
See JitsiMeetView.loadURL.
#### setDefaultURL(URL)
See JitsiMeetView.setDefaultURL.
#### setPictureInPictureEnabled(boolean)
See JitsiMeetView.setPictureInPictureEnabled.
#### setWelcomePageEnabled(boolean)
See JitsiMeetView.setWelcomePageEnabled.
### JitsiMeetView
The `JitsiMeetView` class is the core of Jitsi Meet SDK. It's designed to
display a Jitsi Meet conference (or a welcome page).
#### dispose()
Releases all resources associated with this view. This method MUST be called
when the Activity holding this view is going to be destroyed, usually in the
`onDestroy()` method.
#### getDefaultURL()
Returns the default base URL used to join a conference when a partial URL (e.g.
a room name only) is specified to `loadURLString`/`loadURLObject`. If not set or
if set to `null`, the default built in JavaScript is used: https://meet.jit.si.
#### getListener()
Returns the `JitsiMeetViewListener` instance attached to the view.
#### isPictureInPictureEnabled()
Returns `true` if Picture-in-Picture is enabled; `false`, otherwise. If not
explicitly set (by a preceding `setPictureInPictureEnabled` call), defaults to
`true` if the platform supports Picture-in-Picture natively; `false`, otherwise.
#### isWelcomePageEnabled()
Returns true if the Welcome page is enabled; otherwise, false. If false, a black
empty view will be rendered when not in a conference. Defaults to false.
#### loadURL(URL)
Loads a specific URL which may identify a conference to join. If the specified
URL is null and the Welcome page is enabled, the Welcome page is displayed
instead.
#### loadURLString(String)
Loads a specific URL which may identify a conference to join. If the specified
URL is null and the Welcome page is enabled, the Welcome page is displayed
instead.
#### loadURLObject(Bundle)
Loads a specific URL which may identify a conference to join. The URL is
specified in the form of a Bundle of properties which (1) internally are
sufficient to construct a URL (string) while (2) abstracting the specifics of
constructing the URL away from API clients/consumers. If the specified URL is
null and the Welcome page is enabled, the Welcome page is displayed instead.
Example:
```java
Bundle config = new Bundle();
config.putBoolean("startWithAudioMuted", true);
config.putBoolean("startWithVideoMuted", false);
Bundle urlObject = new Bundle();
urlObject.putBundle("config", config);
urlObject.putString("url", "https://meet.jit.si/Test123");
view.loadURLObject(urlObject);
```
#### setDefaultURL(URL)
Sets the default URL. See `getDefaultURL` for more information.
NOTE: Must be called before (if at all) `loadURL`/`loadURLString` for it to take
effect.
#### setListener(listener)
Sets the given listener (class implementing the `JitsiMeetViewListener`
interface) on the view.
#### setPictureInPictureEnabled(boolean)
Sets whether Picture-in-Picture is enabled. If not set, Jitsi Meet SDK
automatically enables/disables Picture-in-Picture based on native platform
support.
NOTE: Must be called (if at all) before `loadURL`/`loadURLString` for it to take
effect.
#### setWelcomePageEnabled(boolean)
Sets whether the Welcome page is enabled. See `isWelcomePageEnabled` for more
information.
NOTE: Must be called (if at all) before `loadURL`/`loadURLString` for it to take
effect.
#### onBackPressed()
Helper method which should be called from the activity's `onBackPressed` method.
If this function returns `true`, it means the action was handled and thus no
extra processing is required; otherwise the app should call the parent's
`onBackPressed` method.
This is a static method.
#### onHostDestroy(activity)
Helper method which should be called from the activity's `onDestroy` method.
This is a static method.
#### onHostPause(activity)
Helper method which should be called from the activity's `onPause` method.
This is a static method.
#### onHostResume(activity)
Helper method which should be called from the activity's `onResume` or `onStop`
method.
This is a static method.
#### onNewIntent(intent)
Helper method for integrating the *deep linking* functionality. If your app's
activity is launched in "singleTask" mode this method should be called from the
activity's `onNewIntent` method.
This is a static method.
#### onUserLeaveHint()
Helper method for integrating automatic Picture-in-Picture. It should be called
from the activity's `onUserLeaveHint` method.
This is a static method.
#### JitsiMeetViewListener
`JitsiMeetViewListener` provides an interface apps can implement to listen to
the state of the Jitsi Meet conference displayed in a `JitsiMeetView`.
### JitsiMeetViewAdapter
A default implementation of the `JitsiMeetViewListener` interface. Apps may
extend the class instead of implementing the interface in order to minimize
boilerplate.
##### onConferenceFailed
Called when a joining a conference was unsuccessful or when there was an error
while in a conference.
The `data` `Map` contains an "error" key describing the error and a "url" key
with the conference URL.
#### onConferenceJoined
Called when a conference was joined.
The `data` `Map` contains a "url" key with the conference URL.
#### onConferenceLeft
Called when a conference was left.
The `data` `Map` contains a "url" key with the conference URL.
#### onConferenceWillJoin
Called before a conference is joined.
The `data` `Map` contains a "url" key with the conference URL.
#### onConferenceWillLeave
Called before a conference is left.
The `data` `Map` contains a "url" key with the conference URL.
#### onLoadConfigError
Called when loading the main configuration file from the Jitsi Meet deployment
fails.
The `data` `Map` contains an "error" key with the error and a "url" key with the
conference URL which necessitated the loading of the configuration file.
## ProGuard rules
When using the SDK on a project some proguard rules have to be added in order
to avoid necessary code being stripped. Add the following to your project's
rules file:
```
# React Native
# Keep our interfaces so they can be used by other ProGuard rules.
# See http://sourceforge.net/p/proguard/bugs/466/
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.proguard.annotations.DoNotStrip *;
@com.facebook.common.internal.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
void set*(***);
*** get*();
}
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
-dontwarn com.facebook.react.**
# TextLayoutBuilder uses a non-public Android constructor within StaticLayout.
# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details.
-dontwarn android.text.StaticLayout
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
# okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
# WebRTC
-keep class org.webrtc.** { *; }
-dontwarn org.chromium.build.BuildHooksAndroid
# Jisti Meet SDK
-keep class org.jitsi.meet.sdk.** { *; }
```
## Picture-in-Picture
`JitsiMeetView` will automatically adjust its UI when presented in a
Picture-in-Picture style scenario, in a rectangle too small to accommodate its
"full" UI.
Jitsi Meet SDK automatically enables (unless explicitly disabled by a
`setPictureInPictureEnabled(false)` call) Android's native Picture-in-Picture
mode iff the platform is supported i.e. Android >= Oreo.
## Dropbox integration
To setup the Dropbox integration, follow these steps:
1. Add the following to the app's AndroidManifest.xml and change `<APP_KEY>` to
your Dropbox app key:
```
<activity
android:configChanges="keyboard|orientation"
android:launchMode="singleTask"
android:name="com.dropbox.core.android.AuthActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="db-<APP_KEY>" />
</intent-filter>
</activity>
```
2. Add the following to the app's strings.xml and change `<APP_KEY>` to your
Dropbox app key:
```
<string name="dropbox_app_key"><APP_KEY></string>
```

113
android/app/build.gradle Normal file
View File

@@ -0,0 +1,113 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId 'org.jitsi.meet'
versionCode Integer.parseInt("${version}")
versionName "1.9.${version}"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
packagingOptions {
// The project react-native does not provide 64-bit binaries at the
// time of this writing. Unfortunately, packaging any 64-bit
// binaries into the .apk will crash the app at runtime on 64-bit
// platforms.
exclude '/lib/mips64/**'
exclude '/lib/arm64-v8a/**'
exclude '/lib/x86_64/**'
}
}
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-debug.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-release.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "com.android.support:support-v4:${rootProject.ext.supportLibVersion}"
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation 'com.google.android.gms:play-services-auth:15.0.0'
implementation project(':sdk')
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
}
gradle.projectsEvaluated {
// Dropbox integration
//
def plistParser = new XmlSlurper(
/* validating */ false,
/* namespaceAware */ false,
/* allowDocTypeDeclaration */ true)
plistParser.setFeature(
'http://apache.org/xml/features/nonvalidating/load-external-dtd',
false)
def plist = plistParser.parse('../ios/app/src/Info.plist')
def dropboxScheme = plist.dict.array.dict.array.string.find { string ->
string.text().startsWith('db-')
}
def dropboxAppKey = dropboxScheme?.text() - 'db-'
if (dropboxAppKey) {
android.defaultConfig.resValue('string', 'dropbox_app_key', "${dropboxAppKey}")
def dropboxActivity = """
<activity
android:configChanges="keyboard|orientation"
android:launchMode="singleTask"
android:name="com.dropbox.core.android.AuthActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="db-${dropboxAppKey}" />
</intent-filter>
</activity>""";
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processManifest.doLast {
def f = new File(manifestOutputDirectory, 'AndroidManifest.xml')
if (!f.isFile()) {
f = new File(new File(manifestOutputDirectory, output.dirName), 'AndroidManifest.xml')
}
if (f.exists()) {
def charset = 'UTF-8'
def s = f.getText(charset)
s = s.replace('</application>', "${dropboxActivity}</application>")
f.write(s, charset)
}
}
}
}
}
}
if (project.file('google-services.json').exists()) {
apply plugin: 'com.google.gms.google-services'
}

View File

@@ -0,0 +1,5 @@
-include proguard-rules.pro
# Disabling obfuscation is useful if you collect stack traces from production crashes
# (unless you are using a system that supports de-obfuscate the stack traces).
-dontobfuscate

View File

@@ -0,0 +1,6 @@
-include proguard-rules.pro
# Crashlytics
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception

89
android/app/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,89 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# React Native
# Keep our interfaces so they can be used by other ProGuard rules.
# See http://sourceforge.net/p/proguard/bugs/466/
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.proguard.annotations.DoNotStrip *;
@com.facebook.common.internal.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
void set*(***);
*** get*();
}
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
-dontwarn com.facebook.react.**
# TextLayoutBuilder uses a non-public Android constructor within StaticLayout.
# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details.
-dontwarn android.text.StaticLayout
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
# okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
# FastImage
-keep public class com.dylanvann.fastimage.** {*;}
# We added the following when we switched minifyEnabled on. Probably because we
# ran the app and hit problems...
-keep class com.facebook.react.bridge.CatalystInstanceImpl { *; }
-keep class com.facebook.react.bridge.ExecutorToken { *; }
-keep class com.facebook.react.bridge.JavaScriptExecutor { *; }
-keep class com.facebook.react.bridge.ModuleRegistryHolder { *; }
-keep class com.facebook.react.bridge.ReadableType { *; }
-keep class com.facebook.react.bridge.queue.NativeRunnable { *; }
-keep class com.facebook.react.devsupport.** { *; }
-keep class org.webrtc.** { *; }
-dontwarn com.facebook.react.devsupport.**
-dontwarn com.google.appengine.**
-dontwarn com.squareup.okhttp.**
-dontwarn javax.servlet.**
# ^^^ We added the above when we switched minifyEnabled on.

View File

@@ -0,0 +1,41 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="org.jitsi.meet">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".MainApplication"
android:theme="@style/AppTheme">
<activity
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:name=".MainActivity"
android:resizeableActivity="true"
android:supportsPictureInPicture="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:host="beta.hipchat.me" android:scheme="https" />
<data android:host="beta.meet.jit.si" android:scheme="https" />
<data android:host="chaos.hipchat.me" android:scheme="https" />
<data android:host="enso.me" android:scheme="https" />
<data android:host="hipchat.me" android:scheme="https" />
<data android:host="meet.jit.si" android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="org.jitsi.meet" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@@ -0,0 +1,230 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet;
import android.os.Bundle;
import android.util.Log;
import org.jitsi.meet.sdk.JitsiMeetActivity;
import org.jitsi.meet.sdk.JitsiMeetView;
import org.jitsi.meet.sdk.JitsiMeetViewListener;
import org.jitsi.meet.sdk.invite.AddPeopleController;
import org.jitsi.meet.sdk.invite.AddPeopleControllerListener;
import org.jitsi.meet.sdk.invite.InviteController;
import org.jitsi.meet.sdk.invite.InviteControllerListener;
import com.facebook.react.bridge.UiThreadUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* The one and only {@link Activity} that the Jitsi Meet app needs. The
* {@code Activity} is launched in {@code singleTask} mode, so it will be
* created upon application initialization and there will be a single instance
* of it. Further attempts at launching the application once it was already
* launched will result in {@link Activity#onNewIntent(Intent)} being called.
*
* This {@code Activity} extends {@link JitsiMeetActivity} to keep the React
* Native CLI working, since the latter always tries to launch an
* {@code Activity} named {@code MainActivity} when doing
* {@code react-native run-android}.
*/
public class MainActivity extends JitsiMeetActivity {
/**
* The query to perform through {@link AddPeopleController} when the
* {@code InviteButton} is tapped in order to exercise the public API of the
* feature invite. If {@code null}, the {@code InviteButton} will not be
* rendered.
*/
private static final String ADD_PEOPLE_CONTROLLER_QUERY = null;
@Override
protected JitsiMeetView initializeView() {
JitsiMeetView view = super.initializeView();
// XXX In order to increase (1) awareness of API breakages and (2) API
// coverage, utilize JitsiMeetViewListener in the Debug configuration of
// the app.
if (BuildConfig.DEBUG && view != null) {
view.setListener(new JitsiMeetViewListener() {
private void on(String name, Map<String, Object> data) {
UiThreadUtil.assertOnUiThread();
// Log with the tag "ReactNative" in order to have the log
// visible in react-native log-android as well.
Log.d(
"ReactNative",
JitsiMeetViewListener.class.getSimpleName() + " "
+ name + " "
+ data);
}
@Override
public void onConferenceFailed(Map<String, Object> data) {
on("CONFERENCE_FAILED", data);
}
@Override
public void onConferenceJoined(Map<String, Object> data) {
on("CONFERENCE_JOINED", data);
}
@Override
public void onConferenceLeft(Map<String, Object> data) {
on("CONFERENCE_LEFT", data);
}
@Override
public void onConferenceWillJoin(Map<String, Object> data) {
on("CONFERENCE_WILL_JOIN", data);
}
@Override
public void onConferenceWillLeave(Map<String, Object> data) {
on("CONFERENCE_WILL_LEAVE", data);
}
@Override
public void onLoadConfigError(Map<String, Object> data) {
on("LOAD_CONFIG_ERROR", data);
}
});
// inviteController
final InviteController inviteController
= view.getInviteController();
inviteController.setListener(new InviteControllerListener() {
public void beginAddPeople(
AddPeopleController addPeopleController) {
onInviteControllerBeginAddPeople(
inviteController,
addPeopleController);
}
});
inviteController.setAddPeopleEnabled(
ADD_PEOPLE_CONTROLLER_QUERY != null);
inviteController.setDialOutEnabled(
inviteController.isAddPeopleEnabled());
}
return view;
}
private void onAddPeopleControllerInviteSettled(
AddPeopleController addPeopleController,
List<Map<String, Object>> failedInvitees) {
UiThreadUtil.assertOnUiThread();
// XXX Explicitly invoke endAddPeople on addPeopleController; otherwise,
// it is going to be memory-leaked in the associated InviteController
// and no subsequent InviteButton clicks/taps will be delivered.
// Technically, endAddPeople will automatically be invoked if there are
// no failedInviteees i.e. the invite succeeeded for all specified
// invitees.
addPeopleController.endAddPeople();
}
private void onAddPeopleControllerReceivedResults(
AddPeopleController addPeopleController,
List<Map<String, Object>> results,
String query) {
UiThreadUtil.assertOnUiThread();
int size = results.size();
if (size > 0) {
// Exercise AddPeopleController's inviteById implementation.
List<String> ids = new ArrayList<>(size);
for (Map<String, Object> result : results) {
Object id = result.get("id");
if (id != null) {
ids.add(id.toString());
}
}
addPeopleController.inviteById(ids);
return;
}
// XXX Explicitly invoke endAddPeople on addPeopleController; otherwise,
// it is going to be memory-leaked in the associated InviteController
// and no subsequent InviteButton clicks/taps will be delivered.
addPeopleController.endAddPeople();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// As this is the Jitsi Meet app (i.e. not the Jitsi Meet SDK), we do
// want to enable some options.
// The welcome page defaults to disabled in the SDK at the time of this
// writing but it is clearer to be explicit about what we want anyway.
setWelcomePageEnabled(true);
super.onCreate(savedInstanceState);
}
private void onInviteControllerBeginAddPeople(
InviteController inviteController,
AddPeopleController addPeopleController) {
UiThreadUtil.assertOnUiThread();
// Log with the tag "ReactNative" in order to have the log visible in
// react-native log-android as well.
Log.d(
"ReactNative",
InviteControllerListener.class.getSimpleName() + ".beginAddPeople");
String query = ADD_PEOPLE_CONTROLLER_QUERY;
if (query != null
&& (inviteController.isAddPeopleEnabled()
|| inviteController.isDialOutEnabled())) {
addPeopleController.setListener(new AddPeopleControllerListener() {
public void onInviteSettled(
AddPeopleController addPeopleController,
List<Map<String, Object>> failedInvitees) {
onAddPeopleControllerInviteSettled(
addPeopleController,
failedInvitees);
}
public void onReceivedResults(
AddPeopleController addPeopleController,
List<Map<String, Object>> results,
String query) {
onAddPeopleControllerReceivedResults(
addPeopleController,
results, query);
}
});
addPeopleController.performQuery(query);
} else {
// XXX Explicitly invoke endAddPeople on addPeopleController;
// otherwise, it is going to be memory-leaked in the associated
// InviteController and no subsequent InviteButton clicks/taps will
// be delivered.
addPeopleController.endAddPeople();
}
}
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet;
import android.app.Application;
import com.squareup.leakcanary.LeakCanary;
/**
* Simple {@link Application} for hooking up LeakCanary:
* https://github.com/square/leakcanary
*/
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
if (!LeakCanary.isInAnalyzerProcess(this)) {
LeakCanary.install(this);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -0,0 +1,3 @@
<resources>
<string name="app_name">Jitsi Meet</string>
</resources>

View File

@@ -0,0 +1,6 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
</resources>

187
android/build.gradle Normal file
View File

@@ -0,0 +1,187 @@
// Top-level build file where you can add configuration options common to all
// sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'com.google.gms:google-services:3.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files.
}
}
allprojects {
repositories {
maven { url "https://maven.google.com" }
google()
jcenter()
maven { url "$rootDir/../node_modules/jsc-android/dist" }
// React Native (JS, Obj-C sources, Android binaries) is installed from
// npm.
maven { url "$rootDir/../node_modules/react-native/android" }
}
// Make sure we use the react-native version in node_modules and not the one
// published in jcenter / elsewhere.
configurations.all {
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'com.facebook.react'
&& details.requested.name == 'react-native') {
def file = new File("$rootDir/../node_modules/react-native/package.json")
def version = new groovy.json.JsonSlurper().parseText(file.text).version
details.useVersion version
}
if (details.requested.group == 'org.webkit'
&& details.requested.name == 'android-jsc') {
def file = new File("$rootDir/../node_modules/jsc-android/package.json")
def version = new groovy.json.JsonSlurper().parseText(file.text).version
details.useVersion "r${version.tokenize('.')[0]}"
}
}
}
}
// Third-party react-native modules which Jitsi Meet SDK for Android depends
// on and which are not available in third-party Maven repositories need to
// be deployed in a Maven repository of ours.
//
if (project.name.startsWith('react-native-')) {
apply plugin: 'maven-publish'
publishing {
publications {}
repositories {
maven { url "file:${rootProject.projectDir}/../../../jitsi/jitsi-maven-repository/releases" }
}
}
}
afterEvaluate { project ->
if (project.name.startsWith('react-native-')) {
def npmManifest = project.file('../package.json')
def json = new groovy.json.JsonSlurper().parseText(npmManifest.text)
// React Native modules have an npm peer dependency on react-native,
// they do not have an npm dependency on it. Further below though we
// choose a react-native version (range) when we represent them as
// Maven artifacts. Effectively, we are forking the projects by not
// complying with the full range of their npm peer dependency and,
// consequently, we should qualify their version.
def versionQualifier = '-jitsi-1'
if ('react-native-webrtc'.equals(project.name))
versionQualifier = '-jitsi-1'
project.version = "${json.version}${versionQualifier}"
project.android {
compileSdkVersion rootProject.ext.compileSdkVersion
if (rootProject.ext.has('buildToolsVersion')) {
buildToolsVersion rootProject.ext.buildToolsVersion
}
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
}
}
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.source
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
failOnError false
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.source
}
publishing.publications {
aarArchive(MavenPublication) {
groupId rootProject.ext.moduleGroupId
artifactId project.name
version project.version
artifact("${project.buildDir}/outputs/aar/${project.name}-release.aar") {
extension "aar"
}
artifact(androidSourcesJar)
artifact(androidJavadocsJar)
pom.withXml {
def pomXml = asNode()
pomXml.appendNode('name', project.name)
pomXml.appendNode('description', json.description)
pomXml.appendNode('url', json.homepage)
if (json.license) {
def license = pomXml.appendNode('licenses').appendNode('license')
license.appendNode('name', json.license)
license.appendNode('distribution', 'repo')
}
def dependencies = pomXml.appendNode('dependencies')
configurations.getByName('releaseCompileClasspath').getResolvedConfiguration().getFirstLevelModuleDependencies().each {
def artifactId = it.moduleName
def version = it.moduleVersion
// React Native signals breaking changes by
// increasing the minor version number. So the
// (third-party) React Native modules we utilize can
// depend not on a specific react-native release but
// a wider range.
if (artifactId.equals('react-native')) {
def versionNumber = VersionNumber.parse(version)
version = "${versionNumber.major}.${versionNumber.minor}"
}
def dependency = dependencies.appendNode('dependency')
dependency.appendNode('groupId', it.moduleGroup)
dependency.appendNode('artifactId', artifactId)
dependency.appendNode('version', version)
}
}
}
}
}
}
}
ext {
buildToolsVersion = "27.0.3"
compileSdkVersion = 27
minSdkVersion = 21
targetSdkVersion = 26
supportLibVersion = "27.1.1"
// The Maven artifact groupdId of the third-party react-native modules which
// Jitsi Meet SDK for Android depends on and which are not available in
// third-party Maven repositories so we have to deploy to a Maven repository
// of ours.
moduleGroupId = 'com.facebook.react'
}
// Force the version of the Android build tools we have chosen on all
// subprojects. The forcing was introduced for react-native and the third-party
// modules that we utilize such as react-native-background-timer.
subprojects { subproject ->
afterEvaluate{
if ((subproject.plugins.hasPlugin('android')
|| subproject.plugins.hasPlugin('android-library'))
&& rootProject.ext.has('buildToolsVersion')) {
android {
buildToolsVersion rootProject.ext.buildToolsVersion
}
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}

20
android/gradle.properties Normal file
View File

@@ -0,0 +1,20 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
version=1

Binary file not shown.

View File

@@ -0,0 +1,6 @@
#Fri Sep 08 10:42:14 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

172
android/gradlew vendored Executable file
View File

@@ -0,0 +1,172 @@
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

84
android/gradlew.bat vendored Normal file
View File

@@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

8
android/keystores/BUCK Normal file
View File

@@ -0,0 +1,8 @@
keystore(
name = "debug",
properties = "debug.keystore.properties",
store = "debug.keystore",
visibility = [
"PUBLIC",
],
)

View File

@@ -0,0 +1,4 @@
key.store=debug.keystore
key.alias=androiddebugkey
key.store.password=android
key.alias.password=android

201
android/sdk/build.gradle Normal file
View File

@@ -0,0 +1,201 @@
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
}
buildTypes {
debug {}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "com.android.support:support-v4:${rootProject.ext.supportLibVersion}"
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation 'com.dropbox.core:dropbox-core-sdk:3.0.8'
api 'com.facebook.react:react-native:+'
implementation project(':react-native-background-timer')
implementation project(':react-native-calendar-events')
implementation(project(':react-native-fast-image')) {
exclude group: 'com.android.support'
}
implementation(project(":react-native-google-signin")) {
exclude group: 'com.google.android.gms'
exclude group: 'com.android.support'
}
implementation project(':react-native-immersive')
implementation project(':react-native-keep-awake')
implementation project(':react-native-linear-gradient')
implementation project(':react-native-locale-detector')
implementation project(':react-native-sound')
implementation project(':react-native-vector-icons')
implementation project(':react-native-webrtc')
testImplementation 'junit:junit:4.12'
}
// Here we bundle all assets, resources and React files. We cannot use the
// react.gradle file provided by react-native because it's designed to be used
// in an application (it taps into applicationVariants, but the SDK is a library
// so we need libraryVariants instead).
android.libraryVariants.all { def variant ->
// Create variant and target names
def targetName = variant.name.capitalize()
def targetPath = variant.dirName
// React js bundle directories
def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")
def jsBundleFile = file("$jsBundleDir/index.android.bundle")
def currentBundleTask = tasks.create(
name: "bundle${targetName}JsAndAssets",
type: Exec) {
group = "react"
description = "bundle JS and assets for ${targetName}."
// Create dirs if they are not there (e.g. the "clean" task just ran)
doFirst {
jsBundleDir.deleteDir()
jsBundleDir.mkdirs()
resourcesDir.deleteDir()
resourcesDir.mkdirs()
}
// Set up inputs and outputs so gradle can cache the result
def reactRoot = file("${projectDir}/../../")
inputs.files fileTree(dir: reactRoot, excludes: ["android/**", "ios/**"])
outputs.dir jsBundleDir
outputs.dir resourcesDir
// Set up the call to the react-native cli
workingDir reactRoot
// Set up dev mode
def devEnabled = !targetName.toLowerCase().contains("release")
// Run the bundler
commandLine(
"node",
"node_modules/react-native/local-cli/cli.js",
"bundle",
"--platform", "android",
"--dev", "${devEnabled}",
"--reset-cache",
"--entry-file", "index.android.js",
"--bundle-output", jsBundleFile,
"--assets-dest", resourcesDir)
// Disable bundling on dev builds
enabled !devEnabled
}
currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)
variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
variant.mergeResources.dependsOn(currentBundleTask)
def assetsDir = variant.mergeAssets.outputDir
variant.mergeAssets.doLast {
// Bundle fonts
//
copy {
from("${projectDir}/../../fonts/jitsi.ttf")
into("${assetsDir}/fonts")
}
// Bundle sounds
//
copy {
from("${projectDir}/../../sounds/joined.wav")
from("${projectDir}/../../sounds/left.wav")
from("${projectDir}/../../sounds/outgoingRinging.wav")
from("${projectDir}/../../sounds/outgoingStart.wav")
from("${projectDir}/../../sounds/recordingOn.mp3")
from("${projectDir}/../../sounds/recordingOff.mp3")
from("${projectDir}/../../sounds/rejected.wav")
into("${assetsDir}/sounds")
}
// Copy React assets
//
if (currentBundleTask.enabled) {
copy {
from(jsBundleDir)
into(assetsDir)
}
}
}
variant.mergeResources.doLast {
// Copy React resources
//
if (currentBundleTask.enabled) {
copy {
from(resourcesDir)
into(variant.mergeResources.outputDir)
}
}
}
}
publishing {
publications {
aarArchive(MavenPublication) {
groupId 'org.jitsi.react'
artifactId 'jitsi-meet-sdk'
version '1.9.0'
artifact("${project.buildDir}/outputs/aar/${project.name}-release.aar") {
extension "aar"
}
pom.withXml {
def pomXml = asNode()
pomXml.appendNode('name', 'jitsi-meet-sdk')
pomXml.appendNode('description', 'Jitsi Meet SDK for Android')
def dependencies = pomXml.appendNode('dependencies')
configurations.getByName('releaseCompileClasspath').getResolvedConfiguration().getFirstLevelModuleDependencies().each {
// The (third-party) React Native modules that we depend on
// are in source code form and do not have groupId. That is
// why we have a dedicated groupId for them. But the other
// dependencies come through Maven and, consequently, have
// groupId.
def groupId = it.moduleGroup
def artifactId = it.moduleName
if (artifactId.startsWith('react-native-')
&& groupId.equals('jitsi-meet')) {
groupId = rootProject.ext.moduleGroupId
}
def dependency = dependencies.appendNode('dependency')
dependency.appendNode('groupId', groupId)
dependency.appendNode('artifactId', artifactId)
dependency.appendNode('version', it.moduleVersion)
}
}
}
}
repositories {
maven { url "file:${rootProject.projectDir}/../../../jitsi/jitsi-maven-repository/releases" }
}
}

25
android/sdk/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,25 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/scorretge/Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,30 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="org.jitsi.meet.sdk">
<!-- XXX ACCESS_NETWORK_STATE is required by WebRTC. -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<activity
android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>

View File

@@ -0,0 +1,52 @@
/**
* Adapted from
* {@link https://github.com/Aleksandern/react-native-android-settings-library}.
*/
package org.jitsi.meet.sdk;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.Settings;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
class AndroidSettingsModule
extends ReactContextBaseJavaModule {
public AndroidSettingsModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "AndroidSettings";
}
@ReactMethod
public void open(Promise promise) {
Context context = getReactApplicationContext();
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(
Uri.fromParts("package", context.getPackageName(), null));
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
// Some devices may give an error here.
// https://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DETAILS_SETTINGS
promise.reject(e);
return;
}
promise.resolve(null);
}
}

View File

@@ -0,0 +1,79 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import java.util.HashMap;
import java.util.Map;
class AppInfoModule
extends ReactContextBaseJavaModule {
public AppInfoModule(ReactApplicationContext reactContext) {
super(reactContext);
}
/**
* Gets a {@code Map} of constants this module exports to JS. Supports JSON
* types.
*
* @return a {@link Map} of constants this module exports to JS
*/
@Override
public Map<String, Object> getConstants() {
Context context = getReactApplicationContext();
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo;
PackageInfo packageInfo;
try {
String packageName = context.getPackageName();
applicationInfo
= packageManager.getApplicationInfo(packageName, 0);
packageInfo = packageManager.getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
applicationInfo = null;
packageInfo = null;
}
Map<String, Object> constants = new HashMap<>();
constants.put(
"name",
applicationInfo == null
? ""
: packageManager.getApplicationLabel(applicationInfo));
constants.put(
"version",
packageInfo == null ? "" : packageInfo.versionName);
return constants;
}
@Override
public String getName() {
return "AppInfo";
}
}

View File

@@ -0,0 +1,607 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.os.Build;
import android.util.Log;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Module implementing a simple API to select the appropriate audio device for a
* conference call.
*
* Audio calls should use {@code AudioModeModule.AUDIO_CALL}, which uses the
* builtin earpiece, wired headset or bluetooth headset. The builtin earpiece is
* the default audio device.
*
* Video calls should should use {@code AudioModeModule.VIDEO_CALL}, which uses
* the builtin speaker, earpiece, wired headset or bluetooth headset. The
* builtin speaker is the default audio device.
*
* Before a call has started and after it has ended the
* {@code AudioModeModule.DEFAULT} mode should be used.
*/
class AudioModeModule
extends ReactContextBaseJavaModule
implements AudioManager.OnAudioFocusChangeListener {
/**
* Constants representing the audio mode.
* - DEFAULT: Used before and after every call. It represents the default
* audio routing scheme.
* - AUDIO_CALL: Used for audio only calls. It will use the earpiece by
* default, unless a wired or Bluetooth headset is connected.
* - VIDEO_CALL: Used for video calls. It will use the speaker by default,
* unless a wired or Bluetooth headset is connected.
*/
private static final int DEFAULT = 0;
private static final int AUDIO_CALL = 1;
private static final int VIDEO_CALL = 2;
/**
* Constant defining the action for plugging in a headset. This is used on
* our device detection system for API < 23.
*/
private static final String ACTION_HEADSET_PLUG
= (Build.VERSION.SDK_INT >= 21)
? AudioManager.ACTION_HEADSET_PLUG
: Intent.ACTION_HEADSET_PLUG;
/**
* Constant defining a USB headset. Only available on API level >= 26.
* The value of: AudioDeviceInfo.TYPE_USB_HEADSET
*/
private static final int TYPE_USB_HEADSET = 22;
/**
* The name of {@code AudioModeModule} to be used in the React Native
* bridge.
*/
private static final String MODULE_NAME = "AudioMode";
/**
* The {@code Log} tag {@code AudioModeModule} is to log messages with.
*/
static final String TAG = MODULE_NAME;
/**
* Indicator that we have lost audio focus.
*/
private boolean audioFocusLost = false;
/**
* {@link AudioManager} instance used to interact with the Android audio
* subsystem.
*/
private final AudioManager audioManager;
/**
* {@link BluetoothHeadsetMonitor} for detecting Bluetooth device changes in
* old (< M) Android versions.
*/
private BluetoothHeadsetMonitor bluetoothHeadsetMonitor;
/**
* {@link ExecutorService} for running all audio operations on a dedicated
* thread.
*/
private static final ExecutorService executor
= Executors.newSingleThreadExecutor();
/**
* {@link Runnable} for running audio device detection the main thread.
* This is only used on Android >= M.
*/
private final Runnable onAudioDeviceChangeRunner = new Runnable() {
@TargetApi(Build.VERSION_CODES.M)
@Override
public void run() {
Set<String> devices = new HashSet<>();
AudioDeviceInfo[] deviceInfos
= audioManager.getDevices(AudioManager.GET_DEVICES_ALL);
for (AudioDeviceInfo info: deviceInfos) {
switch (info.getType()) {
case AudioDeviceInfo.TYPE_BLUETOOTH_SCO:
devices.add(DEVICE_BLUETOOTH);
break;
case AudioDeviceInfo.TYPE_BUILTIN_EARPIECE:
devices.add(DEVICE_EARPIECE);
break;
case AudioDeviceInfo.TYPE_BUILTIN_SPEAKER:
devices.add(DEVICE_SPEAKER);
break;
case AudioDeviceInfo.TYPE_WIRED_HEADPHONES:
case AudioDeviceInfo.TYPE_WIRED_HEADSET:
case TYPE_USB_HEADSET:
devices.add(DEVICE_HEADPHONES);
break;
}
}
availableDevices = devices;
Log.d(TAG, "Available audio devices: " +
availableDevices.toString());
// Reset user selection
userSelectedDevice = null;
if (mode != -1) {
updateAudioRoute(mode);
}
}
};
/**
* {@link Runnable} for running update operation on the main thread.
*/
private final Runnable updateAudioRouteRunner
= new Runnable() {
@Override
public void run() {
if (mode != -1) {
updateAudioRoute(mode);
}
}
};
/**
* Audio mode currently in use.
*/
private int mode = -1;
/**
* Audio device types.
*/
private static final String DEVICE_BLUETOOTH = "BLUETOOTH";
private static final String DEVICE_EARPIECE = "EARPIECE";
private static final String DEVICE_HEADPHONES = "HEADPHONES";
private static final String DEVICE_SPEAKER = "SPEAKER";
/**
* List of currently available audio devices.
*/
private Set<String> availableDevices = new HashSet<>();
/**
* Currently selected device.
*/
private String selectedDevice;
/**
* User selected device. When null the default is used depending on the
* mode.
*/
private String userSelectedDevice;
/**
* Initializes a new module instance. There shall be a single instance of
* this module throughout the lifetime of the application.
*
* @param reactContext the {@link ReactApplicationContext} where this module
* is created.
*/
public AudioModeModule(ReactApplicationContext reactContext) {
super(reactContext);
audioManager
= (AudioManager)
reactContext.getSystemService(Context.AUDIO_SERVICE);
// Setup runtime device change detection.
setupAudioRouteChangeDetection();
// Do an initial detection on Android >= M.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
runInAudioThread(onAudioDeviceChangeRunner);
} else {
// On Android < M, detect if we have an earpiece.
PackageManager pm = reactContext.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
availableDevices.add(DEVICE_EARPIECE);
}
// Always assume there is a speaker.
availableDevices.add(DEVICE_SPEAKER);
}
}
/**
* Gets a mapping with the constants this module is exporting.
*
* @return a {@link Map} mapping the constants to be exported with their
* values.
*/
@Override
public Map<String, Object> getConstants() {
Map<String, Object> constants = new HashMap<>();
constants.put("AUDIO_CALL", AUDIO_CALL);
constants.put("DEFAULT", DEFAULT);
constants.put("VIDEO_CALL", VIDEO_CALL);
return constants;
}
/**
* Gets the list of available audio device categories, i.e. 'bluetooth',
* 'earpiece ', 'speaker', 'headphones'.
*
* @param promise a {@link Promise} which will be resolved with an object
* containing a 'devices' key with a list of devices, plus a
* 'selected' key with the selected one.
*/
@ReactMethod
public void getAudioDevices(final Promise promise) {
runInAudioThread(new Runnable() {
@Override
public void run() {
WritableMap map = Arguments.createMap();
map.putString("selected", selectedDevice);
WritableArray devices = Arguments.createArray();
for (String device : availableDevices) {
if (mode == VIDEO_CALL && device.equals(DEVICE_EARPIECE)) {
// Skip earpiece when in video call mode.
continue;
}
devices.pushString(device);
}
map.putArray("devices", devices);
promise.resolve(map);
}
});
}
/**
* Gets the name for this module to be used in the React Native bridge.
*
* @return a string with the module name.
*/
@Override
public String getName() {
return MODULE_NAME;
}
/**
* Helper method to trigger an audio route update when devices change. It
* makes sure the operation is performed on the main thread.
*
* Only used on Android >= M.
*/
void onAudioDeviceChange() {
runInAudioThread(onAudioDeviceChangeRunner);
}
/**
* Helper method to trigger an audio route update when Bluetooth devices are
* connected / disconnected.
*
* Only used on Android < M. Runs on the main thread.
*/
void onBluetoothDeviceChange() {
if (bluetoothHeadsetMonitor != null && bluetoothHeadsetMonitor.isHeadsetAvailable()) {
availableDevices.add(DEVICE_BLUETOOTH);
} else {
availableDevices.remove(DEVICE_BLUETOOTH);
}
if (mode != -1) {
updateAudioRoute(mode);
}
}
/**
* Helper method to trigger an audio route update when a headset is plugged
* or unplugged.
*
* Only used on Android < M.
*/
void onHeadsetDeviceChange() {
runInAudioThread(new Runnable() {
@Override
public void run() {
// XXX: isWiredHeadsetOn is not deprecated when used just for
// knowing if there is a wired headset connected, regardless of
// audio being routed to it.
//noinspection deprecation
if (audioManager.isWiredHeadsetOn()) {
availableDevices.add(DEVICE_HEADPHONES);
} else {
availableDevices.remove(DEVICE_HEADPHONES);
}
if (mode != -1) {
updateAudioRoute(mode);
}
}
});
}
/**
* {@link AudioManager.OnAudioFocusChangeListener} interface method. Called
* when the audio focus of the system is updated.
*
* @param focusChange - The type of focus change.
*/
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN: {
Log.d(TAG, "Audio focus gained");
// Some other application potentially stole our audio focus
// temporarily. Restore our mode.
if (audioFocusLost) {
updateAudioRoute(mode);
}
audioFocusLost = false;
break;
}
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: {
Log.d(TAG, "Audio focus lost");
audioFocusLost = true;
break;
}
}
}
/**
* Helper function to run operations on a dedicated thread.
* @param runnable
*/
public void runInAudioThread(Runnable runnable) {
executor.execute(runnable);
}
/**
* Sets the user selected audio device as the active audio device.
*
* @param device the desired device which will become active.
*/
@ReactMethod
public void setAudioDevice(final String device) {
runInAudioThread(new Runnable() {
@Override
public void run() {
if (!availableDevices.contains(device)) {
Log.d(TAG, "Audio device not available: " + device);
userSelectedDevice = null;
return;
}
if (mode != -1) {
Log.d(TAG, "User selected device set to: " + device);
userSelectedDevice = device;
updateAudioRoute(mode);
}
}
});
}
/**
* Helper method to set the output route to a Bluetooth device.
*
* @param enabled true if Bluetooth should use used, false otherwise.
*/
private void setBluetoothAudioRoute(boolean enabled) {
if (enabled) {
audioManager.startBluetoothSco();
audioManager.setBluetoothScoOn(true);
} else {
audioManager.setBluetoothScoOn(false);
audioManager.stopBluetoothSco();
}
}
/**
* Public method to set the current audio mode.
*
* @param mode the desired audio mode.
* @param promise a {@link Promise} which will be resolved if the audio mode
* could be updated successfully, and it will be rejected otherwise.
*/
@ReactMethod
public void setMode(final int mode, final Promise promise) {
if (mode != DEFAULT && mode != AUDIO_CALL && mode != VIDEO_CALL) {
promise.reject("setMode", "Invalid audio mode " + mode);
return;
}
Runnable r = new Runnable() {
@Override
public void run() {
boolean success;
try {
success = updateAudioRoute(mode);
} catch (Throwable e) {
success = false;
Log.e(
TAG,
"Failed to update audio route for mode: " + mode,
e);
}
if (success) {
AudioModeModule.this.mode = mode;
promise.resolve(null);
} else {
promise.reject(
"setMode",
"Failed to set audio mode to " + mode);
}
}
};
runInAudioThread(r);
}
/**
* Setup the audio route change detection mechanism. We use the
* {@link android.media.AudioDeviceCallback} API on Android >= 23 only.
*/
private void setupAudioRouteChangeDetection() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setupAudioRouteChangeDetectionM();
} else {
setupAudioRouteChangeDetectionPreM();
}
}
/**
* Audio route change detection mechanism for Android API >= 23.
*/
@TargetApi(Build.VERSION_CODES.M)
private void setupAudioRouteChangeDetectionM() {
android.media.AudioDeviceCallback audioDeviceCallback =
new android.media.AudioDeviceCallback() {
@Override
public void onAudioDevicesAdded(
AudioDeviceInfo[] addedDevices) {
Log.d(TAG, "Audio devices added");
onAudioDeviceChange();
}
@Override
public void onAudioDevicesRemoved(
AudioDeviceInfo[] removedDevices) {
Log.d(TAG, "Audio devices removed");
onAudioDeviceChange();
}
};
audioManager.registerAudioDeviceCallback(audioDeviceCallback, null);
}
/**
* Audio route change detection mechanism for Android API < 23.
*/
private void setupAudioRouteChangeDetectionPreM() {
Context context = getReactApplicationContext();
// Detect changes in wired headset connections.
IntentFilter wiredHeadSetFilter = new IntentFilter(ACTION_HEADSET_PLUG);
BroadcastReceiver wiredHeadsetReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Wired headset added / removed");
onHeadsetDeviceChange();
}
};
context.registerReceiver(wiredHeadsetReceiver, wiredHeadSetFilter);
// Detect Bluetooth device changes.
bluetoothHeadsetMonitor = new BluetoothHeadsetMonitor(this, context);
}
/**
* Updates the audio route for the given mode.
*
* @param mode the audio mode to be used when computing the audio route.
* @return {@code true} if the audio route was updated successfully;
* {@code false}, otherwise.
*/
private boolean updateAudioRoute(int mode) {
Log.d(TAG, "Update audio route for mode: " + mode);
if (mode == DEFAULT) {
audioFocusLost = false;
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.abandonAudioFocus(this);
audioManager.setSpeakerphoneOn(false);
setBluetoothAudioRoute(false);
selectedDevice = null;
userSelectedDevice = null;
return true;
}
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setMicrophoneMute(false);
if (audioManager.requestAudioFocus(
this,
AudioManager.STREAM_VOICE_CALL,
AudioManager.AUDIOFOCUS_GAIN)
== AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
Log.d(TAG, "Audio focus request failed");
return false;
}
boolean bluetoothAvailable = availableDevices.contains(DEVICE_BLUETOOTH);
boolean earpieceAvailable = availableDevices.contains(DEVICE_EARPIECE);
boolean headsetAvailable = availableDevices.contains(DEVICE_HEADPHONES);
// Pick the desired device based on what's available and the mode.
String audioDevice;
if (bluetoothAvailable) {
audioDevice = DEVICE_BLUETOOTH;
} else if (headsetAvailable) {
audioDevice = DEVICE_HEADPHONES;
} else if (mode == AUDIO_CALL && earpieceAvailable) {
audioDevice = DEVICE_EARPIECE;
} else {
audioDevice = DEVICE_SPEAKER;
}
// Consider the user's selection
if (userSelectedDevice != null
&& availableDevices.contains(userSelectedDevice)) {
audioDevice = userSelectedDevice;
}
// If the previously selected device and the current default one
// match, do nothing.
if (selectedDevice != null && selectedDevice.equals(audioDevice)) {
return true;
}
selectedDevice = audioDevice;
Log.d(TAG, "Selected audio device: " + audioDevice);
// Turn bluetooth on / off
setBluetoothAudioRoute(audioDevice.equals(DEVICE_BLUETOOTH));
// Turn speaker on / off
audioManager.setSpeakerphoneOn(audioDevice.equals(DEVICE_SPEAKER));
return true;
}
}

View File

@@ -0,0 +1,231 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.FrameLayout;
import com.facebook.react.ReactRootView;
import com.facebook.react.bridge.ReadableMap;
import com.rnimmersive.RNImmersiveModule;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.WeakHashMap;
/**
* Base class for all views which are backed by a React Native view.
*/
public abstract class BaseReactView<ListenerT>
extends FrameLayout {
/**
* Background color used by {@code BaseReactView} and the React Native root
* view.
*/
protected static int BACKGROUND_COLOR = 0xFF111111;
/**
* The collection of all existing {@code BaseReactView}s. Used to find the
* {@code BaseReactView} when delivering events coming from
* {@link ExternalAPIModule}.
*/
static final Set<BaseReactView> views
= Collections.newSetFromMap(new WeakHashMap<BaseReactView, Boolean>());
/**
* Finds a {@code BaseReactView} which matches a specific external API
* scope.
*
* @param externalAPIScope - The external API scope associated with the
* {@code BaseReactView} to find.
* @return The {@code BaseReactView}, if any, associated with the specified
* {@code externalAPIScope}; otherwise, {@code null}.
*/
public static BaseReactView findViewByExternalAPIScope(
String externalAPIScope) {
synchronized (views) {
for (BaseReactView view : views) {
if (view.externalAPIScope.equals(externalAPIScope)) {
return view;
}
}
}
return null;
}
/**
* The unique identifier of this {@code BaseReactView} within the process
* for the purposes of {@link ExternalAPIModule}. The name scope was
* inspired by postis which we use on Web for the similar purposes of the
* iframe-based external API.
*/
protected final String externalAPIScope;
/**
* The listener (e.g. {@link JitsiMeetViewListener}) instance for reporting
* events occurring in Jitsi Meet.
*/
private ListenerT listener;
/**
* React Native root view.
*/
private ReactRootView reactRootView;
public BaseReactView(@NonNull Context context) {
super(context);
setBackgroundColor(BACKGROUND_COLOR);
ReactInstanceManagerHolder.initReactInstanceManager(
((Activity) context).getApplication());
// Hook this BaseReactView into ExternalAPI.
externalAPIScope = UUID.randomUUID().toString();
synchronized (views) {
views.add(this);
}
}
/**
* Creates the {@code ReactRootView} for the given app name with the given
* props. Once created it's set as the view of this {@code FrameLayout}.
*
* @param appName - The name of the "app" (in React Native terms) to load.
* @param props - The React Component props to pass to the app.
*/
public void createReactRootView(String appName, @Nullable Bundle props) {
if (props == null) {
props = new Bundle();
}
props.putString("externalAPIScope", externalAPIScope);
if (reactRootView == null) {
reactRootView = new ReactRootView(getContext());
reactRootView.startReactApplication(
ReactInstanceManagerHolder.getReactInstanceManager(),
appName,
props);
reactRootView.setBackgroundColor(BACKGROUND_COLOR);
addView(reactRootView);
} else {
reactRootView.setAppProperties(props);
}
}
/**
* Releases the React resources (specifically the {@link ReactRootView})
* associated with this view.
*
* MUST be called when the {@link Activity} holding this view is destroyed,
* typically in the {@code onDestroy} method.
*/
public void dispose() {
if (reactRootView != null) {
removeView(reactRootView);
reactRootView.unmountReactApplication();
reactRootView = null;
}
}
/**
* Gets the listener set on this {@code BaseReactView}.
*
* @return The listener set on this {@code BaseReactView}.
*/
public ListenerT getListener() {
return listener;
}
/**
* Abstract method called by {@link ExternalAPIModule} when an event is
* received for this view.
*
* @param name - The name of the event.
* @param data - The details of the event associated with/specific to the
* specified {@code name}.
*/
public abstract void onExternalAPIEvent(String name, ReadableMap data);
protected void onExternalAPIEvent(
Map<String, Method> listenerMethods,
String name, ReadableMap data) {
ListenerT listener = getListener();
if (listener != null) {
ListenerUtils.runListenerMethod(
listener, listenerMethods, name, data);
}
}
/**
* Called when the window containing this view gains or loses focus.
*
* @param hasFocus If the window of this view now has focus, {@code true};
* otherwise, {@code false}.
*/
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
// https://github.com/mockingbot/react-native-immersive#restore-immersive-state
// FIXME The singleton pattern employed by RNImmersiveModule is not
// advisable because a react-native mobule is consumable only after its
// BaseJavaModule#initialize() has completed and here we have no
// knowledge of whether the precondition is really met.
RNImmersiveModule immersive = RNImmersiveModule.getInstance();
if (hasFocus && immersive != null) {
try {
immersive.emitImmersiveStateChangeEvent();
} catch (RuntimeException re) {
// FIXME I don't know how to check myself whether
// BaseJavaModule#initialize() has been invoked and thus
// RNImmersiveModule is consumable. A safe workaround is to
// swallow the failure because the whole full-screen/immersive
// functionality is brittle anyway, akin to the icing on the
// cake, and has been working without onWindowFocusChanged for a
// very long time.
Log.e(
"RNImmersiveModule",
"emitImmersiveStateChangeEvent() failed!",
re);
}
}
}
/**
* Sets a specific listener on this {@code BaseReactView}.
*
* @param listener The listener to set on this {@code BaseReactView}.
*/
public void setListener(ListenerT listener) {
this.listener = listener;
}
}

View File

@@ -0,0 +1,197 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.util.Log;
/**
* Helper class to detect and handle Bluetooth device changes. It monitors
* Bluetooth headsets being connected / disconnected and notifies the module
* about device changes when this occurs.
*/
class BluetoothHeadsetMonitor {
/**
* {@link AudioModeModule} where this monitor reports.
*/
private final AudioModeModule audioModeModule;
/**
* The {@link Context} in which {@link #audioModeModule} executes.
*/
private final Context context;
/**
* Reference to a proxy object which allows us to query connected devices.
*/
private BluetoothHeadset headset;
/**
* Flag indicating if there are any Bluetooth headset devices currently
* available.
*/
private boolean headsetAvailable = false;
/**
* Helper for running Bluetooth operations on the main thread.
*/
private final Runnable updateDevicesRunnable
= new Runnable() {
@Override
public void run() {
headsetAvailable
= (headset != null)
&& !headset.getConnectedDevices().isEmpty();
audioModeModule.onBluetoothDeviceChange();
}
};
public BluetoothHeadsetMonitor(
AudioModeModule audioModeModule,
Context context) {
this.audioModeModule = audioModeModule;
this.context = context;
AudioManager audioManager
= (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (!audioManager.isBluetoothScoAvailableOffCall()) {
Log.w(AudioModeModule.TAG, "Bluetooth SCO is not available");
return;
}
if (getBluetoothHeadsetProfileProxy()) {
registerBluetoothReceiver();
// Initial detection.
updateDevices();
}
}
private boolean getBluetoothHeadsetProfileProxy() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null) {
Log.w(AudioModeModule.TAG, "Device doesn't support Bluetooth");
return false;
}
// XXX: The profile listener listens for system services of the given
// type being available to the application. That is, if our Bluetooth
// adapter has the "headset" profile.
BluetoothProfile.ServiceListener listener
= new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(
int profile,
BluetoothProfile proxy) {
if (profile == BluetoothProfile.HEADSET) {
headset = (BluetoothHeadset) proxy;
updateDevices();
}
}
@Override
public void onServiceDisconnected(int profile) {
// The logic is the same as the logic of onServiceConnected.
onServiceConnected(profile, /* proxy */ null);
}
};
return
adapter.getProfileProxy(
context,
listener,
BluetoothProfile.HEADSET);
}
/**
* Returns the current headset availability.
*
* @return {@code true} if there is a Bluetooth headset connected;
* {@code false}, otherwise.
*/
public boolean isHeadsetAvailable() {
return headsetAvailable;
}
private void onBluetoothReceiverReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)) {
// XXX: This action will be fired when a Bluetooth headset is
// connected or disconnected to the system. This is not related to
// audio routing.
int state = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, -99);
switch (state) {
case BluetoothHeadset.STATE_CONNECTED:
case BluetoothHeadset.STATE_DISCONNECTED:
Log.d(
AudioModeModule.TAG,
"BT headset connection state changed: " + state);
updateDevices();
break;
}
} else if (action.equals(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)) {
// XXX: This action will be fired when the connection established
// with a Bluetooth headset (called a SCO connection) changes state.
// When the SCO connection is active we route audio to it.
int state
= intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -99);
switch (state) {
case AudioManager.SCO_AUDIO_STATE_CONNECTED:
case AudioManager.SCO_AUDIO_STATE_DISCONNECTED:
Log.d(
AudioModeModule.TAG,
"BT SCO connection state changed: " + state);
updateDevices();
break;
}
}
}
private void registerBluetoothReceiver() {
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onBluetoothReceiverReceive(context, intent);
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);
filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
context.registerReceiver(receiver, filter);
}
/**
* Detects if there are new devices connected / disconnected and fires the
* {@link AudioModeModule#onAudioDeviceChange()} callback.
*/
private void updateDevices() {
audioModeModule.runInAudioThread(updateDevicesRunnable);
}
}

View File

@@ -0,0 +1,65 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.app.Activity;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
/**
* Defines the default behavior of {@code JitsiMeetActivity} and
* {@code JitsiMeetView} upon invoking the back button if no
* {@code JitsiMeetView} handles the invocation. For example, a
* {@code JitsiMeetView} may (1) handle the invocation of the back button
* during a conference by leaving the conference and (2) not handle the
* invocation when not in a conference.
*/
public class DefaultHardwareBackBtnHandlerImpl
implements DefaultHardwareBackBtnHandler {
/**
* The {@code Activity} to which the default handling of the back button
* is being provided by this instance.
*/
private final Activity activity;
/**
* Initializes a new {@code DefaultHardwareBackBtnHandlerImpl} instance to
* provide the default handling of the back button to a specific
* {@code Activity}.
*
* @param activity the {@code Activity} to which the new instance is to
* provide the default behavior of the back button
*/
public DefaultHardwareBackBtnHandlerImpl(Activity activity) {
this.activity = activity;
}
/**
* {@inheritDoc}
*
* Finishes the associated {@code Activity}.
*/
@Override
public void invokeDefaultOnBackPressed() {
// Technically, we'd like to invoke Activity#onBackPressed().
// Practically, it's not possible. Fortunately, the documentation of
// Activity#onBackPressed() specifies that "[t]he default implementation
// simply finishes the current activity,"
activity.finish();
}
}

View File

@@ -0,0 +1,79 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.util.Log;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
/**
* Module implementing an API for sending events from JavaScript to native code.
*/
class ExternalAPIModule
extends ReactContextBaseJavaModule {
private static final String TAG = ExternalAPIModule.class.getSimpleName();
/**
* Initializes a new module instance. There shall be a single instance of
* this module throughout the lifetime of the app.
*
* @param reactContext the {@link ReactApplicationContext} where this module
* is created.
*/
public ExternalAPIModule(ReactApplicationContext reactContext) {
super(reactContext);
}
/**
* Gets the name of this module to be used in the React Native bridge.
*
* @return The name of this module to be used in the React Native bridge.
*/
@Override
public String getName() {
return "ExternalAPI";
}
/**
* Dispatches an event that occurred on the JavaScript side of the SDK to
* the specified {@link BaseReactView}'s listener.
*
* @param name The name of the event.
* @param data The details/specifics of the event to send determined
* by/associated with the specified {@code name}.
* @param scope
*/
@ReactMethod
public void sendEvent(String name, ReadableMap data, String scope) {
// The JavaScript App needs to provide uniquely identifying information
// to the native ExternalAPI module so that the latter may match the
// former to the native BaseReactView which hosts it.
BaseReactView view = BaseReactView.findViewByExternalAPIScope(scope);
if (view != null) {
try {
view.onExternalAPIEvent(name, data);
} catch(Exception e) {
Log.e(TAG, "onExternalAPIEvent: error sending event", e);
}
}
}
}

View File

@@ -0,0 +1,345 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.modules.core.PermissionListener;
import java.net.URL;
/**
* Base Activity for applications integrating Jitsi Meet at a higher level. It
* contains all the required wiring between the {@code JitsiMeetView} and
* the Activity lifecycle methods already implemented.
*
* In this activity we use a single {@code JitsiMeetView} instance. This
* instance gives us access to a view which displays the welcome page and the
* conference itself. All lifetime methods associated with this Activity are
* hooked to the React Native subsystem via proxy calls through the
* {@code JitsiMeetView} static methods.
*/
public class JitsiMeetActivity
extends AppCompatActivity implements JitsiMeetActivityInterface {
/**
* The request code identifying requests for the permission to draw on top
* of other apps. The value must be 16-bit and is arbitrarily chosen here.
*/
private static final int OVERLAY_PERMISSION_REQUEST_CODE
= (int) (Math.random() * Short.MAX_VALUE);
/**
* The default behavior of this {@code JitsiMeetActivity} upon invoking the
* back button if {@link #view} does not handle the invocation.
*/
private DefaultHardwareBackBtnHandler defaultBackButtonImpl;
/**
* The default base {@code URL} used to join a conference when a partial URL
* (e.g. a room name only) is specified. The value is used only while
* {@link #view} equals {@code null}.
*/
private URL defaultURL;
/**
* Instance of the {@link JitsiMeetView} which this activity will display.
*/
private JitsiMeetView view;
/**
* Whether Picture-in-Picture is enabled. The value is used only while
* {@link #view} equals {@code null}.
*/
private Boolean pictureInPictureEnabled;
/**
* Whether the Welcome page is enabled. The value is used only while
* {@link #view} equals {@code null}.
*/
private boolean welcomePageEnabled;
private boolean canRequestOverlayPermission() {
return
BuildConfig.DEBUG
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& getApplicationInfo().targetSdkVersion
>= Build.VERSION_CODES.M;
}
/**
*
* @see JitsiMeetView#getDefaultURL()
*/
public URL getDefaultURL() {
return view == null ? defaultURL : view.getDefaultURL();
}
/**
* Initializes the {@link #view} of this {@code JitsiMeetActivity} with a
* new {@link JitsiMeetView} instance.
*/
private void initializeContentView() {
JitsiMeetView view = initializeView();
if (view != null) {
// XXX Allow extenders who override initializeView() to configure
// the view before the first loadURL(). Probably works around a
// problem related to ReactRootView#setAppProperties().
view.loadURL(null);
this.view = view;
setContentView(this.view);
}
}
/**
* Initializes a new {@link JitsiMeetView} instance.
*
* @return a new {@code JitsiMeetView} instance.
*/
protected JitsiMeetView initializeView() {
JitsiMeetView view = new JitsiMeetView(this);
// XXX Before calling JitsiMeetView#loadURL, make sure to call whatever
// is documented to need such an order in order to take effect:
view.setDefaultURL(defaultURL);
if (pictureInPictureEnabled != null) {
view.setPictureInPictureEnabled(
pictureInPictureEnabled.booleanValue());
}
view.setWelcomePageEnabled(welcomePageEnabled);
return view;
}
/**
*
* @see JitsiMeetView#isPictureInPictureEnabled()
*/
public boolean isPictureInPictureEnabled() {
return
view == null
? pictureInPictureEnabled
: view.isPictureInPictureEnabled();
}
/**
*
* @see JitsiMeetView#isWelcomePageEnabled()
*/
public boolean isWelcomePageEnabled() {
return view == null ? welcomePageEnabled : view.isWelcomePageEnabled();
}
/**
* Loads the given URL and displays the conference. If the specified URL is
* null, the welcome page is displayed instead.
*
* @param url The conference URL.
*/
public void loadURL(@Nullable URL url) {
view.loadURL(url);
}
@Override
protected void onActivityResult(
int requestCode,
int resultCode,
Intent data) {
if (requestCode == OVERLAY_PERMISSION_REQUEST_CODE
&& canRequestOverlayPermission()) {
if (Settings.canDrawOverlays(this)) {
initializeContentView();
}
return;
}
ReactActivityLifecycleCallbacks.onActivityResult(
this, requestCode, resultCode, data);
}
@Override
public void onBackPressed() {
if (!ReactActivityLifecycleCallbacks.onBackPressed()) {
// JitsiMeetView didn't handle the invocation of the back button.
// Generally, an Activity extender would very likely want to invoke
// Activity#onBackPressed(). For the sake of consistency with
// JitsiMeetView and within the Jitsi Meet SDK for Android though,
// JitsiMeetActivity does what JitsiMeetView would've done if it
// were able to handle the invocation.
if (defaultBackButtonImpl == null) {
super.onBackPressed();
} else {
defaultBackButtonImpl.invokeDefaultOnBackPressed();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// In Debug builds React needs permission to write over other apps in
// order to display the warning and error overlays.
if (canRequestOverlayPermission() && !Settings.canDrawOverlays(this)) {
Intent intent
= new Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, OVERLAY_PERMISSION_REQUEST_CODE);
return;
}
initializeContentView();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (view != null) {
view.dispose();
view = null;
}
ReactActivityLifecycleCallbacks.onHostDestroy(this);
}
// ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
ReactInstanceManager reactInstanceManager;
if (!super.onKeyUp(keyCode, event)
&& BuildConfig.DEBUG
&& (reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager())
!= null
&& keyCode == KeyEvent.KEYCODE_MENU) {
reactInstanceManager.showDevOptionsDialog();
return true;
}
return false;
}
@Override
public void onNewIntent(Intent intent) {
// XXX At least twice we received bug reports about malfunctioning
// loadURL in the Jitsi Meet SDK while the Jitsi Meet app seemed to
// functioning as expected in our testing. But that was to be expected
// because the app does not exercise loadURL. In order to increase the
// test coverage of loadURL, channel deep linking through loadURL.
Uri uri;
if (Intent.ACTION_VIEW.equals(intent.getAction())
&& (uri = intent.getData()) != null
&& JitsiMeetView.loadURLStringInViews(uri.toString())) {
return;
}
ReactActivityLifecycleCallbacks.onNewIntent(intent);
}
// https://developer.android.com/reference/android/support/v4/app/ActivityCompat.OnRequestPermissionsResultCallback
@Override
public void onRequestPermissionsResult(
final int requestCode,
final String[] permissions,
final int[] grantResults) {
ReactActivityLifecycleCallbacks.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onResume() {
super.onResume();
defaultBackButtonImpl = new DefaultHardwareBackBtnHandlerImpl(this);
ReactActivityLifecycleCallbacks.onHostResume(this, defaultBackButtonImpl);
}
@Override
public void onStop() {
super.onStop();
ReactActivityLifecycleCallbacks.onHostPause(this);
defaultBackButtonImpl = null;
}
@Override
protected void onUserLeaveHint() {
if (view != null) {
view.enterPictureInPicture();
}
}
/**
* Implementation of the {@code PermissionAwareActivity} interface.
*/
@Override
public void requestPermissions(String[] permissions, int requestCode, PermissionListener listener) {
ReactActivityLifecycleCallbacks.requestPermissions(this, permissions, requestCode, listener);
}
/**
*
* @see JitsiMeetView#setDefaultURL(URL)
*/
public void setDefaultURL(URL defaultURL) {
if (view == null) {
this.defaultURL = defaultURL;
} else {
view.setDefaultURL(defaultURL);
}
}
/**
*
* @see JitsiMeetView#setPictureInPictureEnabled(boolean)
*/
public void setPictureInPictureEnabled(boolean pictureInPictureEnabled) {
if (view == null) {
this.pictureInPictureEnabled
= Boolean.valueOf(pictureInPictureEnabled);
} else {
view.setPictureInPictureEnabled(pictureInPictureEnabled);
}
}
/**
*
* @see JitsiMeetView#setWelcomePageEnabled(boolean)
*/
public void setWelcomePageEnabled(boolean welcomePageEnabled) {
if (view == null) {
this.welcomePageEnabled = welcomePageEnabled;
} else {
view.setWelcomePageEnabled(welcomePageEnabled);
}
}
}

View File

@@ -0,0 +1,15 @@
package org.jitsi.meet.sdk;
import android.support.v4.app.ActivityCompat;
import com.facebook.react.modules.core.PermissionAwareActivity;
/**
* This interface serves as the umbrella interface that applications not using
* {@code JitsiMeetActivity} must implement in order to ensure full
* functionality.
*/
public interface JitsiMeetActivityInterface
extends ActivityCompat.OnRequestPermissionsResultCallback,
PermissionAwareActivity {
}

View File

@@ -0,0 +1,387 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import com.facebook.react.bridge.ReadableMap;
import org.jitsi.meet.sdk.invite.InviteController;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.Map;
public class JitsiMeetView
extends BaseReactView<JitsiMeetViewListener> {
/**
* The {@code Method}s of {@code JitsiMeetViewListener} by event name i.e.
* redux action types.
*/
private static final Map<String, Method> LISTENER_METHODS
= ListenerUtils.mapListenerMethods(JitsiMeetViewListener.class);
/**
* The {@link Log} tag which identifies the source of the log messages of
* {@code JitsiMeetView}.
*/
private static final String TAG = JitsiMeetView.class.getSimpleName();
/**
* Loads a specific URL {@code String} in all existing
* {@code JitsiMeetView}s.
*
* @param urlString he URL {@code String} to load in all existing
* {@code JitsiMeetView}s.
* @return If the specified {@code urlString} was submitted for loading in
* at least one {@code JitsiMeetView}, then {@code true}; otherwise,
* {@code false}.
*/
public static boolean loadURLStringInViews(String urlString) {
boolean loaded = false;
synchronized (views) {
for (BaseReactView view : views) {
if (view instanceof JitsiMeetView) {
((JitsiMeetView)view).loadURLString(urlString);
loaded = true;
}
}
}
return loaded;
}
/**
* The default base {@code URL} used to join a conference when a partial URL
* (e.g. a room name only) is specified to {@link #loadURLString(String)} or
* {@link #loadURLObject(Bundle)}.
*/
private URL defaultURL;
/**
* The entry point into the invite feature of Jitsi Meet. The Java
* counterpart of the JavaScript {@code InviteButton}.
*/
private final InviteController inviteController;
/**
* Whether Picture-in-Picture is enabled. If {@code null}, defaults to
* {@code true} iff the Android platform supports Picture-in-Picture
* natively.
*/
private Boolean pictureInPictureEnabled;
/**
* The URL of the current conference.
*/
// XXX Currently, one thread writes and one thread reads, so it should be
// fine to have this field volatile without additional synchronization.
private volatile String url;
/**
* Whether the Welcome page is enabled.
*/
private boolean welcomePageEnabled;
public JitsiMeetView(@NonNull Context context) {
super(context);
// The entry point into the invite feature of Jitsi Meet. The Java
// counterpart of the JavaScript InviteButton.
inviteController = new InviteController(externalAPIScope);
}
/**
* Enters Picture-In-Picture mode, if possible. This method is designed to
* be called from the {@code Activity.onUserLeaveHint} method.
*
* This is currently not mandatory, but if used will provide automatic
* handling of the picture in picture mode when user minimizes the app. It
* will be probably the most useful in case the app is using the welcome
* page.
*/
public void enterPictureInPicture() {
if (isPictureInPictureEnabled() && getURL() != null) {
PictureInPictureModule pipModule
= ReactInstanceManagerHolder.getNativeModule(
PictureInPictureModule.class);
if (pipModule != null) {
try {
pipModule.enterPictureInPicture();
} catch (RuntimeException re) {
Log.e(TAG, "onUserLeaveHint: failed to enter PiP mode", re);
}
}
}
}
/**
* Gets the default base {@code URL} used to join a conference when a
* partial URL (e.g. a room name only) is specified to
* {@link #loadURLString(String)} or {@link #loadURLObject(Bundle)}. If not
* set or if set to {@code null}, the default built in JavaScript is used:
* https://meet.jit.si
*
* @return The default base {@code URL} or {@code null}.
*/
public URL getDefaultURL() {
return defaultURL;
}
/**
* Gets the {@link InviteController} which represents the entry point into
* the invite feature of Jitsi Meet and is the Java counterpart of the
* JavaScript {@code InviteButton}.
*
* @return the {@link InviteController} which represents the entry point
* into the invite feature of Jitsi Meet and is the Java counterpart of the
* JavaScript {@code InviteButton}
*/
public InviteController getInviteController() {
return inviteController;
}
/**
* Gets the URL of the current conference.
*
* XXX The method is meant for internal purposes only at the time of this
* writing because there is no equivalent API on iOS.
*
* @return the URL {@code String} of the current conference if any;
* otherwise, {@code null}.
*/
String getURL() {
return url;
}
/**
* Gets whether Picture-in-Picture is enabled. Picture-in-Picture is
* natively supported on Android API >= 26 (Oreo), so it should not be
* enabled on older platform versions.
*
* @return If Picture-in-Picture is enabled, {@code true}; {@code false},
* otherwise.
*/
public boolean isPictureInPictureEnabled() {
return
PictureInPictureModule.isPictureInPictureSupported()
&& (pictureInPictureEnabled == null
|| pictureInPictureEnabled);
}
/**
* Gets whether the Welcome page is enabled. If {@code true}, the Welcome
* page is rendered when this {@code JitsiMeetView} is not at a URL
* identifying a Jitsi Meet conference/room.
*
* @return {@code true} if the Welcome page is enabled; otherwise,
* {@code false}.
*/
public boolean isWelcomePageEnabled() {
return welcomePageEnabled;
}
/**
* Loads a specific {@link URL} which may identify a conference to join. If
* the specified {@code URL} is {@code null} and the Welcome page is
* enabled, the Welcome page is displayed instead.
*
* @param url The {@code URL} to load which may identify a conference to
* join.
*/
public void loadURL(@Nullable URL url) {
loadURLString(url == null ? null : url.toString());
}
/**
* Loads a specific URL which may identify a conference to join. The URL is
* specified in the form of a {@link Bundle} of properties which (1)
* internally are sufficient to construct a URL {@code String} while (2)
* abstracting the specifics of constructing the URL away from API
* clients/consumers. If the specified URL is {@code null} and the Welcome
* page is enabled, the Welcome page is displayed instead.
*
* @param urlObject The URL to load which may identify a conference to join.
*/
public void loadURLObject(@Nullable Bundle urlObject) {
Bundle props = new Bundle();
// defaultURL
if (defaultURL != null) {
props.putString("defaultURL", defaultURL.toString());
}
// inviteController
InviteController inviteController = getInviteController();
if (inviteController != null) {
props.putBoolean(
"addPeopleEnabled",
inviteController.isAddPeopleEnabled());
props.putBoolean(
"dialOutEnabled",
inviteController.isDialOutEnabled());
}
// pictureInPictureEnabled
props.putBoolean(
"pictureInPictureEnabled",
isPictureInPictureEnabled());
// url
if (urlObject != null) {
props.putBundle("url", urlObject);
}
// welcomePageEnabled
props.putBoolean("welcomePageEnabled", welcomePageEnabled);
// XXX The method loadURLObject: is supposed to be imperative i.e.
// a second invocation with one and the same URL is expected to join
// the respective conference again if the first invocation was followed
// by leaving the conference. However, React and, respectively,
// appProperties/initialProperties are declarative expressions i.e. one
// and the same URL will not trigger componentWillReceiveProps in the
// JavaScript source code. The workaround implemented bellow introduces
// imperativeness in React Component props by defining a unique value
// per loadURLObject: invocation.
props.putLong("timestamp", System.currentTimeMillis());
createReactRootView("App", props);
}
/**
* Loads a specific URL {@link String} which may identify a conference to
* join. If the specified URL {@code String} is {@code null} and the Welcome
* page is enabled, the Welcome page is displayed instead.
*
* @param urlString The URL {@code String} to load which may identify a
* conference to join.
*/
public void loadURLString(@Nullable String urlString) {
Bundle urlObject;
if (urlString == null) {
urlObject = null;
} else {
urlObject = new Bundle();
urlObject.putString("url", urlString);
}
loadURLObject(urlObject);
}
/**
* The internal processing for the URL of the current conference set on the
* associated {@link JitsiMeetView}.
*
* @param eventName the name of the external API event to be processed
* @param eventData the details/specifics of the event to process determined
* by/associated with the specified {@code eventName}.
*/
private void maybeSetViewURL(String eventName, ReadableMap eventData) {
switch(eventName) {
case "CONFERENCE_WILL_JOIN":
setURL(eventData.getString("url"));
break;
case "CONFERENCE_FAILED":
case "CONFERENCE_WILL_LEAVE":
case "LOAD_CONFIG_ERROR":
String url = eventData.getString("url");
if (url != null && url.equals(getURL())) {
setURL(null);
}
break;
}
}
/**
* Handler for {@link ExternalAPIModule} events.
*
* @param name The name of the event.
* @param data The details/specifics of the event to send determined
* by/associated with the specified {@code name}.
*/
@Override
public void onExternalAPIEvent(String name, ReadableMap data) {
// XXX The JitsiMeetView property URL was introduced in order to address
// an exception in the Picture-in-Picture functionality which arose
// because of delays related to bridging between JavaScript and Java. To
// reduce these delays do not wait for the call to be transferred to the
// UI thread.
maybeSetViewURL(name, data);
onExternalAPIEvent(LISTENER_METHODS, name, data);
}
/**
* Sets the default base {@code URL} used to join a conference when a
* partial URL (e.g. a room name only) is specified to
* {@link #loadURLString(String)} or {@link #loadURLObject(Bundle)}. Must be
* called before {@link #loadURL(URL)} for it to take effect.
*
* @param defaultURL The {@code URL} to be set as the default base URL.
* @see #getDefaultURL()
*/
public void setDefaultURL(URL defaultURL) {
this.defaultURL = defaultURL;
}
/**
* Sets whether Picture-in-Picture is enabled. Because Picture-in-Picture is
* natively supported only since certain platform versions, specifying
* {@code true} will have no effect on unsupported platform versions.
*
* @param pictureInPictureEnabled To enable Picture-in-Picture,
* {@code true}; otherwise, {@code false}.
*/
public void setPictureInPictureEnabled(boolean pictureInPictureEnabled) {
this.pictureInPictureEnabled = pictureInPictureEnabled;
}
/**
* Sets the URL of the current conference.
*
* XXX The method is meant for internal purposes only. It does not
* {@code loadURL}, it merely remembers the specified URL.
*
* @param url the URL {@code String} which to be set as the URL of the
* current conference.
*/
void setURL(String url) {
this.url = url;
}
/**
* Sets whether the Welcome page is enabled. Must be called before
* {@link #loadURL(URL)} for it to take effect.
*
* @param welcomePageEnabled {@code true} to enable the Welcome page;
* otherwise, {@code false}.
*/
public void setWelcomePageEnabled(boolean welcomePageEnabled) {
this.welcomePageEnabled = welcomePageEnabled;
}
}

View File

@@ -0,0 +1,51 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import java.util.Map;
/**
* Implements {@link JitsiMeetViewListener} so apps don't have to add stubs for
* all methods in the interface if they are only interested in some.
*/
public abstract class JitsiMeetViewAdapter
implements JitsiMeetViewListener {
@Override
public void onConferenceFailed(Map<String, Object> data) {
}
@Override
public void onConferenceJoined(Map<String, Object> data) {
}
@Override
public void onConferenceLeft(Map<String, Object> data) {
}
@Override
public void onConferenceWillJoin(Map<String, Object> data) {
}
@Override
public void onConferenceWillLeave(Map<String, Object> data) {
}
@Override
public void onLoadConfigError(Map<String, Object> data) {
}
}

View File

@@ -0,0 +1,71 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import java.util.Map;
/**
* Interface for listening to events coming from Jitsi Meet.
*/
public interface JitsiMeetViewListener {
/**
* Called when joining a conference fails or an ongoing conference is
* interrupted due to a failure.
*
* @param data Map with an "error" key describing the problem, and a "url"
* key with the conference URL.
*/
void onConferenceFailed(Map<String, Object> data);
/**
* Called when a conference was joined.
*
* @param data Map with a "url" key with the conference URL.
*/
void onConferenceJoined(Map<String, Object> data);
/**
* Called when the conference was left, typically after hanging up.
*
* @param data Map with a "url" key with the conference URL.
*/
void onConferenceLeft(Map<String, Object> data);
/**
* Called before the conference is joined.
*
* @param data Map with a "url" key with the conference URL.
*/
void onConferenceWillJoin(Map<String, Object> data);
/**
* Called before the conference is left.
*
* @param data Map with a "url" key with the conference URL.
*/
void onConferenceWillLeave(Map<String, Object> data);
/**
* Called when loading the main configuration file from the Jitsi Meet
* deployment fails.
*
* @param data Map with an "error" key with the error and a "url" key with
* the conference URL which necessitated the loading of the configuration
* file.
*/
void onLoadConfigError(Map<String, Object> data);
}

View File

@@ -0,0 +1,166 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableMapKeySetIterator;
import com.facebook.react.bridge.UiThreadUtil;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
/**
* Utility methods for helping with transforming {@link ExternalAPIModule}
* events into listener methods. Used with descendants of {@link BaseReactView}.
*/
public final class ListenerUtils {
/**
* Extracts the methods defined in a listener and creates a mapping of this
* form: event name -> method.
*
* @param listener - The listener whose methods we want to slurp.
* @return A mapping with event names - methods.
*/
public static Map<String, Method> mapListenerMethods(Class listener) {
Map<String, Method> methods = new HashMap<>();
// Figure out the mapping between the listener methods
// and the events i.e. redux action types.
Pattern onPattern = Pattern.compile("^on[A-Z]+");
Pattern camelcasePattern = Pattern.compile("([a-z0-9]+)([A-Z0-9]+)");
for (Method method : listener.getDeclaredMethods()) {
// * The method must be public (because it is declared by an
// interface).
// * The method must be/return void.
if (!Modifier.isPublic(method.getModifiers())
|| !Void.TYPE.equals(method.getReturnType())) {
continue;
}
// * The method name must start with "on" followed by a
// capital/uppercase letter (in agreement with the camelcase
// coding style customary to Java in general and the projects of
// the Jitsi community in particular).
String name = method.getName();
if (!onPattern.matcher(name).find()) {
continue;
}
// * The method must accept/have exactly 1 parameter of a type
// assignable from HashMap.
Class<?>[] parameterTypes = method.getParameterTypes();
if (parameterTypes.length != 1
|| !parameterTypes[0].isAssignableFrom(HashMap.class)) {
continue;
}
// Convert the method name to an event name.
name
= camelcasePattern.matcher(name.substring(2))
.replaceAll("$1_$2")
.toUpperCase(Locale.ROOT);
methods.put(name, method);
}
return methods;
}
/**
* Executes the right listener method for the given event.
* NOTE: This function will run asynchronously on the UI thread.
*
* @param listener - The listener on which the method will be called.
* @param listenerMethods - Mapping with event names and the matching
* methods.
* @param eventName - Name of the event.
* @param eventData - Data associated with the event.
*/
public static void runListenerMethod(
final Object listener,
final Map<String, Method> listenerMethods,
final String eventName,
final ReadableMap eventData) {
// Make sure listener methods are invoked on the UI thread. It
// was requested by SDK consumers.
if (UiThreadUtil.isOnUiThread()) {
runListenerMethodOnUiThread(
listener, listenerMethods, eventName, eventData);
} else {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
runListenerMethodOnUiThread(
listener, listenerMethods, eventName, eventData);
}
});
}
}
/**
* Helper companion for {@link ListenerUtils#runListenerMethod} which runs
* in the UI thread.
*/
private static void runListenerMethodOnUiThread(
Object listener,
Map<String, Method> listenerMethods,
String eventName,
ReadableMap eventData) {
UiThreadUtil.assertOnUiThread();
Method method = listenerMethods.get(eventName);
if (method != null) {
try {
method.invoke(listener, toHashMap(eventData));
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}
/**
* Initializes a new {@code HashMap} instance with the key-value
* associations of a specific {@code ReadableMap}.
*
* @param readableMap the {@code ReadableMap} specifying the key-value
* associations with which the new {@code HashMap} instance is to be
* initialized.
* @return a new {@code HashMap} instance initialized with the key-value
* associations of the specified {@code readableMap}.
*/
private static HashMap<String, Object> toHashMap(ReadableMap readableMap) {
HashMap<String, Object> hashMap = new HashMap<>();
for (ReadableMapKeySetIterator i = readableMap.keySetIterator();
i.hasNextKey();) {
String key = i.nextKey();
hashMap.put(key, readableMap.getString(key));
}
return hashMap;
}
}

View File

@@ -0,0 +1,104 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.app.Activity;
import android.app.PictureInPictureParams;
import android.os.Build;
import android.util.Log;
import android.util.Rational;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
class PictureInPictureModule
extends ReactContextBaseJavaModule {
private final static String TAG = "PictureInPicture";
static boolean isPictureInPictureSupported() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
}
public PictureInPictureModule(ReactApplicationContext reactContext) {
super(reactContext);
}
/**
* Enters Picture-in-Picture (mode) for the current {@link Activity}.
* Supported on Android API >= 26 (Oreo) only.
*
* @throws IllegalStateException if {@link #isPictureInPictureSupported()}
* returns {@code false} or if {@link #getCurrentActivity()} returns
* {@code null}.
* @throws RuntimeException if
* {@link Activity#enterPictureInPictureMode(PictureInPictureParams)} fails.
* That method can also throw a {@link RuntimeException} in various cases,
* including when the activity is not visible (paused or stopped), if the
* screen is locked or if the user has an activity pinned.
*/
public void enterPictureInPicture() {
if (!isPictureInPictureSupported()) {
throw new IllegalStateException("Picture-in-Picture not supported");
}
Activity currentActivity = getCurrentActivity();
if (currentActivity == null) {
throw new IllegalStateException("No current Activity!");
}
Log.d(TAG, "Entering Picture-in-Picture");
PictureInPictureParams.Builder builder
= new PictureInPictureParams.Builder()
.setAspectRatio(new Rational(1, 1));
// https://developer.android.com/reference/android/app/Activity.html#enterPictureInPictureMode(android.app.PictureInPictureParams)
//
// 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.
if (!currentActivity.enterPictureInPictureMode(builder.build())) {
throw new RuntimeException("Failed to enter Picture-in-Picture");
}
}
/**
* Enters Picture-in-Picture (mode) for the current {@link Activity}.
* Supported on Android API >= 26 (Oreo) only.
*
* @param promise a {@code Promise} which will resolve with a {@code null}
* value upon success, and an {@link Exception} otherwise.
*/
@ReactMethod
public void enterPictureInPicture(Promise promise) {
try {
enterPictureInPicture();
promise.resolve(null);
} catch (RuntimeException re) {
promise.reject(re);
}
}
@Override
public String getName() {
return TAG;
}
}

View File

@@ -0,0 +1,120 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.content.Context;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.UiThreadUtil;
/**
* Module implementing a simple API to enable a proximity sensor-controlled
* wake lock. When the lock is held, if the proximity sensor detects a nearby
* object it will dim the screen and disable touch controls. The functionality
* is used with the conference audio-only mode.
*/
class ProximityModule
extends ReactContextBaseJavaModule {
/**
* The name of {@code ProximityModule} to be used in the React Native
* bridge.
*/
private static final String MODULE_NAME = "Proximity";
/**
* This type of wake lock (the one activated by the proximity sensor) has
* been available for a while, but the constant was only exported in API
* level 21 (Android Marshmallow) so make no assumptions and use its value
* directly.
*
* TODO: Remove when we bump the API level to 21.
*/
private static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32;
/**
* {@link WakeLock} instance.
*/
private final WakeLock wakeLock;
/**
* Initializes a new module instance. There shall be a single instance of
* this module throughout the lifetime of the application.
*
* @param reactContext The {@link ReactApplicationContext} where this module
* is created.
*/
public ProximityModule(ReactApplicationContext reactContext) {
super(reactContext);
WakeLock wakeLock;
PowerManager powerManager
= (PowerManager)
reactContext.getSystemService(Context.POWER_SERVICE);
try {
wakeLock
= powerManager.newWakeLock(
PROXIMITY_SCREEN_OFF_WAKE_LOCK,
MODULE_NAME);
} catch (Throwable ignored) {
wakeLock = null;
}
this.wakeLock = wakeLock;
}
/**
* Gets the name of this module to be used in the React Native bridge.
*
* @return The name of this module to be used in the React Native bridge.
*/
@Override
public String getName() {
return MODULE_NAME;
}
/**
* Acquires / releases the proximity sensor wake lock.
*
* @param enabled {@code true} to enable the proximity sensor; otherwise,
* {@code false}.
*/
@ReactMethod
public void setEnabled(final boolean enabled) {
if (wakeLock == null) {
return;
}
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
if (enabled) {
if (!wakeLock.isHeld()) {
wakeLock.acquire();
}
} else if (wakeLock.isHeld()) {
wakeLock.release();
}
}
});
}
}

View File

@@ -0,0 +1,195 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import com.calendarevents.CalendarEventsPackage;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.Callback;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.modules.core.PermissionListener;
/**
* Helper class to encapsulate the work which needs to be done on
* {@link Activity} lifecycle methods in order for the React side to be aware of
* it.
*/
public class ReactActivityLifecycleCallbacks {
/**
* {@link Activity} lifecycle method which should be called from
* {@code Activity#onActivityResult} so we are notified about results of external intents
* started/finished.
*
* @param activity {@code Activity} activity from where the result comes from.
* @param requestCode {@code int} code of the request.
* @param resultCode {@code int} code of the result.
* @param data {@code Intent} the intent of the activity.
*/
public static void onActivityResult(
Activity activity,
int requestCode,
int resultCode,
Intent data) {
ReactInstanceManager reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager != null) {
reactInstanceManager.onActivityResult(activity, requestCode, resultCode, data);
}
}
/**
* Needed for making sure this class working with the "PermissionsAndroid"
* React Native module.
*/
private static PermissionListener permissionListener;
private static Callback permissionsCallback;
/**
* {@link Activity} lifecycle method which should be called from
* {@link Activity#onBackPressed} so we can do the required internal
* processing.
*
* @return {@code true} if the back-press was processed; {@code false},
* otherwise. If {@code false}, the application should call the
* {@code super}'s implementation.
*/
public static boolean onBackPressed() {
ReactInstanceManager reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager == null) {
return false;
} else {
reactInstanceManager.onBackPressed();
return true;
}
}
/**
* {@link Activity} lifecycle method which should be called from
* {@code Activity#onDestroy} so we can do the required internal
* processing.
*
* @param activity {@code Activity} being destroyed.
*/
public static void onHostDestroy(Activity activity) {
ReactInstanceManager reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager != null) {
reactInstanceManager.onHostDestroy(activity);
}
}
/**
* {@link Activity} lifecycle method which should be called from
* {@code Activity#onPause} so we can do the required internal processing.
*
* @param activity {@code Activity} being paused.
*/
public static void onHostPause(Activity activity) {
ReactInstanceManager reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager != null) {
reactInstanceManager.onHostPause(activity);
}
}
/**
* {@link Activity} lifecycle method which should be called from
* {@code Activity#onResume} so we can do the required internal processing.
*
* @param activity {@code Activity} being resumed.
*/
public static void onHostResume(Activity activity) {
onHostResume(activity, new DefaultHardwareBackBtnHandlerImpl(activity));
}
/**
* {@link Activity} lifecycle method which should be called from
* {@code Activity#onResume} so we can do the required internal processing.
*
* @param activity {@code Activity} being resumed.
* @param defaultBackButtonImpl a {@link DefaultHardwareBackBtnHandler} to
* handle invoking the back button if no {@link BaseReactView} handles it.
*/
public static void onHostResume(
Activity activity,
DefaultHardwareBackBtnHandler defaultBackButtonImpl) {
ReactInstanceManager reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager != null) {
reactInstanceManager.onHostResume(activity, defaultBackButtonImpl);
}
if (permissionsCallback != null) {
permissionsCallback.invoke();
permissionsCallback = null;
}
}
/**
* {@link Activity} lifecycle method which should be called from
* {@code Activity#onNewIntent} so we can do the required internal
* processing. Note that this is only needed if the activity's "launchMode"
* was set to "singleTask". This is required for deep linking to work once
* the application is already running.
*
* @param intent {@code Intent} instance which was received.
*/
public static void onNewIntent(Intent intent) {
ReactInstanceManager reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager != null) {
reactInstanceManager.onNewIntent(intent);
}
}
public static void onRequestPermissionsResult(
final int requestCode,
final String[] permissions,
final int[] grantResults) {
CalendarEventsPackage.onRequestPermissionsResult(
requestCode,
permissions,
grantResults);
permissionsCallback = new Callback() {
@Override
public void invoke(Object... args) {
if (permissionListener != null
&& permissionListener.onRequestPermissionsResult(requestCode, permissions, grantResults)) {
permissionListener = null;
}
}
};
}
@TargetApi(Build.VERSION_CODES.M)
public static void requestPermissions(Activity activity, String[] permissions, int requestCode, PermissionListener listener) {
permissionListener = listener;
activity.requestPermissions(permissions, requestCode);
}
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.support.annotation.Nullable;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.core.DeviceEventManagerModule;
public class ReactContextUtils {
public static boolean emitEvent(
ReactContext reactContext,
String eventName,
@Nullable Object data) {
if (reactContext == null) {
// XXX If no ReactContext is specified, emit through the
// ReactContext of ReactInstanceManager. ReactInstanceManager
// cooperates with ReactContextUtils i.e. ReactInstanceManager will
// not invoke ReactContextUtils without a ReactContext.
return ReactInstanceManagerHolder.emitEvent(eventName, data);
}
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, data);
return true;
}
}

View File

@@ -0,0 +1,148 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.app.Application;
import android.support.annotation.Nullable;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.common.LifecycleState;
import java.util.Arrays;
import java.util.List;
class ReactInstanceManagerHolder {
/**
* React Native bridge. The instance manager allows embedding applications
* to create multiple root views off the same JavaScript bundle.
*/
private static ReactInstanceManager reactInstanceManager;
private static List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
return Arrays.<NativeModule>asList(
new AndroidSettingsModule(reactContext),
new AppInfoModule(reactContext),
new AudioModeModule(reactContext),
new ExternalAPIModule(reactContext),
new PictureInPictureModule(reactContext),
new ProximityModule(reactContext),
new WiFiStatsModule(reactContext),
new org.jitsi.meet.sdk.dropbox.Dropbox(reactContext),
new org.jitsi.meet.sdk.invite.InviteModule(reactContext),
new org.jitsi.meet.sdk.net.NAT64AddrInfoModule(reactContext)
);
}
/**
* Helper function to send an event to JavaScript.
*
* @param eventName {@code String} containing the event name.
* @param data {@code Object} optional ancillary data for the event.
*/
public static boolean emitEvent(
String eventName,
@Nullable Object data) {
ReactInstanceManager reactInstanceManager
= ReactInstanceManagerHolder.getReactInstanceManager();
if (reactInstanceManager != null) {
ReactContext reactContext
= reactInstanceManager.getCurrentReactContext();
return
reactContext != null
&& ReactContextUtils.emitEvent(
reactContext,
eventName,
data);
}
return false;
}
/**
* Finds a native React module for given class.
*
* @param nativeModuleClass the native module's class for which an instance
* is to be retrieved from the {@link #reactInstanceManager}.
* @param <T> the module's type.
* @return {@link NativeModule} instance for given interface type or
* {@code null} if no instance for this interface is available, or if
* {@link #reactInstanceManager} has not been initialized yet.
*/
static <T extends NativeModule> T getNativeModule(
Class<T> nativeModuleClass) {
ReactContext reactContext
= reactInstanceManager != null
? reactInstanceManager.getCurrentReactContext() : null;
return reactContext != null
? reactContext.getNativeModule(nativeModuleClass) : null;
}
static ReactInstanceManager getReactInstanceManager() {
return reactInstanceManager;
}
/**
* Internal method to initialize the React Native instance manager. We
* create a single instance in order to load the JavaScript bundle a single
* time. All {@code ReactRootView} instances will be tied to the one and
* only {@code ReactInstanceManager}.
*
* @param application {@code Application} instance which is running.
*/
static void initReactInstanceManager(Application application) {
if (reactInstanceManager != null) {
return;
}
reactInstanceManager
= ReactInstanceManager.builder()
.setApplication(application)
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index.android")
.addPackage(new co.apptailor.googlesignin.RNGoogleSigninPackage())
.addPackage(new com.BV.LinearGradient.LinearGradientPackage())
.addPackage(new com.calendarevents.CalendarEventsPackage())
.addPackage(new com.corbt.keepawake.KCKeepAwakePackage())
.addPackage(new com.dylanvann.fastimage.FastImageViewPackage())
.addPackage(new com.facebook.react.shell.MainReactPackage())
.addPackage(new com.i18n.reactnativei18n.ReactNativeI18n())
.addPackage(new com.oblador.vectoricons.VectorIconsPackage())
.addPackage(new com.ocetnik.timer.BackgroundTimerPackage())
.addPackage(new com.oney.WebRTCModule.WebRTCModulePackage())
.addPackage(new com.rnimmersive.RNImmersivePackage())
.addPackage(new com.zmxv.RNSound.RNSoundPackage())
.addPackage(new ReactPackageAdapter() {
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
return
ReactInstanceManagerHolder.createNativeModules(
reactContext);
}
})
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
}
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.Collections;
import java.util.List;
class ReactPackageAdapter
implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<ViewManager> createViewManagers(
ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}

View File

@@ -0,0 +1,208 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.Log;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import org.json.JSONArray;
import org.json.JSONObject;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Module exposing WiFi statistics.
*
* Gathers rssi, signal in percentage, timestamp and the addresses of the wifi
* device.
*/
class WiFiStatsModule
extends ReactContextBaseJavaModule {
/**
* The name of {@code WiFiStatsModule} to be used in the React Native
* bridge.
*/
private static final String MODULE_NAME = "WiFiStats";
/**
* The {@code Log} tag {@code WiFiStatsModule} is to log messages with.
*/
static final String TAG = MODULE_NAME;
/**
* The scale used for the signal value. A level of the signal, given in the
* range of 0 to SIGNAL_LEVEL_SCALE-1 (both inclusive).
*/
public final static int SIGNAL_LEVEL_SCALE = 101;
/**
* {@link ExecutorService} for running all operations on a dedicated thread.
*/
private static final ExecutorService executor
= Executors.newSingleThreadExecutor();
/**
* Initializes a new module instance. There shall be a single instance of
* this module throughout the lifetime of the application.
*
* @param reactContext the {@link ReactApplicationContext} where this module
* is created.
*/
public WiFiStatsModule(ReactApplicationContext reactContext) {
super(reactContext);
}
/**
* Gets the name for this module to be used in the React Native bridge.
*
* @return a string with the module name.
*/
@Override
public String getName() {
return MODULE_NAME;
}
/**
* Returns the {@link InetAddress} represented by this int.
*
* @param value the int representation of the ip address.
* @return the {@link InetAddress}.
* @throws UnknownHostException - if IP address is of illegal length.
*/
public static InetAddress toInetAddress(int value)
throws UnknownHostException {
return InetAddress.getByAddress(
new byte[] {
(byte) value,
(byte) (value >> 8),
(byte) (value >> 16),
(byte) (value >> 24)
});
}
/**
* Public method to retrieve WiFi stats.
*
* @param promise a {@link Promise} which will be resolved if WiFi stats are
* retrieved successfully, and it will be rejected otherwise.
*/
@ReactMethod
public void getWiFiStats(final Promise promise) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
Context context
= getReactApplicationContext().getApplicationContext();
WifiManager wifiManager
= (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
promise.reject(new Exception("Wifi not enabled"));
return;
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo.getNetworkId() == -1) {
promise.reject(new Exception("Wifi not connected"));
return;
}
int rssi = wifiInfo.getRssi();
int signalLevel
= WifiManager.calculateSignalLevel(
rssi, SIGNAL_LEVEL_SCALE);
JSONObject result = new JSONObject();
result.put("rssi", rssi)
.put("signal", signalLevel)
.put("timestamp",
String.valueOf(System.currentTimeMillis()));
JSONArray addresses = new JSONArray();
InetAddress wifiAddress
= toInetAddress(wifiInfo.getIpAddress());
try {
Enumeration<NetworkInterface> e
= NetworkInterface.getNetworkInterfaces();
while (e.hasMoreElements()) {
NetworkInterface networkInterface = e.nextElement();
boolean found = false;
// first check whether this is the desired interface
Enumeration<InetAddress> as
= networkInterface.getInetAddresses();
while (as.hasMoreElements()) {
InetAddress a = as.nextElement();
if(a.equals(wifiAddress)) {
found = true;
break;
}
}
if (found) {
// interface found let's put addresses
// to the result object
as = networkInterface.getInetAddresses();
while (as.hasMoreElements()) {
InetAddress a = as.nextElement();
if (a.isLinkLocalAddress())
continue;
addresses.put(a.getHostAddress());
}
}
}
} catch (SocketException e) {
Log.wtf(TAG,
"Unable to NetworkInterface.getNetworkInterfaces()"
);
}
result.put("addresses", addresses);
promise.resolve(result.toString());
Log.d(TAG, "WiFi stats: " + result.toString());
} catch (Throwable e) {
Log.e(TAG, "Failed to obtain wifi stats", e);
promise.reject(
new Exception("Failed to obtain wifi stats"));
}
}
};
executor.execute(r);
}
}

View File

@@ -0,0 +1,184 @@
package org.jitsi.meet.sdk.dropbox;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.text.TextUtils;
import com.dropbox.core.DbxException;
import com.dropbox.core.DbxRequestConfig;
import com.dropbox.core.v2.DbxClientV2;
import com.dropbox.core.v2.users.FullAccount;
import com.dropbox.core.v2.users.SpaceAllocation;
import com.dropbox.core.v2.users.SpaceUsage;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.dropbox.core.android.Auth;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableMap;
import java.util.HashMap;
import java.util.Map;
/**
* Implements the react-native module for the dropbox integration.
*/
public class Dropbox
extends ReactContextBaseJavaModule
implements LifecycleEventListener {
private String appKey;
private String clientId;
private final boolean isEnabled;
private Promise promise;
public Dropbox(ReactApplicationContext reactContext) {
super(reactContext);
appKey
= reactContext.getString(
org.jitsi.meet.sdk.R.string.dropbox_app_key);
isEnabled = !TextUtils.isEmpty(appKey);
clientId = generateClientId();
reactContext.addLifecycleEventListener(this);
}
/**
* Executes the dropbox auth flow.
*
* @param promise The promise used to return the result of the auth flow.
*/
@ReactMethod
public void authorize(final Promise promise) {
if (isEnabled) {
Auth.startOAuth2Authentication(this.getCurrentActivity(), appKey);
this.promise = promise;
} else {
promise.reject(
new Exception("Dropbox integration isn't configured."));
}
}
/**
* Generate a client identifier for the dropbox sdk.
*
* @returns a client identifier for the dropbox sdk.
* @see {https://dropbox.github.io/dropbox-sdk-java/api-docs/v3.0.x/com/dropbox/core/DbxRequestConfig.html#getClientIdentifier--}
*/
private String generateClientId() {
Context context = getReactApplicationContext();
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo = null;
PackageInfo packageInfo = null;
try {
String packageName = context.getPackageName();
applicationInfo = packageManager.getApplicationInfo(packageName, 0);
packageInfo = packageManager.getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
}
String applicationLabel
= applicationInfo == null
? "JitsiMeet"
: packageManager.getApplicationLabel(applicationInfo).toString()
.replaceAll("\\s", "");
String version = packageInfo == null ? "dev" : packageInfo.versionName;
return applicationLabel + "/" + version;
}
@Override
public Map<String, Object> getConstants() {
Map<String, Object> constants = new HashMap<>();
constants.put("ENABLED", isEnabled);
return constants;
}
/**
* Resolves the current user dropbox display name.
*
* @param token A dropbox access token.
* @param promise The promise used to return the result of the auth flow.
*/
@ReactMethod
public void getDisplayName(final String token, final Promise promise) {
DbxRequestConfig config = DbxRequestConfig.newBuilder(clientId).build();
DbxClientV2 client = new DbxClientV2(config, token);
// Get current account info
try {
FullAccount account = client.users().getCurrentAccount();
promise.resolve(account.getName().getDisplayName());
} catch (DbxException e) {
promise.reject(e);
}
}
@Override
public String getName() {
return "Dropbox";
}
/**
* Resolves the current user space usage.
*
* @param token A dropbox access token.
* @param promise The promise used to return the result of the auth flow.
*/
@ReactMethod
public void getSpaceUsage(final String token, final Promise promise) {
DbxRequestConfig config = DbxRequestConfig.newBuilder(clientId).build();
DbxClientV2 client = new DbxClientV2(config, token);
try {
SpaceUsage spaceUsage = client.users().getSpaceUsage();
WritableMap map = Arguments.createMap();
map.putString("used", String.valueOf(spaceUsage.getUsed()));
SpaceAllocation allocation = spaceUsage.getAllocation();
long allocated = 0;
if (allocation.isIndividual()) {
allocated += allocation.getIndividualValue().getAllocated();
}
if (allocation.isTeam()) {
allocated += allocation.getTeamValue().getAllocated();
}
map.putString("allocated", String.valueOf(allocated));
promise.resolve(map);
} catch (DbxException e) {
promise.reject(e);
}
}
@Override
public void onHostDestroy() {}
@Override
public void onHostPause() {}
@Override
public void onHostResume() {
String token = Auth.getOAuth2Token();
if (token != null && this.promise != null) {
this.promise.resolve(token);
this.promise = null;
}
}
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.incoming_call;
import android.support.annotation.NonNull;
public class IncomingCallInfo {
/**
* URL for the caller avatar.
*/
private final String callerAvatarURL;
/**
* Caller's name.
*/
private final String callerName;
/**
* Whether this is a regular call or a video call.
*/
private final boolean hasVideo;
public IncomingCallInfo(
@NonNull String callerName,
@NonNull String callerAvatarURL,
boolean hasVideo) {
this.callerName = callerName;
this.callerAvatarURL = callerAvatarURL;
this.hasVideo = hasVideo;
}
/**
* Gets the caller's avatar URL.
*
* @return - The URL as a string.
*/
public String getCallerAvatarURL() {
return callerAvatarURL;
}
/**
* Gets the caller's name.
*
* @return - The caller's name.
*/
public String getCallerName() {
return callerName;
}
/**
* Gets whether the call is a video call or not.
*
* @return - {@code true} if this call has video; {@code false}, otherwise.
*/
public boolean hasVideo() {
return hasVideo;
}
}

View File

@@ -0,0 +1,73 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.incoming_call;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import com.facebook.react.bridge.ReadableMap;
import org.jitsi.meet.sdk.BaseReactView;
import org.jitsi.meet.sdk.ListenerUtils;
import java.lang.reflect.Method;
import java.util.Map;
public class IncomingCallView
extends BaseReactView<IncomingCallViewListener> {
/**
* The {@code Method}s of {@code JitsiMeetViewListener} by event name i.e.
* redux action types.
*/
private static final Map<String, Method> LISTENER_METHODS
= ListenerUtils.mapListenerMethods(IncomingCallViewListener.class);
public IncomingCallView(@NonNull Context context) {
super(context);
}
/**
* Handler for {@link ExternalAPIModule} events.
*
* @param name The name of the event.
* @param data The details/specifics of the event to send determined
* by/associated with the specified {@code name}.
*/
@Override
public void onExternalAPIEvent(String name, ReadableMap data) {
onExternalAPIEvent(LISTENER_METHODS, name, data);
}
/**
* Sets the information for the incoming call this {@code IncomingCallView}
* represents.
*
* @param callInfo - {@link IncomingCallInfo} object representing the caller
* information.
*/
public void setIncomingCallInfo(IncomingCallInfo callInfo) {
Bundle props = new Bundle();
props.putString("callerAvatarURL", callInfo.getCallerAvatarURL());
props.putString("callerName", callInfo.getCallerName());
props.putBoolean("hasVideo", callInfo.hasVideo());
createReactRootView("IncomingCallApp", props);
}
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.incoming_call;
import java.util.Map;
/**
* Interface for listening to events coming from Jitsi Meet, related to
* {@link IncomingCallView}.
*/
public interface IncomingCallViewListener {
/**
* Called when the user presses the "Answer" button on the
* {@link IncomingCallView}.
*
* @param data - Unused at the moment.
*/
void onIncomingCallAnswered(Map<String, Object> data);
/**
* Called when the user presses the "Decline" button on the
* {@link IncomingCallView}.
*
* @param data - Unused at the moment.
*/
void onIncomingCallDeclined(Map<String, Object> data);
}

View File

@@ -0,0 +1,211 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.invite;
import android.util.Log;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableNativeArray;
import com.facebook.react.bridge.WritableNativeMap;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* Controller object used by native code to query and submit user selections for
* the user invitation flow.
*/
public class AddPeopleController {
/**
* The AddPeopleControllerListener for this controller, used to pass query
* results back to the native code that initiated the query.
*/
private AddPeopleControllerListener listener;
/**
* Local cache of search query results. Used to re-hydrate the list of
* selected items based on their ids passed to inviteById in order to pass
* the full item maps back to the JitsiMeetView during submission.
*/
private final Map<String, ReadableMap> items = new HashMap<>();
private final WeakReference<InviteController> owner;
private final WeakReference<ReactApplicationContext> reactContext;
/**
* Randomly generated UUID, used for identification in the InviteModule.
*/
private final String uuid = UUID.randomUUID().toString();
public AddPeopleController(
InviteController owner,
ReactApplicationContext reactContext) {
this.owner = new WeakReference<>(owner);
this.reactContext = new WeakReference<>(reactContext);
}
/**
* Cancel the invitation flow and free memory allocated to the
* AddPeopleController. After calling this method, this object is invalid -
* a new AddPeopleController will be passed to the caller through
* beginAddPeople.
*/
public void endAddPeople() {
InviteController owner = this.owner.get();
if (owner != null) {
owner.endAddPeople(this);
}
}
/**
*
* @return the AddPeopleControllerListener for this controller, used to pass
* query results back to the native code that initiated the query.
*/
public AddPeopleControllerListener getListener() {
return listener;
}
final ReactApplicationContext getReactApplicationContext() {
return reactContext.get();
}
/**
*
* @return the unique identifier for this AddPeopleController
*/
public String getUuid() {
return uuid;
}
/**
* Send invites to selected users based on their item ids
*
* @param ids
*/
public void inviteById(List<String> ids) {
InviteController owner = this.owner.get();
if (owner != null) {
WritableArray invitees = new WritableNativeArray();
for(int i = 0, size = ids.size(); i < size; i++) {
String id = ids.get(i);
if(items.containsKey(id)) {
WritableNativeMap map = new WritableNativeMap();
map.merge(items.get(id));
invitees.pushMap(map);
} else {
// If the id doesn't exist in the map, we can't do anything,
// so just skip it.
}
}
owner.invite(this, invitees);
}
}
void inviteSettled(ReadableArray failedInvitees) {
AddPeopleControllerListener listener = getListener();
if (listener != null) {
ArrayList<Map<String, Object>> jFailedInvitees = new ArrayList<>();
for (int i = 0, size = failedInvitees.size(); i < size; ++i) {
jFailedInvitees.add(failedInvitees.getMap(i).toHashMap());
}
listener.onInviteSettled(this, jFailedInvitees);
}
}
/**
* Start a search for entities to invite with the given query. Results will
* be returned through the associated AddPeopleControllerListener's
* onReceivedResults method.
*
* @param query
*/
public void performQuery(String query) {
InviteController owner = this.owner.get();
if (owner != null) {
owner.performQuery(this, query);
}
}
/**
* Caches results received by the search into a local map for use later when
* the items are submitted. Submission requires the full map of
* information, but only the IDs are returned back to the delegate. Using
* this map means we don't have to send the whole map back to the delegate.
*
* @param results
* @param query
*/
void receivedResultsForQuery(ReadableArray results, String query) {
AddPeopleControllerListener listener = getListener();
if (listener != null) {
List<Map<String, Object>> jvmResults = new ArrayList<>();
// cache results for use in submission later
// convert to jvm array
for(int i = 0; i < results.size(); i++) {
ReadableMap map = results.getMap(i);
if(map.hasKey("id")) {
items.put(map.getString("id"), map);
} else if(map.hasKey("type")
&& map.getString("type").equals("phone")
&& map.hasKey("number")) {
items.put(map.getString("number"), map);
} else {
Log.w(
"AddPeopleController",
"Received result without id and that was not a phone number, so not adding it to suggestions: "
+ map);
}
jvmResults.add(map.toHashMap());
}
listener.onReceivedResults(this, jvmResults, query);
}
}
/**
* Sets the AddPeopleControllerListener for this controller, used to pass
* query results back to the native code that initiated the query.
*
* @param listener
*/
public void setListener(AddPeopleControllerListener listener) {
this.listener = listener;
}
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.invite;
import java.util.List;
import java.util.Map;
public interface AddPeopleControllerListener {
/**
* Called when the call to {@link AddPeopleController#inviteById(List)}
* completes.
*
* @param addPeopleController the active {@link AddPeopleController} for
* this invite flow. This object should be cleaned up by calling
* {@link AddPeopleController#endAddPeople()} if the user exits the invite
* flow. Otherwise, it can stay active if the user will attempt to invite
* @param failedInvitees a {@code List} of {@code Map<String, Object>}
* dictionaries that represent the invitations that failed. The data type of
* the objects is identical to the results returned in onReceivedResuls.
*/
void onInviteSettled(
AddPeopleController addPeopleController,
List<Map<String, Object>> failedInvitees);
/**
* Called when results are received for a query called through
* AddPeopleController.query().
*
* @param addPeopleController
* @param results a List of Map<String, Object> objects that represent items
* returned by the query. The object at key "type" describes the type of
* item: "user", "videosipgw" (conference room), or "phone". "user" types
* have properties at "id", "name", and "avatar". "videosipgw" types have
* properties at "id" and "name". "phone" types have properties at "number",
* "title", "and "subtitle"
* @param query the query that generated the given results
*/
void onReceivedResults(
AddPeopleController addPeopleController,
List<Map<String, Object>> results,
String query);
}

View File

@@ -0,0 +1,265 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.invite;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableNativeMap;
import org.jitsi.meet.sdk.ReactContextUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
/**
* Represents the entry point into the invite feature of Jitsi Meet and is the
* Java counterpart of the JavaScript {@code InviteButton}.
*/
public class InviteController {
private AddPeopleController addPeopleController;
/**
* Whether adding/inviting people by name (as opposed to phone number) is
* enabled.
*/
private Boolean addPeopleEnabled;
/**
* Whether adding/inviting people by phone number (as opposed to name) is
* enabled.
*/
private Boolean dialOutEnabled;
private final String externalAPIScope;
private InviteControllerListener listener;
public InviteController(String externalAPIScope) {
this.externalAPIScope = externalAPIScope;
}
void beginAddPeople(ReactApplicationContext reactContext) {
InviteControllerListener listener = getListener();
if (listener != null) {
// XXX For the sake of simplicity and in order to reduce the risk of
// memory leaks, allow a single AddPeopleController at a time.
AddPeopleController addPeopleController = this.addPeopleController;
if (addPeopleController != null) {
return;
}
// Initialize a new AddPeopleController to represent the click/tap
// on the InviteButton and notify the InviteControllerListener
// about the event.
addPeopleController = new AddPeopleController(this, reactContext);
boolean success = false;
this.addPeopleController = addPeopleController;
try {
listener.beginAddPeople(addPeopleController);
success = true;
} finally {
if (!success) {
endAddPeople(addPeopleController);
}
}
}
}
void endAddPeople(AddPeopleController addPeopleController) {
if (this.addPeopleController == addPeopleController) {
this.addPeopleController = null;
}
}
public InviteControllerListener getListener() {
return listener;
}
/**
* Sends JavaScript event to submit invitations to the given item ids
*
* @param invitees a WritableArray of WritableNativeMaps representing
* selected items. Each map representing a selected item should match the
* data passed back in the return from a query.
*/
boolean invite(
AddPeopleController addPeopleController,
WritableArray invitees) {
return
invite(
addPeopleController.getUuid(),
addPeopleController.getReactApplicationContext(),
invitees);
}
public Future<List<Map<String, Object>>> invite(
final List<Map<String, Object>> invitees) {
final boolean inviteBegan
= invite(
UUID.randomUUID().toString(),
/* reactContext */ null,
Arguments.makeNativeArray(invitees));
FutureTask futureTask
= new FutureTask(new Callable() {
@Override
public List<Map<String, Object>> call() {
if (inviteBegan) {
// TODO Complete the returned Future when the invite
// settles.
return Collections.emptyList();
} else {
// The invite failed to even begin so report that all
// invitees failed.
return invitees;
}
}
});
// If the invite failed to even begin, complete the returned Future
// already and the Future implementation will report that all invitees
// failed.
if (!inviteBegan) {
futureTask.run();
}
return futureTask;
}
private boolean invite(
String addPeopleControllerScope,
ReactContext reactContext,
WritableArray invitees) {
WritableNativeMap data = new WritableNativeMap();
data.putString("addPeopleControllerScope", addPeopleControllerScope);
data.putString("externalAPIScope", externalAPIScope);
data.putArray("invitees", invitees);
return
ReactContextUtils.emitEvent(
reactContext,
"org.jitsi.meet:features/invite#invite",
data);
}
void inviteSettled(
String addPeopleControllerScope,
ReadableArray failedInvitees) {
AddPeopleController addPeopleController = this.addPeopleController;
if (addPeopleController != null
&& addPeopleController.getUuid().equals(
addPeopleControllerScope)) {
try {
addPeopleController.inviteSettled(failedInvitees);
} finally {
if (failedInvitees.size() == 0) {
endAddPeople(addPeopleController);
}
}
}
}
public boolean isAddPeopleEnabled() {
Boolean b = this.addPeopleEnabled;
return
(b == null || b.booleanValue()) ? (getListener() != null) : false;
}
public boolean isDialOutEnabled() {
Boolean b = this.dialOutEnabled;
return
(b == null || b.booleanValue()) ? (getListener() != null) : false;
}
/**
* Starts a query for users to invite to the conference. Results will be
* returned through
* {@link AddPeopleControllerListener#onReceivedResults(AddPeopleController, List, String)}.
*
* @param query {@code String} to use for the query
*/
void performQuery(AddPeopleController addPeopleController, String query) {
WritableNativeMap params = new WritableNativeMap();
params.putString("addPeopleControllerScope", addPeopleController.getUuid());
params.putString("externalAPIScope", externalAPIScope);
params.putString("query", query);
ReactContextUtils.emitEvent(
addPeopleController.getReactApplicationContext(),
"org.jitsi.meet:features/invite#performQuery",
params);
}
void receivedResultsForQuery(
String addPeopleControllerScope,
String query,
ReadableArray results) {
AddPeopleController addPeopleController = this.addPeopleController;
if (addPeopleController != null
&& addPeopleController.getUuid().equals(
addPeopleControllerScope)) {
addPeopleController.receivedResultsForQuery(results, query);
}
}
/**
* Sets whether the ability to add users to the call is enabled. If this is
* enabled, an add user button will appear on the {@link JitsiMeetView}. If
* enabled, and the user taps the add user button,
* {@link InviteControllerListener#beginAddPeople(AddPeopleController)}
* will be called.
*
* @param addPeopleEnabled {@code true} to enable the add people button;
* otherwise, {@code false}
*/
public void setAddPeopleEnabled(boolean addPeopleEnabled) {
this.addPeopleEnabled = Boolean.valueOf(addPeopleEnabled);
}
/**
* Sets whether the ability to add phone numbers to the call is enabled.
* Must be enabled along with {@link #setAddPeopleEnabled(boolean)} to be
* effective.
*
* @param dialOutEnabled {@code true} to enable the ability to add phone
* numbers to the call; otherwise, {@code false}
*/
public void setDialOutEnabled(boolean dialOutEnabled) {
this.dialOutEnabled = Boolean.valueOf(dialOutEnabled);
}
public void setListener(InviteControllerListener listener) {
this.listener = listener;
}
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.invite;
public interface InviteControllerListener {
/**
* Called when the add user button is tapped.
*
* @param addPeopleController {@code AddPeopleController} scoped for this
* user invite flow. The {@code AddPeopleController} is used to start user
* queries and accepts an {@code AddPeopleControllerListener} for receiving
* user query responses.
*/
void beginAddPeople(AddPeopleController addPeopleController);
}

View File

@@ -0,0 +1,171 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.invite;
import android.util.Log;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.UiThreadUtil;
import org.jitsi.meet.sdk.BaseReactView;
import org.jitsi.meet.sdk.JitsiMeetView;
/**
* Implements the react-native module of the feature invite.
*/
public class InviteModule
extends ReactContextBaseJavaModule {
public InviteModule(ReactApplicationContext reactContext) {
super(reactContext);
}
/**
* Signals that a click/tap has been performed on {@code InviteButton} and
* that the execution flow for adding/inviting people to the current
* conference/meeting is to begin
*
* @param externalAPIScope the unique identifier of the
* {@code JitsiMeetView} whose {@code InviteButton} was clicked/tapped.
*/
@ReactMethod
public void beginAddPeople(final String externalAPIScope) {
// Make sure InviteControllerListener (like all other listeners of the
// SDK) is invoked on the UI thread. It was requested by SDK consumers.
if (!UiThreadUtil.isOnUiThread()) {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
beginAddPeople(externalAPIScope);
}
});
return;
}
InviteController inviteController
= findInviteControllerByExternalAPIScope(externalAPIScope);
if (inviteController != null) {
inviteController.beginAddPeople(getReactApplicationContext());
}
}
private InviteController findInviteControllerByExternalAPIScope(
String externalAPIScope) {
JitsiMeetView view
= (JitsiMeetView)
BaseReactView.findViewByExternalAPIScope(externalAPIScope);
return view == null ? null : view.getInviteController();
}
@Override
public String getName() {
return "Invite";
}
/**
* Callback for invitation failures
*
* @param failedInvitees the items for which the invitation failed
* @param addPeopleControllerScope a string that represents a connection to
* a specific AddPeopleController
*/
@ReactMethod
public void inviteSettled(
final String externalAPIScope,
final String addPeopleControllerScope,
final ReadableArray failedInvitees) {
// Make sure AddPeopleControllerListener (like all other listeners of
// the SDK) is invoked on the UI thread. It was requested by SDK
// consumers.
if (!UiThreadUtil.isOnUiThread()) {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
inviteSettled(
externalAPIScope,
addPeopleControllerScope,
failedInvitees);
}
});
return;
}
InviteController inviteController
= findInviteControllerByExternalAPIScope(externalAPIScope);
if (inviteController == null) {
Log.w(
"InviteModule",
"Invite settled, but failed to find active controller to notify");
} else {
inviteController.inviteSettled(
addPeopleControllerScope,
failedInvitees);
}
}
/**
* Callback for results received from the JavaScript invite search call
*
* @param results the results in a ReadableArray of ReadableMap objects
* @param query the query associated with the search
* @param addPeopleControllerScope a string that represents a connection to
* a specific AddPeopleController
*/
@ReactMethod
public void receivedResults(
final String externalAPIScope,
final String addPeopleControllerScope,
final String query,
final ReadableArray results) {
// Make sure AddPeopleControllerListener (like all other listeners of
// the SDK) is invoked on the UI thread. It was requested by SDK
// consumers.
if (!UiThreadUtil.isOnUiThread()) {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
receivedResults(
externalAPIScope,
addPeopleControllerScope,
query,
results);
}
});
return;
}
InviteController inviteController
= findInviteControllerByExternalAPIScope(externalAPIScope);
if (inviteController == null) {
Log.w(
"InviteModule",
"Received results, but failed to find active controller to send results back");
} else {
inviteController.receivedResultsForQuery(
addPeopleControllerScope,
query,
results);
}
}
}

View File

@@ -0,0 +1,238 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.net;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* Constructs IPv6 addresses for IPv4 addresses in the NAT64 environment.
*
* NAT64 translates IPv4 to IPv6 addresses by adding "well known" prefix and
* suffix configured by the administrator. Those are figured out by discovering
* both IPv6 and IPv4 addresses of a host and then trying to find a place where
* the IPv4 address fits into the format described here:
* https://tools.ietf.org/html/rfc6052#section-2.2
*/
public class NAT64AddrInfo {
/**
* Coverts bytes array to upper case HEX string.
*
* @param bytes an array of bytes to be converted
* @return ex. "010AFF" for an array of {1, 10, 255}.
*/
static String bytesToHexString(byte[] bytes) {
StringBuilder hexStr = new StringBuilder();
for (byte b : bytes) {
hexStr.append(String.format("%02X", b));
}
return hexStr.toString();
}
/**
* Tries to discover the NAT64 prefix/suffix based on the IPv4 and IPv6
* addresses resolved for given {@code host}.
*
* @param host the host for which the code will try to discover IPv4 and
* IPv6 addresses which then will be used to figure out the NAT64 prefix.
* @return {@link NAT64AddrInfo} instance if the NAT64 prefix/suffix was
* successfully discovered or {@code null} if it failed for any reason.
* @throws UnknownHostException thrown by {@link InetAddress#getAllByName}.
*/
public static NAT64AddrInfo discover(String host)
throws UnknownHostException {
InetAddress ipv4 = null;
InetAddress ipv6 = null;
for(InetAddress addr : InetAddress.getAllByName(host)) {
byte[] bytes = addr.getAddress();
if (bytes.length == 4) {
ipv4 = addr;
} else if (bytes.length == 16) {
ipv6 = addr;
}
}
if (ipv4 != null && ipv6 != null) {
return figureOutNAT64AddrInfo(ipv4.getAddress(), ipv6.getAddress());
}
return null;
}
/**
* Based on IPv4 and IPv6 addresses of the same host, the method will make
* an attempt to figure out what are the NAT64 prefix and suffix.
*
* @param ipv4AddrBytes the IPv4 address of the same host in NAT64 network,
* as returned by {@link InetAddress#getAddress()}.
* @param ipv6AddrBytes the IPv6 address of the same host in NAT64 network,
* as returned by {@link InetAddress#getAddress()}.
* @return {@link NAT64AddrInfo} instance which contains the prefix/suffix
* of the current NAT64 network or {@code null} if the prefix could not be
* found.
*/
static NAT64AddrInfo figureOutNAT64AddrInfo(
byte[] ipv4AddrBytes,
byte[] ipv6AddrBytes) {
String ipv6Str = bytesToHexString(ipv6AddrBytes);
String ipv4Str = bytesToHexString(ipv4AddrBytes);
// NAT64 address format:
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
// |PL| 0-------------32--40--48--56--64--72--80--88--96--104---------|
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
// |32| prefix |v4(32) | u | suffix |
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
// |40| prefix |v4(24) | u |(8)| suffix |
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
// |48| prefix |v4(16) | u | (16) | suffix |
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
// |56| prefix |(8)| u | v4(24) | suffix |
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
// |64| prefix | u | v4(32) | suffix |
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
// |96| prefix | v4(32) |
// +--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
int prefixLength = 96;
int suffixLength = 0;
String prefix = null;
String suffix = null;
if (ipv4Str.equalsIgnoreCase(ipv6Str.substring(prefixLength / 4))) {
prefix = ipv6Str.substring(0, prefixLength / 4);
} else {
// Cut out the 'u' octet
ipv6Str = ipv6Str.substring(0, 16) + ipv6Str.substring(18);
for (prefixLength = 64, suffixLength = 6; prefixLength >= 32; ) {
if (ipv4Str.equalsIgnoreCase(
ipv6Str.substring(
prefixLength / 4, prefixLength / 4 + 8))) {
prefix = ipv6Str.substring(0, prefixLength / 4);
suffix = ipv6Str.substring(ipv6Str.length() - suffixLength);
break;
}
prefixLength -= 8;
suffixLength += 2;
}
}
return prefix != null ? new NAT64AddrInfo(prefix, suffix) : null;
}
/**
* An overload for {@link #hexStringToIPv6String(StringBuilder)}.
*
* @param hexStr a hex representation of IPv6 address bytes.
* @return an IPv6 address string.
*/
static String hexStringToIPv6String(String hexStr) {
return hexStringToIPv6String(new StringBuilder(hexStr));
}
/**
* Converts from HEX representation of IPv6 address bytes into IPv6 address
* string which includes the ':' signs.
*
* @param str a hex representation of IPv6 address bytes.
* @return eg. FE80:CD00:0000:0CDA:1357:0000:212F:749C
*/
static String hexStringToIPv6String(StringBuilder str) {
for (int i = 32 - 4; i > 0; i -= 4) {
str.insert(i, ":");
}
return str.toString().toUpperCase();
}
/**
* Parses an IPv4 address string and returns it's byte array representation.
*
* @param ipv4Address eg. '192.168.3.23'
* @return byte representation of given IPv4 address string.
* @throws IllegalArgumentException if the address is not in valid format.
*/
static byte[] ipv4AddressStringToBytes(String ipv4Address) {
InetAddress address;
try {
address = InetAddress.getByName(ipv4Address);
} catch (UnknownHostException e) {
throw new IllegalArgumentException(
"Invalid IP address: " + ipv4Address, e);
}
byte[] bytes = address.getAddress();
if (bytes.length != 4) {
throw new IllegalArgumentException(
"Not an IPv4 address: " + ipv4Address);
}
return bytes;
}
/**
* The NAT64 prefix added to construct IPv6 from an IPv4 address.
*/
private final String prefix;
/**
* The NAT64 suffix (if any) used to construct IPv6 from an IPv4 address.
*/
private final String suffix;
/**
* Creates new instance of {@link NAT64AddrInfo}.
*
* @param prefix the NAT64 prefix.
* @param suffix the NAT64 suffix.
*/
private NAT64AddrInfo(String prefix, String suffix) {
this.prefix = prefix;
this.suffix = suffix;
}
/**
* Based on the NAT64 prefix and suffix will create an IPv6 representation
* of the given IPv4 address.
*
* @param ipv4Address eg. '192.34.2.3'
* @return IPv6 address string eg. FE80:CD00:0000:0CDA:1357:0000:212F:749C
* @throws IllegalArgumentException if given string is not a valid IPv4
* address.
*/
public String getIPv6Address(String ipv4Address) {
byte[] ipv4AddressBytes = ipv4AddressStringToBytes(ipv4Address);
StringBuilder newIPv6Str = new StringBuilder();
newIPv6Str.append(prefix);
newIPv6Str.append(bytesToHexString(ipv4AddressBytes));
if (suffix != null) {
// Insert the 'u' octet.
newIPv6Str.insert(16, "00");
newIPv6Str.append(suffix);
}
return hexStringToIPv6String(newIPv6Str);
}
}

View File

@@ -0,0 +1,124 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.net;
import android.util.Log;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import java.net.UnknownHostException;
/**
* This module exposes the functionality of creating an IPv6 representation
* of IPv4 addresses in NAT64 environment.
*
* See[1] and [2] for more info on what NAT64 is.
* [1]: https://tools.ietf.org/html/rfc6146
* [2]: https://tools.ietf.org/html/rfc6052
*/
public class NAT64AddrInfoModule
extends ReactContextBaseJavaModule {
/**
* The host for which the module wil try to resolve both IPv4 and IPv6
* addresses in order to figure out the NAT64 prefix.
*/
private final static String HOST = "nat64.jitsi.net";
/**
* How long is the {@link NAT64AddrInfo} instance valid.
*/
private final static long INFO_LIFETIME = 60 * 1000;
/**
* The name of this module.
*/
private final static String MODULE_NAME = "NAT64AddrInfo";
/**
* The {@code Log} tag {@code NAT64AddrInfoModule} is to log messages with.
*/
private final static String TAG = MODULE_NAME;
/**
* The {@link NAT64AddrInfo} instance which holds NAT64 prefix/suffix.
*/
private NAT64AddrInfo info;
/**
* When {@link #info} was created.
*/
private long infoTimestamp;
/**
* Creates new {@link NAT64AddrInfoModule}.
*
* @param reactContext the react context to be used by the new module
* instance.
*/
public NAT64AddrInfoModule(ReactApplicationContext reactContext) {
super(reactContext);
}
/**
* Tries to obtain IPv6 address for given IPv4 address in NAT64 environment.
*
* @param ipv4Address IPv4 address string.
* @param promise a {@link Promise} which will be resolved either with IPv6
* address for given IPv4 address or with {@code null} if no
* {@link NAT64AddrInfo} was resolved for the current network. Will be
* rejected if given {@code ipv4Address} is not a valid IPv4 address.
*/
@ReactMethod
public void getIPv6Address(String ipv4Address, final Promise promise) {
// Reset if cached for too long.
if (System.currentTimeMillis() - infoTimestamp > INFO_LIFETIME) {
info = null;
}
if (info == null) {
String host = HOST;
try {
info = NAT64AddrInfo.discover(host);
} catch (UnknownHostException e) {
Log.e(TAG, "NAT64AddrInfo.discover: " + host, e);
}
infoTimestamp = System.currentTimeMillis();
}
String result;
try {
result = info == null ? null : info.getIPv6Address(ipv4Address);
} catch (IllegalArgumentException exc) {
Log.e(TAG, "Failed to get IPv6 address for: " + ipv4Address, exc);
// We don't want to reject. It's not a big deal if there's no IPv6
// address resolved.
result = null;
}
promise.resolve(result);
}
@Override
public String getName() {
return MODULE_NAME;
}
}

View File

@@ -0,0 +1,4 @@
<resources>
<string name="app_name">Jitsi Meet SDK</string>
<string name="dropbox_app_key"></string>
</resources>

View File

@@ -0,0 +1,150 @@
/*
* Copyright @ 2017-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.net;
import org.junit.Test;
import java.math.BigInteger;
import java.net.UnknownHostException;
import static org.junit.Assert.*;
/**
* Tests for {@link NAT64AddrInfo} class.
*/
public class NAT64AddrInfoTest {
/**
* Test case for the 96 prefix length.
*/
@Test
public void test96Prefix() {
testPrefixSuffix(
"260777000000000400000000", "", "203.0.113.1", "23.17.23.3");
}
/**
* Test case for the 64 prefix length.
*/
@Test
public void test64Prefix() {
String prefix = "1FF2A227B3AAF3D2";
String suffix = "BB87C8";
testPrefixSuffix(prefix, suffix, "48.46.87.34", "23.87.145.4");
}
/**
* Test case for the 56 prefix length.
*/
@Test
public void test56Prefix() {
String prefix = "1FF2A227B3AAF3";
String suffix = "A2BB87C8";
testPrefixSuffix(prefix, suffix, "34.72.234.255", "1.235.3.65");
}
/**
* Test case for the 48 prefix length.
*/
@Test
public void test48Prefix() {
String prefix = "1FF2A227B3AA";
String suffix = "72A2BB87C8";
testPrefixSuffix(prefix, suffix, "97.54.3.23", "77.49.0.33");
}
/**
* Test case for the 40 prefix length.
*/
@Test
public void test40Prefix() {
String prefix = "1FF2A227B3";
String suffix = "D972A2BB87C8";
testPrefixSuffix(prefix, suffix, "10.23.56.121", "97.65.32.21");
}
/**
* Test case for the 32 prefix length.
*/
@Test
public void test32Prefix()
throws UnknownHostException {
String prefix = "1FF2A227";
String suffix = "20D972A2BB87C8";
testPrefixSuffix(prefix, suffix, "162.63.65.189", "135.222.84.206");
}
private static String buildIPv6Addr(
String prefix, String suffix, String ipv4Hex) {
String ipv6Str = prefix + ipv4Hex + suffix;
if (suffix.length() > 0) {
ipv6Str = new StringBuilder(ipv6Str).insert(16, "00").toString();
}
return ipv6Str;
}
private void testPrefixSuffix(
String prefix, String suffix, String ipv4, String otherIPv4) {
byte[] ipv4Bytes = NAT64AddrInfo.ipv4AddressStringToBytes(ipv4);
String ipv4String = NAT64AddrInfo.bytesToHexString(ipv4Bytes);
String ipv6Str = buildIPv6Addr(prefix, suffix, ipv4String);
BigInteger ipv6Address = new BigInteger(ipv6Str, 16);
NAT64AddrInfo nat64AddrInfo
= NAT64AddrInfo.figureOutNAT64AddrInfo(
ipv4Bytes, ipv6Address.toByteArray());
assertNotNull("Failed to figure out NAT64 info", nat64AddrInfo);
String newIPv6 = nat64AddrInfo.getIPv6Address(ipv4);
assertEquals(
NAT64AddrInfo.hexStringToIPv6String(ipv6Address.toString(16)),
newIPv6);
byte[] ipv4Addr2 = NAT64AddrInfo.ipv4AddressStringToBytes(otherIPv4);
String ipv4Addr2Hex = NAT64AddrInfo.bytesToHexString(ipv4Addr2);
newIPv6 = nat64AddrInfo.getIPv6Address(otherIPv4);
assertEquals(
NAT64AddrInfo.hexStringToIPv6String(
buildIPv6Addr(prefix, suffix, ipv4Addr2Hex)),
newIPv6);
}
@Test
public void testInvalidIPv4Format() {
testInvalidIPv4Format("256.1.2.3");
testInvalidIPv4Format("FE80:CD00:0000:0CDA:1357:0000:212F:749C");
}
private void testInvalidIPv4Format(String ipv4Str) {
try {
NAT64AddrInfo.ipv4AddressStringToBytes(ipv4Str);
fail("Did not throw IllegalArgumentException");
} catch (IllegalArgumentException exc) {
/* OK */
}
}
}

25
android/settings.gradle Normal file
View File

@@ -0,0 +1,25 @@
rootProject.name = 'jitsi-meet'
include ':app', ':sdk'
include ':react-native-background-timer'
project(':react-native-background-timer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-timer/android')
include ':react-native-fast-image'
project(':react-native-fast-image').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fast-image/android')
include ':react-native-google-signin'
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-signin/android')
include ':react-native-immersive'
project(':react-native-immersive').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immersive/android')
include ':react-native-keep-awake'
project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android')
include ':react-native-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')
include ':react-native-locale-detector'
project(':react-native-locale-detector').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-locale-detector/android')
include ':react-native-sound'
project(':react-native-sound').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sound/android')
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':react-native-webrtc'
project(':react-native-webrtc').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webrtc/android')
include ':react-native-calendar-events'
project(':react-native-calendar-events').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-calendar-events/android')

144
app.js
View File

@@ -1,101 +1,53 @@
/* jshint -W117 */
/* application specific logic */
require("jquery");
require("jquery-ui");
require("strophe");
require("strophe-disco");
require("strophe-caps");
require("tooltip");
require("popover");
window.toastr = require("toastr");
require("jQuery-Impromptu");
require("autosize");
// FIXME: remove once atlaskit work with React 16
// It seems that @atlaskit/icon is importing PropTypes from React, but it
// happens through some glyph coffee script template. It could be that more
// things are broken there (not only the icon).
import './react/features/base/react/prop-types-polyfill.js';
var APP =
{
init: function () {
this.UI = require("./modules/UI/UI");
this.API = require("./modules/API/API");
this.connectionquality =
require("./modules/connectionquality/connectionquality");
this.statistics = require("./modules/statistics/statistics");
this.RTC = require("./modules/RTC/RTC");
this.desktopsharing =
require("./modules/desktopsharing/desktopsharing");
this.xmpp = require("./modules/xmpp/xmpp");
this.keyboardshortcut =
require("./modules/keyboardshortcut/keyboardshortcut");
this.translation = require("./modules/translation/translation");
this.settings = require("./modules/settings/Settings");
//this.DTMF = require("./modules/DTMF/DTMF");
this.members = require("./modules/members/MemberList");
this.configFetch = require("./modules/config/HttpConfigFetch");
}
import 'jquery';
import 'jquery-contextmenu';
import 'jQuery-Impromptu';
import 'autosize';
import conference from './conference';
import API from './modules/API';
import keyboardshortcut from './modules/keyboardshortcut/keyboardshortcut';
import remoteControl from './modules/remotecontrol/RemoteControl';
import translation from './modules/translation/translation';
import UI from './modules/UI/UI';
window.APP = {
API,
conference,
// Used by do_external_connect.js if we receive the attach data after
// connect was already executed. status property can be 'initialized',
// 'ready', or 'connecting'. We are interested in 'ready' status only which
// means that connect was executed but we have to wait for the attach data.
// In status 'ready' handler property will be set to a function that will
// finish the connect process when the attach data or error is received.
connect: {
handler: null,
status: 'initialized'
},
// Used for automated performance tests.
connectionTimes: {
'index.loaded': window.indexLoadedTime
},
keyboardshortcut,
remoteControl,
translation,
UI
};
function init() {
APP.desktopsharing.init();
APP.RTC.start();
APP.xmpp.start();
APP.statistics.start();
APP.connectionquality.init();
APP.keyboardshortcut.init();
APP.members.start();
}
/**
* If we have HTTP endpoint for getting confgi.json configured we're going to
* read it and override properties from config.js and interfaceConfig.js.
* If there is no endpoint we'll just continue with initialization.
* Keep in mind that if the endpoint has been configured and we fail to obtain
* the config for any reason then the conference won't start and error message
* will be displayed to the user.
*/
function obtainConfigAndInit() {
if (config.configLocation) {
APP.configFetch.obtainConfig(
config.configLocation, APP.UI.getRoomNode(),
// Get config result callback
function(success, error) {
if (success) {
console.log("(TIME) configuration fetched:\t",
window.performance.now());
init();
} else {
// Show obtain config error,
// pass the error object for report
APP.UI.messageHandler.openReportDialog(
null, "dialog.connectError", error);
}
});
} else {
init();
}
}
$(document).ready(function () {
console.log("(TIME) document ready:\t", window.performance.now());
var URLProcessor = require("./modules/config/URLProcessor");
URLProcessor.setConfigParametersFromUrl();
APP.init();
APP.translation.init();
if(APP.API.isEnabled())
APP.API.init();
APP.UI.start(obtainConfigAndInit);
});
$(window).bind('beforeunload', function () {
if(APP.API.isEnabled())
APP.API.dispose();
});
module.exports = APP;
// TODO The execution of the mobile app starts from react/index.native.js.
// Similarly, the execution of the Web app should start from react/index.web.js
// for the sake of consistency and ease of understanding. Temporarily though
// because we are at the beginning of introducing React into the Web app, allow
// the execution of the Web app to start from app.js in order to reduce the
// complexity of the beginning step.
import './react';

2713
conference.js Normal file

File diff suppressed because it is too large Load Diff

485
config.js
View File

@@ -1,71 +1,438 @@
/* jshint -W101 */
var config = {
// configLocation: './config.json', // see ./modules/HttpConfigFetch.js
hosts: {
domain: 'jitsi-meet.example.com',
//anonymousdomain: 'guest.example.com',
muc: 'conference.jitsi-meet.example.com', // FIXME: use XEP-0030
bridge: 'jitsi-videobridge.jitsi-meet.example.com', // FIXME: use XEP-0030
//jirecon: 'jirecon.jitsi-meet.example.com',
//call_control: 'callcontrol.jitsi-meet.example.com',
//focus: 'focus.jitsi-meet.example.com' - defaults to 'focus.jitsi-meet.example.com'
},
// getroomnode: function (path) { return 'someprefixpossiblybasedonpath'; },
// useStunTurn: true, // use XEP-0215 to fetch STUN and TURN server
// useIPv6: true, // ipv6 support. use at your own risk
useNicks: false,
bosh: '//jitsi-meet.example.com/http-bind', // FIXME: use xep-0156 for that
clientNode: 'http://jitsi.org/jitsimeet', // The name of client node advertised in XEP-0115 'c' stanza
//focusUserJid: 'focus@auth.jitsi-meet.example.com', // The real JID of focus participant - can be overridden here
//defaultSipNumber: '', // Default SIP number
/* eslint-disable no-unused-vars, no-var */
var config = {
// Configuration
//
// Alternative location for the configuration.
// configLocation: './config.json',
// Custom function which given the URL path should return a room name.
// getroomnode: function (path) { return 'someprefixpossiblybasedonpath'; },
// Connection
//
hosts: {
// XMPP domain.
domain: 'jitsi-meet.example.com',
// When using authentication, domain for guest users.
// anonymousdomain: 'guest.example.com',
// Domain for authenticated users. Defaults to <domain>.
// authdomain: 'jitsi-meet.example.com',
// Jirecon recording component domain.
// jirecon: 'jirecon.jitsi-meet.example.com',
// Call control component (Jigasi).
// call_control: 'callcontrol.jitsi-meet.example.com',
// Focus component domain. Defaults to focus.<domain>.
// focus: 'focus.jitsi-meet.example.com',
// XMPP MUC domain. FIXME: use XEP-0030 to discover it.
muc: 'conference.jitsi-meet.example.com'
},
// BOSH URL. FIXME: use XEP-0156 to discover it.
bosh: '//jitsi-meet.example.com/http-bind',
// The name of client node advertised in XEP-0115 'c' stanza
clientNode: 'http://jitsi.org/jitsimeet',
// The real JID of focus participant - can be overridden here
// focusUserJid: 'focus@auth.jitsi-meet.example.com',
// Testing / experimental features.
//
testing: {
// Enables experimental simulcast support on Firefox.
enableFirefoxSimulcast: false,
// P2P test mode disables automatic switching to P2P when there are 2
// participants in the conference.
p2pTestMode: false
// Enables the test specific features consumed by jitsi-meet-torture
// testMode: false
},
// Disables ICE/UDP by filtering out local and remote UDP candidates in
// signalling.
// webrtcIceUdpDisable: false,
// Disables ICE/TCP by filtering out local and remote TCP candidates in
// signalling.
// webrtcIceTcpDisable: false,
// Media
//
// Audio
// Disable measuring of audio levels.
// disableAudioLevels: false,
// Start the conference in audio only mode (no video is being received nor
// sent).
// startAudioOnly: false,
// Every participant after the Nth will start audio muted.
// startAudioMuted: 10,
// Start calls with audio muted. Unlike the option above, this one is only
// applied locally. FIXME: having these 2 options is confusing.
// startWithAudioMuted: false,
// Video
// Sets the preferred resolution (height) for local video. Defaults to 720.
// resolution: 720,
// w3c spec-compliant video constraints to use for video capture. Currently
// used by browsers that return true from lib-jitsi-meet's
// util#browser#usesNewGumFlow. The constraints are independency from
// this config's resolution value. Defaults to requesting an ideal aspect
// ratio of 16:9 with an ideal resolution of 720.
// constraints: {
// video: {
// aspectRatio: 16 / 9,
// height: {
// ideal: 720,
// max: 720,
// min: 240
// }
// }
// },
// Enable / disable simulcast support.
// disableSimulcast: false,
// Enable / disable layer suspension. If enabled, endpoints whose HD
// layers are not in use will be suspended (no longer sent) until they
// are requested again.
// enableLayerSuspension: false,
// Suspend sending video if bandwidth estimation is too low. This may cause
// problems with audio playback. Disabled until these are fixed.
disableSuspendVideo: true,
// Every participant after the Nth will start video muted.
// startVideoMuted: 10,
// Start calls with video muted. Unlike the option above, this one is only
// applied locally. FIXME: having these 2 options is confusing.
// startWithVideoMuted: false,
// If set to true, prefer to use the H.264 video codec (if supported).
// Note that it's not recommended to do this because simulcast is not
// supported when using H.264. For 1-to-1 calls this setting is enabled by
// default and can be toggled in the p2p section.
// preferH264: true,
// If set to true, disable H.264 video codec by stripping it out of the
// SDP.
// disableH264: false,
// Desktop sharing
// Desktop sharing method. Can be set to 'ext', 'webrtc' or false to disable.
desktopSharingChromeMethod: 'ext',
// The ID of the jidesha extension for Chrome.
desktopSharingChromeExtId: 'diibjkoicjeejcmhdnailmkgecihlobk',
desktopSharingChromeExtId: null,
// Whether desktop sharing should be disabled on Chrome.
desktopSharingChromeDisabled: true,
// The media sources to use when using screen sharing with the Chrome
// extension.
desktopSharingChromeSources: ['screen', 'window'],
desktopSharingChromeSources: [ 'screen', 'window', 'tab' ],
// Required version of Chrome extension
desktopSharingChromeMinExtVersion: '0.1',
// The ID of the jidesha extension for Firefox. If null, we assume that no
// extension is required.
desktopSharingFirefoxExtId: null,
// Whether desktop sharing should be disabled on Firefox.
desktopSharingFirefoxDisabled: true,
// The maximum version of Firefox which requires a jidesha extension.
// Example: if set to 41, we will require the extension for Firefox versions
// up to and including 41. On Firefox 42 and higher, we will run without the
// extension.
// If set to -1, an extension will be required for all versions of Firefox.
desktopSharingFirefoxMaxVersionExtRequired: -1,
// The URL to the Firefox extension for desktop sharing.
desktopSharingFirefoxExtensionURL: null,
desktopSharingFirefoxDisabled: false,
// Disables ICE/UDP by filtering out local and remote UDP candidates in signalling.
webrtcIceUdpDisable: false,
// Disables ICE/TCP by filtering out local and remote TCP candidates in signalling.
webrtcIceTcpDisable: false,
// Optional desktop sharing frame rate options. Default value: min:5, max:5.
// desktopSharingFrameRate: {
// min: 5,
// max: 5
// },
openSctp: true, // Toggle to enable/disable SCTP channels
disableStats: false,
disableAudioLevels: false,
channelLastN: -1, // The default value of the channel attribute last-n.
adaptiveLastN: false,
adaptiveSimulcast: false,
enableRecording: false,
// Try to start calls with screen-sharing instead of camera video.
// startScreenSharing: false,
// Recording
// Whether to enable file recording or not.
// fileRecordingsEnabled: false,
// Enable the dropbox integration.
// dropbox: {
// appKey: '<APP_KEY>' // Specify your app key here.
// },
// Whether to enable live streaming or not.
// liveStreamingEnabled: false,
// Transcription (in interface_config,
// subtitles and buttons can be configured)
// transcribingEnabled: false,
// Misc
// Default value for the channel "last N" attribute. -1 for unlimited.
channelLastN: -1,
// Disables or enables RTX (RFC 4588) (defaults to false).
// disableRtx: false,
// Disables or enables TCC (the default is in Jicofo and set to true)
// (draft-holmer-rmcat-transport-wide-cc-extensions-01). This setting
// affects congestion control, it practically enables send-side bandwidth
// estimations.
// enableTcc: true,
// Disables or enables REMB (the default is in Jicofo and set to false)
// (draft-alvestrand-rmcat-remb-03). This setting affects congestion
// control, it practically enables recv-side bandwidth estimations. When
// both TCC and REMB are enabled, TCC takes precedence. When both are
// disabled, then bandwidth estimations are disabled.
// enableRemb: false,
// Defines the minimum number of participants to start a call (the default
// is set in Jicofo and set to 2).
// minParticipants: 2,
// Use XEP-0215 to fetch STUN and TURN servers.
// useStunTurn: true,
// Enable IPv6 support.
// useIPv6: true,
// Enables / disables a data communication channel with the Videobridge.
// Values can be 'datachannel', 'websocket', true (treat it as
// 'datachannel'), undefined (treat it as 'datachannel') and false (don't
// open any channel).
// openBridgeChannel: true,
// UI
//
// Use display name as XMPP nickname.
// useNicks: false,
// Require users to always specify a display name.
// requireDisplayName: true,
// Whether to use a welcome page or not. In case it's false a random room
// will be joined when no room is specified.
enableWelcomePage: true,
enableSimulcast: false, // blocks FF support
logStats: false, // Enable logging of PeerConnection stats via the focus
// requireDisplayName: true,//Forces the participants that doesn't have display name to enter it when they enter the room.
// startAudioMuted: 10, //every participant after the Nth will start audio muted
// startVideoMuted: 10, //every participant after the Nth will start video muted
// defaultLanguage: "en",
// To enable sending statistics to callstats.io you should provide Applicaiton ID and Secret.
// callStatsID: "",//Application ID for callstats.io API
// callStatsSecret: ""//Secret for callstats.io API
/*noticeMessage: 'Service update is scheduled for 16th March 2015. ' +
'During that time service will not be available. ' +
'Apologise for inconvenience.'*/
// Enabling the close page will ignore the welcome page redirection when
// a call is hangup.
// enableClosePage: false,
// Disable hiding of remote thumbnails when in a 1-on-1 conference call.
// disable1On1Mode: false,
// Default language for the user interface.
// defaultLanguage: 'en',
// If true all users without a token will be considered guests and all users
// with token will be considered non-guests. Only guests will be allowed to
// edit their profile.
enableUserRolesBasedOnToken: false,
// Whether or not some features are checked based on token.
// enableFeaturesBasedOnToken: false,
// Message to show the users. Example: 'The service will be down for
// maintenance at 01:00 AM GMT,
// noticeMessage: '',
// Enables calendar integration, depends on googleApiApplicationClientID
// and microsoftApiApplicationClientID
// enableCalendarIntegration: false,
// Stats
//
// Whether to enable stats collection or not in the TraceablePeerConnection.
// This can be useful for debugging purposes (post-processing/analysis of
// the webrtc stats) as it is done in the jitsi-meet-torture bandwidth
// estimation tests.
// gatherStats: false,
// To enable sending statistics to callstats.io you must provide the
// Application ID and Secret.
// callStatsID: '',
// callStatsSecret: '',
// enables callstatsUsername to be reported as statsId and used
// by callstats as repoted remote id
// enableStatsID: false
// enables sending participants display name to callstats
// enableDisplayNameInStats: false
// Privacy
//
// If third party requests are disabled, no other server will be contacted.
// This means avatars will be locally generated and callstats integration
// will not function.
// disableThirdPartyRequests: false,
// Peer-To-Peer mode: used (if enabled) when there are just 2 participants.
//
p2p: {
// Enables peer to peer mode. When enabled the system will try to
// establish a direct connection when there are exactly 2 participants
// in the room. If that succeeds the conference will stop sending data
// through the JVB and use the peer to peer connection instead. When a
// 3rd participant joins the conference will be moved back to the JVB
// connection.
enabled: true,
// Use XEP-0215 to fetch STUN and TURN servers.
// useStunTurn: true,
// The STUN servers that will be used in the peer to peer connections
stunServers: [
{ urls: 'stun:stun.l.google.com:19302' },
{ urls: 'stun:stun1.l.google.com:19302' },
{ urls: 'stun:stun2.l.google.com:19302' }
],
// Sets the ICE transport policy for the p2p connection. At the time
// of this writing the list of possible values are 'all' and 'relay',
// but that is subject to change in the future. The enum is defined in
// the WebRTC standard:
// https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum.
// If not set, the effective value is 'all'.
// iceTransportPolicy: 'all',
// If set to true, it will prefer to use H.264 for P2P calls (if H.264
// is supported).
preferH264: true
// If set to true, disable H.264 video codec by stripping it out of the
// SDP.
// disableH264: false,
// How long we're going to wait, before going back to P2P after the 3rd
// participant has left the conference (to filter out page reload).
// backToP2PDelay: 5
},
// A list of scripts to load as lib-jitsi-meet "analytics handlers".
// analyticsScriptUrls: [
// "libs/analytics-ga.js", // google-analytics
// "https://example.com/my-custom-analytics.js"
// ],
// The Google Analytics Tracking ID
// googleAnalyticsTrackingId = 'your-tracking-id-here-UA-123456-1',
// Information about the jitsi-meet instance we are connecting to, including
// the user region as seen by the server.
deploymentInfo: {
// shard: "shard1",
// region: "europe",
// userRegion: "asia"
}
// Local Recording
//
// localRecording: {
// Enables local recording.
// Additionally, 'localrecording' (all lowercase) needs to be added to
// TOOLBAR_BUTTONS in interface_config.js for the Local Recording
// button to show up on the toolbar.
//
// enabled: true,
//
// The recording format, can be one of 'ogg', 'flac' or 'wav'.
// format: 'flac'
//
// }
// Options related to end-to-end (participant to participant) ping.
// e2eping: {
// // The interval in milliseconds at which pings will be sent.
// // Defaults to 10000, set to <= 0 to disable.
// pingInterval: 10000,
//
// // The interval in milliseconds at which analytics events
// // with the measured RTT will be sent. Defaults to 60000, set
// // to <= 0 to disable.
// analyticsInterval: 60000,
// }
// List of undocumented settings used in jitsi-meet
/**
_immediateReloadThreshold
autoRecord
autoRecordToken
debug
debugAudioLevels
deploymentInfo
dialInConfCodeUrl
dialInNumbersUrl
dialOutAuthUrl
dialOutCodesUrl
disableRemoteControl
displayJids
enableLocalVideoFlip
etherpad_base
externalConnectUrl
firefox_fake_device
googleApiApplicationClientID
googleApiIOSClientID
iAmRecorder
iAmSipGateway
microsoftApiApplicationClientID
peopleSearchQueryTypes
peopleSearchUrl
requireDisplayName
tokenAuthUrl
*/
// List of undocumented settings used in lib-jitsi-meet
/**
_peerConnStatusOutOfLastNTimeout
_peerConnStatusRtcMuteTimeout
abTesting
avgRtpStatsN
callStatsConfIDNamespace
callStatsCustomScriptUrl
desktopSharingSources
disableAEC
disableAGC
disableAP
disableHPF
disableNS
enableLipSync
enableTalkWhileMuted
forceJVB121Ratio
hiddenDomain
ignoreStartMuted
nick
startBitrate
*/
};
/* eslint-enable no-unused-vars, no-var */

191
connection.js Normal file
View File

@@ -0,0 +1,191 @@
/* global APP, JitsiMeetJS, config */
import AuthHandler from './modules/UI/authentication/AuthHandler';
import jitsiLocalStorage from './modules/util/JitsiLocalStorage';
import {
connectionEstablished,
connectionFailed
} from './react/features/base/connection';
import {
isFatalJitsiConnectionError,
JitsiConnectionErrors,
JitsiConnectionEvents
} from './react/features/base/lib-jitsi-meet';
const logger = require('jitsi-meet-logger').getLogger(__filename);
/**
* Checks if we have data to use attach instead of connect. If we have the data
* executes attach otherwise check if we have to wait for the data. If we have
* to wait for the attach data we are setting handler to APP.connect.handler
* which is going to be called when the attach data is received otherwise
* executes connect.
*
* @param {string} [id] user id
* @param {string} [password] password
* @param {string} [roomName] the name of the conference.
*/
function checkForAttachParametersAndConnect(id, password, connection) {
if (window.XMPPAttachInfo) {
APP.connect.status = 'connecting';
// When connection optimization is not deployed or enabled the default
// value will be window.XMPPAttachInfo.status = "error"
// If the connection optimization is deployed and enabled and there is
// a failure the value will be window.XMPPAttachInfo.status = "error"
if (window.XMPPAttachInfo.status === 'error') {
connection.connect({
id,
password
});
return;
}
const attachOptions = window.XMPPAttachInfo.data;
if (attachOptions) {
connection.attach(attachOptions);
delete window.XMPPAttachInfo.data;
} else {
connection.connect({
id,
password
});
}
} else {
APP.connect.status = 'ready';
APP.connect.handler
= checkForAttachParametersAndConnect.bind(
null,
id, password, connection);
}
}
/**
* Try to open connection using provided credentials.
* @param {string} [id]
* @param {string} [password]
* @param {string} [roomName]
* @returns {Promise<JitsiConnection>} connection if
* everything is ok, else error.
*/
function connect(id, password, roomName) {
const connectionConfig = Object.assign({}, config);
const { issuer, jwt } = APP.store.getState()['features/base/jwt'];
connectionConfig.bosh += `?room=${roomName}`;
const connection
= new JitsiMeetJS.JitsiConnection(
null,
jwt && issuer && issuer !== 'anonymous' ? jwt : undefined,
connectionConfig);
return new Promise((resolve, reject) => {
connection.addEventListener(
JitsiConnectionEvents.CONNECTION_ESTABLISHED,
handleConnectionEstablished);
connection.addEventListener(
JitsiConnectionEvents.CONNECTION_FAILED,
handleConnectionFailed);
connection.addEventListener(
JitsiConnectionEvents.CONNECTION_FAILED,
connectionFailedHandler);
/* eslint-disable max-params */
/**
*
*/
function connectionFailedHandler(error, message, credentials, details) {
/* eslint-enable max-params */
APP.store.dispatch(
connectionFailed(
connection, {
credentials,
details,
message,
name: error
}));
if (isFatalJitsiConnectionError(error)) {
connection.removeEventListener(
JitsiConnectionEvents.CONNECTION_FAILED,
connectionFailedHandler);
}
}
/**
*
*/
function unsubscribe() {
connection.removeEventListener(
JitsiConnectionEvents.CONNECTION_ESTABLISHED,
handleConnectionEstablished);
connection.removeEventListener(
JitsiConnectionEvents.CONNECTION_FAILED,
handleConnectionFailed);
}
/**
*
*/
function handleConnectionEstablished() {
APP.store.dispatch(connectionEstablished(connection, Date.now()));
unsubscribe();
resolve(connection);
}
/**
*
*/
function handleConnectionFailed(err) {
unsubscribe();
logger.error('CONNECTION FAILED:', err);
reject(err);
}
checkForAttachParametersAndConnect(id, password, connection);
});
}
/**
* Open JitsiConnection using provided credentials.
* If retry option is true it will show auth dialog on PASSWORD_REQUIRED error.
*
* @param {object} options
* @param {string} [options.id]
* @param {string} [options.password]
* @param {string} [options.roomName]
* @param {boolean} [retry] if we should show auth dialog
* on PASSWORD_REQUIRED error.
*
* @returns {Promise<JitsiConnection>}
*/
export function openConnection({ id, password, retry, roomName }) {
const usernameOverride
= jitsiLocalStorage.getItem('xmpp_username_override');
const passwordOverride
= jitsiLocalStorage.getItem('xmpp_password_override');
if (usernameOverride && usernameOverride.length > 0) {
id = usernameOverride; // eslint-disable-line no-param-reassign
}
if (passwordOverride && passwordOverride.length > 0) {
password = passwordOverride; // eslint-disable-line no-param-reassign
}
return connect(id, password, roomName).catch(err => {
if (retry) {
const { issuer, jwt } = APP.store.getState()['features/base/jwt'];
if (err === JitsiConnectionErrors.PASSWORD_REQUIRED
&& (!jwt || issuer === 'anonymous')) {
return AuthHandler.requestAuth(roomName, connect);
}
}
throw err;
});
}

View File

@@ -0,0 +1,3 @@
module.exports = {
'extends': '../react/.eslintrc.js'
};

View File

@@ -0,0 +1,85 @@
/* global config, createConnectionExternally */
import getRoomName from '../react/features/base/config/getRoomName';
import parseURLParams from '../react/features/base/config/parseURLParams';
/**
* Implements external connect using createConnectionExternally function defined
* in external_connect.js for Jitsi Meet. Parses the room name and JSON Web
* Token (JWT) from the URL and executes createConnectionExternally.
*
* NOTE: If you are using lib-jitsi-meet without Jitsi Meet, you should use this
* file as reference only because the implementation is Jitsi Meet-specific.
*
* NOTE: For optimal results this file should be included right after
* external_connect.js.
*/
if (typeof createConnectionExternally === 'function') {
// URL params have higher priority than config params.
let url
= parseURLParams(window.location, true, 'hash')[
'config.externalConnectUrl']
|| config.externalConnectUrl;
const isRecorder
= parseURLParams(window.location, true, 'hash')['config.iAmRecorder'];
let roomName;
if (url && (roomName = getRoomName()) && !isRecorder) {
url += `?room=${roomName}`;
const token = parseURLParams(window.location, true, 'search').jwt;
if (token) {
url += `&token=${token}`;
}
createConnectionExternally(
url,
connectionInfo => {
// Sets that global variable to be used later by connect method
// in connection.js.
window.XMPPAttachInfo = {
status: 'success',
data: connectionInfo
};
checkForConnectHandlerAndConnect();
},
errorCallback);
} else {
errorCallback();
}
} else {
errorCallback();
}
/**
* Check if connect from connection.js was executed and executes the handler
* that is going to finish the connect work.
*
* @returns {void}
*/
function checkForConnectHandlerAndConnect() {
window.APP
&& window.APP.connect.status === 'ready'
&& window.APP.connect.handler();
}
/**
* Implements a callback to be invoked if anything goes wrong.
*
* @param {Error} error - The specifics of what went wrong.
* @returns {void}
*/
function errorCallback(error) {
// The value of error is undefined if external connect is disabled.
error && console.warn(error);
// Sets that global variable to be used later by connect method in
// connection.js.
window.XMPPAttachInfo = {
status: 'error'
};
checkForConnectHandlerAndConnect();
}

14
css/404.scss Normal file
View File

@@ -0,0 +1,14 @@
.error_page {
width: 60%;
margin: 20% auto;
text-align: center;
h2 {
font-size: 36px;
}
&__message {
font-size: 24px;
margin-top: 20px;
}
}

View File

@@ -0,0 +1,57 @@
/**
* Move Atlaskit Flag up a little bit so it does not cover the toolbar with the
* first notification.
*/
.cxGWJB{
bottom: calc(#{$newToolbarSizeWithPadding}) !important;
}
.gXSEsl:nth-child(n+2) {
transform: translateX(0) translateY(100%) translateY(16px) !important;
-ms-transform: translateX(0) translateY(100%) translateY(16px) !important;
-webkit-transform: translateX(0) translateY(100%) translateY(16px) !important;
}
/**
* Welcome page tab color adjustments.
*/
.welcome {
/**
* The text color of the selected tab and hovered tabs.
*/
.bVobOt,
.bVobOt:hover,
.ebveIl:hover {
color: #172B4D;
}
/**
* The color of the inactive tab text.
*/
.ebveIl {
color: #FFFFFF;
}
/**
* The color of the underline of a selected tab.
*/
.kByArU {
background-color: #172B4D;
}
}
.modal-dialog-form {
/**
* Update the dropdown trigger wrapper to make sure it looks click-able.
*/
.gwEjuO {
cursor: pointer;
}
/**
* Override Atlaskit dropdown styling when in a modal because the dropdown
* backgrounds clash with the modal backgrounds.
*/
.gBLqhw[data-role=droplistContent] {
border: 1px solid #455166;
}
}

229
css/_aui_reset.scss Normal file
View File

@@ -0,0 +1,229 @@
/* Fonts and line heights */
/**
* RESET
*/
html,
body,
p,
div,
h1,
h2,
h3,
h4,
h5,
h6,
img,
pre,
form,
fieldset {
margin: 0;
padding: 0;
}
ul,
ol,
dl {
margin: 0;
}
img,
fieldset {
border: 0;
}
@-moz-document url-prefix() {
img {
font-size: 0;
}
img:-moz-broken {
font-size: inherit;
}
}
/* https://github.com/necolas/normalize.css */
/* Customised to remove styles for unsupported browsers */
details,
main,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block;
vertical-align: baseline;
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden],
template {
display: none;
}
input[type="button"],
input[type="submit"],
input[type="reset"] {
-webkit-appearance: button;
}
/**
* TYPOGRAPHY - 14px base font size, agnostic font stack
*/
body {
color: #333;
font-family: Arial, sans-serif;
font-size: 14px;
line-height: 1.42857142857143;
}
/* International Font Stacks*/
[lang|=en] {
font-family: Arial, sans-serif;
}
[lang|=ja] {
font-family: "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", "メイリオ", Meiryo, " Pゴシック", Verdana, Arial, sans-serif;
}
/* Default margins */
p,
ul,
ol,
dl,
h1,
h2,
h3,
h4,
h5,
h6,
blockquote,
pre {
margin: 10px 0 0 0;
}
/* No top margin to interfere with box padding */
p:first-child,
ul:first-child,
ol:first-child,
dl:first-child,
h1:first-child,
h2:first-child,
h3:first-child,
h4:first-child,
h5:first-child,
h6:first-child,
blockquote:first-child,
pre:first-child {
margin-top: 0;
}
/* Headings: desired line height in px / font size = unitless line height */
h1 {
color: #333;
font-size: 32px;
font-weight: normal;
line-height: 1.25;
text-transform: none;
margin: 30px 0 0 0;
}
h2 {
color: #333;
font-size: 24px;
font-weight: normal;
line-height: 1.25;
text-transform: none;
margin: 30px 0 0 0;
}
h3 {
color: #333;
font-size: 20px;
font-weight: normal;
line-height: 1.5;
text-transform: none;
margin: 30px 0 0 0;
}
h4 {
font-size: 16px;
font-weight: bold;
line-height: 1.25;
text-transform: none;
margin: 20px 0 0 0;
}
h5 {
color: #333;
font-size: 14px;
font-weight: bold;
line-height: 1.42857143;
text-transform: none;
margin: 20px 0 0 0;
}
h6 {
color: #707070;
font-size: 12px;
font-weight: bold;
line-height: 1.66666667;
text-transform: uppercase;
margin: 20px 0 0 0;
}
h1:first-child,
h2:first-child,
h3:first-child,
h4:first-child,
h5:first-child,
h6:first-child {
margin-top: 0;
}
/* Nice styles for using subheadings */
h1 + h2,
h2 + h3,
h3 + h4,
h4 + h5,
h5 + h6 {
margin-top: 10px;
}
/* Other typographical elements */
small {
color: #707070;
font-size: 12px;
line-height: 1.33333333333333;
}
code,
kbd {
font-family: monospace;
}
var,
address,
dfn,
cite {
font-style: italic;
}
cite:before {
content: "\2014 \2009";
}
blockquote {
border-left: 1px solid #ccc;
color: #707070;
margin-left: 19px;
padding: 10px 20px;
}
blockquote > cite {
display: block;
margin-top: 10px;
}
q {
color: #707070;
}
q:before {
content: open-quote;
}
q:after {
content: close-quote;
}
abbr {
border-bottom: 1px #707070 dotted;
cursor: help;
}
a {
color: #3572b0;
text-decoration: none;
}
a:focus,
a:hover,
a:active {
text-decoration: underline;
}

181
css/_base.scss Normal file
View File

@@ -0,0 +1,181 @@
/**
* Safari will limit input in input elements to one character when user-select
* none is applied. Other browsers already support selecting within inputs while
* user-select is none. As such, disallow user-select except on inputs.
*/
* {
-webkit-user-select: none;
user-select: none;
}
input,
textarea {
-webkit-user-select: text;
user-select: text;
}
html {
height: 100%;
width: 100%;
}
body {
margin: 0px;
width: 100%;
height: 100%;
font-size: 12px;
font-weight: 400;
overflow: hidden;
color: $defaultColor;
background: $defaultBackground;
&.filmstrip-only {
background: transparent;
}
}
/**
* AtlasKitThemeProvider sets a background color on an app-wrapping div, thereby
* preventing transparency in filmstrip-only mode. The selector chosen to
* override this behavior is specific to where the AtlasKitThemeProvider might
* be placed within the app hierarchy.
*/
.filmstrip-only #react > .ckAJgx {
background: transparent;
}
p {
margin: 0;
}
body, input, textarea, keygen, select, button {
font-family: $baseFontFamily !important;
}
#nowebrtc {
display:none;
}
.no-fa-video-camera, .fa-microphone-slash {
color: #636363;
}
button, input, select, textarea {
margin: 0;
vertical-align: baseline;
font-size: 1em;
}
button, select, input[type="button"],
input[type="reset"], input[type="submit"] {
cursor: pointer;
}
textarea {
word-wrap: break-word;
resize: none;
line-height: 1.5em;
}
input[type='text'], input[type='password'], textarea {
outline: none; /* removes the default outline */
resize: none; /* prevents the user-resizing, adjust to taste */
}
button {
color: #FFF;
background-color: $buttonBackground;
border-radius: $borderRadius;
&.no-icon {
padding: 0 1em;
}
}
button,
form {
display: block;
}
.watermark {
display: block;
position: absolute;
top: 15;
width: $watermarkWidth;
height: $watermarkHeight;
background-size: contain;
background-repeat: no-repeat;
z-index: $zindex2;
}
.leftwatermark {
left: 32px;
top: 32px;
background-image: url($defaultWatermarkLink);
background-position: center left;
}
.rightwatermark {
right: 32px;
top: 32px;
background-position: center right;
}
.poweredby {
position: absolute;
left: 25;
bottom: 7;
font-size: 11pt;
color: rgba(255,255,255,.50);
text-decoration: none;
z-index: $poweredByZ;
}
.connected {
color: #21B9FC;
font-size: 12px;
}
.lastN, .disconnected {
color: #a3a3a3;
font-size: 12px;
}
/**
* Dialogs fade
*/
.aui-blanket {
background: #000;
transition: opacity 0.2s, visibility 0.2s;
transition-delay: 0.1s;
visibility: visible;
}
#inviteLinkRef {
-webkit-user-select: text;
user-select: text;
}
/**
* Re-style default OS scrollbar.
*/
::-webkit-scrollbar {
background: transparent;
width: 7px;
}
::-webkit-scrollbar-button {
display: none;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-track-piece {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, .5);
border-radius: 4px;
}

293
css/_chat.scss Normal file
View File

@@ -0,0 +1,293 @@
#sideToolbarContainer {
background-color: $newToolbarBackgroundColor;
display: flex;
/**
* Make the sidebar flush with the top of the toolbar. Take the size of
* the toolbar and subtract from 100%.
*/
height: calc(100% - #{$newToolbarSizeWithPadding});
left: -$sidebarWidth;
overflow: hidden;
position: absolute;
top: 0;
transition: left 0.5s;
width: $sidebarWidth;
z-index: $sideToolbarContainerZ;
/**
* The sidebar (chat) is off-screen when hidden. Move it flush to the left
* side of the window when it should be visible.
*/
&.slideInExt {
left: 0;
}
.sideToolbarContainer__inner {
box-sizing: border-box;
color: #FFF;
display: flex;
flex-direction: column;
height: 100%;
width: $sidebarWidth;
}
}
#chat_container * {
-webkit-user-select: text;
user-select: text;
}
#chatconversation {
box-sizing: border-box;
flex: 1;
font-size: 10pt;
line-height: 20px;
margin-top: 15px;
overflow: auto;
padding: 5px;
text-align: left;
width: $sidebarWidth;
word-wrap: break-word;
a {
display: block;
}
a:link {
color: rgb(184, 184, 184);
}
a:visited {
color: white;
}
a:hover {
color: rgb(213, 213, 213);
}
a:active {
color: black;
}
&::-webkit-scrollbar {
background: #06a5df;
width: 7px;
}
&::-webkit-scrollbar-button {
display: none;
}
&::-webkit-scrollbar-track {
background: black;
}
&::-webkit-scrollbar-track-piece {
background: black;
}
&::-webkit-scrollbar-thumb {
background: #06a5df;
border-radius: 4px;
}
}
.chat-close {
background: gray;
border: 3px solid rgba(255, 255, 255, 0.1);
border-radius: 100%;
color: white;
cursor:pointer;
height: 10px;
line-height: 10px;
padding: 4px;
position: absolute;
right: 5px;
text-align: center;
top: 5px;
width: 10px;
z-index: 1;
}
#chat-input {
background-color: $newToolbarBackgroundColor;
display: flex;
}
.remoteuser {
color: #B8C7E0;
}
.usrmsg-form {
flex: 1;
margin-left: 5px;
}
#usermsg {
background-color: $newToolbarBackgroundColor;
border: 0px none;
border-radius:0;
box-shadow: none;
color: white;
font-size: 10pt;
line-height: 30px;
padding: 5px 5px 5px 0px;
max-height:150px;
min-height:35px;
overflow-y: auto;
resize: none;
width: 100%;
word-break: break-word;
}
#usermsg:hover {
border: 0px none;
box-shadow: none;
}
#nickname {
position: absolute;
text-align: center;
color: #9d9d9d;
font-size: 18px;
top: 100px;
left: 5px;
right: 5px;
width: 95%;
}
#chat_container .display-name {
float: left;
padding-left: 5px;
font-weight: bold;
white-space: nowrap;
text-overflow: ellipsis;
width: 95%;
overflow: hidden;
}
#chat_container .timestamp {
float: right;
padding-right: 5px;
font-size: 11px;
}
.usermessage {
padding-top: 20px;
padding-left: 5px;
}
.chatArrow {
height: 15px;
left: -10px;
position: absolute;
}
.chatmessage {
background-color: $newToolbarBackgroundColor;
width: 93%;
margin-left: 9px;
margin-right: auto;
border-radius: 5px;
border-top-left-radius: 0px;
margin-top: 3px;
color: white;
padding-bottom: 3px;
position: relative;
&.localuser .display-name {
color: #4C9AFF
}
&.error {
.chatArrow,
.timestamp,
.display-name {
display: none;
}
.usermessage {
color: red;
padding: 0;
}
}
}
.smiley {
height: 26px;
}
#smileys {
background: white;
border-radius: 50%;
display: inline-block;
height: 26px;
margin: auto;
cursor: pointer;
}
#smileys img {
width: 22px;
padding: 2px;
}
#smileysarea {
background-color: $newToolbarBackgroundColor;
border: 0px none;
display: flex;
height: 70px;
max-height: 150px;
min-height: 35px;
min-width: 31px;
padding: 0px;
overflow: hidden;
width: 17%;
}
.smiley-input {
position: relative;
}
.smileys-panel {
bottom: 100%;
box-sizing: border-box;
height: 0;
overflow: hidden;
position: absolute;
transition: height 0.3s;
width: $sidebarWidth;
&.show-smileys {
height: 202px;
}
#smileysContainer {
background-color: $newToolbarBackgroundColor;
border-bottom: 1px solid;
border-top: 1px solid;
}
}
#smileysContainer .smiley {
padding: 7px;
}
.smileyContainer {
width: 40px;
height: 40px;
display: inline-block;
}
.smileyContainer:hover {
background-color: $newToolbarButtonToggleColor;
border-radius: 5px;
cursor: pointer;
}
#usermsg::-webkit-input-placeholder {
line-height: 30px;
}
#usermsg::-webkit-scrollbar-track-piece {
background: #3a3a3a;
}

54
css/_connection-info.scss Normal file
View File

@@ -0,0 +1,54 @@
%connection-info {
font-size: 12px;
font-weight: 400;
td {
padding: 2px 0;
}
}
.connection-info
{
@extend %connection-info;
/**
* Apply negative margin to reduce the appearance of padding in AtlasKit
* InlineDialog.
*/
margin: -15px;
> table {
white-space: nowrap;
@extend %connection-info;
}
td:nth-child(n-1) {
padding-left: 5px;
}
&__icon {
margin-right: 2px;
}
&__download
{
@extend .connection-info__icon;
}
&__status
{
font-weight: bold;
}
&__upload
{
@extend .connection-info__icon;
}
.showmore {
display: block;
margin: 10px auto;
text-align: center;
width: 90px;
}
}

View File

@@ -255,9 +255,6 @@
.fa-road:before {
content: "\f018";
}
.fa-download:before {
content: "\f019";
}
.fa-arrow-circle-o-down:before {
content: "\f01a";
}
@@ -842,9 +839,6 @@
.fa-exchange:before {
content: "\f0ec";
}
.fa-cloud-download:before {
content: "\f0ed";
}
.fa-cloud-upload:before {
content: "\f0ee";
}

222
css/_font.scss Normal file
View File

@@ -0,0 +1,222 @@
@font-face {
font-family: 'jitsi';
src:url('../fonts/jitsi.eot?94d075');
src:url('../fonts/jitsi.eot?#iefix94d075') format('embedded-opentype'),
url('../fonts/jitsi.woff?94d075') format('woff'),
url('../fonts/jitsi.ttf?94d075') format('truetype'),
url('../fonts/jitsi.svg?94d075#jitsi') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="icon-"], [class*=" icon-"] {
font-family: 'jitsi';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1.22em;
font-size: 1.22em;
cursor: default;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-arrow_back:before {
content: "\e5c4";
}
.icon-close:before {
content: "\e5cd";
}
.icon-event_note:before {
content: "\e616";
}
.icon-menu:before {
content: "\e5d2";
}
.icon-navigate_before:before {
content: "\e408";
}
.icon-navigate_next:before {
content: "\e409";
}
.icon-public:before {
content: "\e80b";
}
.icon-restore:before {
content: "\e8b3";
}
.icon-timer:before {
content: "\e425";
}
.icon-thumb-menu:before {
content: "\e5d4";
}
.icon-mic-camera-combined:before {
content: "\e903";
}
.icon-feedback:before {
content: "\e91d";
}
.icon-toggle-filmstrip:before {
content: "\e91c";
}
.icon-avatar:before {
content: "\e901";
}
.icon-hangup:before {
content: "\e905";
}
.icon-chat:before {
content: "\e906";
}
.icon-download:before {
content: "\e902";
}
.icon-edit:before {
content: "\e907";
}
.icon-share-doc:before {
content: "\e908";
}
.icon-kick:before {
content: "\e904";
}
.icon-menu-up:before {
content: "\e91f";
}
.icon-menu-down:before {
content: "\e920";
}
.icon-full-screen:before {
content: "\e90b";
}
.icon-exit-full-screen:before {
content: "\e90c";
}
.icon-star-full:before {
content: "\e90a";
}
.icon-security:before {
content: "\e90d";
}
.icon-security-locked:before {
content: "\e90e";
}
.icon-reload:before {
content: "\e90f";
}
.icon-microphone:before {
content: "\e910";
}
.icon-mic-empty:before {
content: "\e911";
}
.icon-mic-disabled:before {
content: "\e912";
}
.icon-ninja:before {
content: "\e909";
}
.icon-raised-hand:before {
content: "\e91e";
}
.icon-contactList:before {
content: "\e91b";
}
.icon-link:before {
content: "\e913";
}
.icon-shared-video:before {
content: "\e914";
}
.icon-settings:before {
content: "\e915";
}
.icon-star:before {
content: "\e916";
}
.icon-switch-camera:before {
content: "\e921";
}
.icon-share-desktop:before {
content: "\e917";
}
.icon-camera:before {
content: "\e918";
}
.icon-camera-disabled:before {
content: "\e919";
}
.icon-volume:before {
content: "\e91a";
}
.icon-recDisable:before {
content: "\e613";
}
.icon-recEnable:before {
content: "\e614";
}
.icon-presentation:before {
content: "\e603";
}
.icon-dialpad:before {
content: "\e925";
}
.icon-visibility:before {
content: "\e923";
}
.icon-visibility-off:before {
content: "\e924";
}
.icon-telephone:before {
content: "\e0cd";
}
.icon-add:before {
content: "\e145";
}
.icon-info:before {
content: "\e922";
}
.icon-gsm-bars:before {
content: "\e926";
}
.icon-open_in_new:before {
content: "\e89e";
}
.icon-AUD:before {
content: "\e900";
}
.icon-HD:before {
content: "\e927";
}
.icon-LD:before {
content: "\e928";
}
.icon-SD:before {
content: "\e929";
}
.icon-camera-take-picture:before {
content: "\e92a";
}
.icon-rec:before {
content: "\e92b";
}
.icon-live:before {
content: "\e92c";
}
.icon-speaker:before {
content: "\e92d";
}
.icon-tiles-many:before {
content: "\e92e";
}
.icon-tiles-one:before {
content: "\e92f";
}
.icon-closed_caption:before {
content: "\e930";
}

6
css/_functions.scss Normal file
View File

@@ -0,0 +1,6 @@
/* Functions */
/* Pixels to Ems function */
@function em($value, $base: 16) {
@return #{$value / $base}em;
}

110
css/_inlay.scss Normal file
View File

@@ -0,0 +1,110 @@
.inlay {
margin-top: 14%;
@include border-radius(4px);
padding: 40px 38px 44px;
color: #fff;
background: $inlayColorBg;
text-align: center;
&__title {
margin: 17px 0;
padding-bottom: 17px;
color: $popoverFontColor;
font-size: 21px;
letter-spacing: 0.3px;
border-bottom: 1px solid $inlayBorderColor;
}
&__text {
color: $popoverFontColor;
display: block;
margin-top: 22px;
font-size: 16px;
}
&__icon {
margin: 0 10px;
font-size: 50px;
}
&-filmstrip-only {
background-color: $inlayFilmstripOnlyBg;
color: $inlayFilmstripOnlyColor;
margin-left: 20px;
margin-right: 20px;
margin-top: 20px;
bottom: 30px;
position: absolute;
display: flex;
max-height: 120px;
height: 80%;
right: 0px;
border-radius: 4px;
overflow: hidden;
&__content {
padding: 20px;
display: flex;
justify-content: center;
position: relative;
> .button-control {
align-self: center;
}
> #reloadProgressBar {
position: absolute;
left: 0px;
bottom: 0px;
margin-bottom: 0px;
width: 100%;
border-radius: 0px;
}
}
&__title {
font-size: 18px;
font-weight: 600;
}
&__container {
align-self: center;
}
&__text {
margin-top: 10px;
font-size: 14px;
font-weight: 600;
}
&__icon {
font-size: 50px;
align-self: center;
color: $inlayIconColor;
opacity: 0.6;
}
&__icon-container {
text-align: center;
display: flex;
justify-content: center;
position: absolute;
width: 100%;
height: 100%;
top: 0px;
}
&__avatar-container {
height: 100%;
position: relative;
> img {
height: 100%;
}
}
&__icon-background {
background: $inlayIconBg;
opacity: 0.6;
position: absolute;
width: 100%;
height: 100%;
top: 0px;
}
}
}

View File

@@ -9,7 +9,8 @@
}
div.jqi{
width: 400px;
position: absolute;
position: absolute;
color: #3a3a3a;
background-color: #ffffff;
font-size: 11px;
text-align: left;
@@ -55,7 +56,7 @@ div.jqi .jqibuttons{
div.jqi .jqibuttons button{
margin: 0;
padding: 5px 20px;
background-color: transparent;
background-color: transparent !important;
font-weight: normal;
border: none;
border-left: solid 1px #e4e4e4;

View File

@@ -0,0 +1,206 @@
@charset "UTF-8";
/*!
* jQuery contextMenu - Plugin for simple contextMenu handling
*
* Version: v2.1.1
*
* Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)
* Web: http://swisnl.github.io/jQuery-contextMenu/
*
* Copyright (c) 2011-2016 SWIS BV and contributors
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
* Date: 2016-02-28T09:53:18.890Z
*/
@font-face {
font-family: "context-menu-icons";
font-style: normal;
font-weight: normal;
src: url("font/context-menu-icons.eot?2qmzf");
src: url("font/context-menu-icons.eot?2qmzf#iefix") format("embedded-opentype"), url("font/context-menu-icons.woff2?2qmzf") format("woff2"), url("font/context-menu-icons.woff?2qmzf") format("woff"), url("font/context-menu-icons.ttf?2qmzf") format("truetype");
}
.context-menu-icon:before {
position: absolute;
top: 50%;
left: 0;
width: 28px;
font-family: "context-menu-icons";
font-size: 16px;
font-style: normal;
font-weight: normal;
line-height: 1;
color: #2980b9;
text-align: center;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.context-menu-icon-add:before {
content: "";
}
.context-menu-icon-copy:before {
content: "";
}
.context-menu-icon-cut:before {
content: "";
}
.context-menu-icon-delete:before {
content: "";
}
.context-menu-icon-edit:before {
content: "";
}
.context-menu-icon-paste:before {
content: "";
}
.context-menu-icon-quit:before {
content: "";
}
.context-menu-icon.context-menu-hover:before {
color: #fff;
}
.context-menu-list {
position: absolute;
display: inline-block;
min-width: 180px;
max-width: 360px;
padding: 4px 0;
margin: 5px;
font-family: inherit;
font-size: inherit;
list-style-type: none;
background: #fff;
border: 1px solid #bebebe;
border-radius: $borderRadius;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
}
.context-menu-item {
position: relative;
padding: 3px 28px;
color: #2f2f2f;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #fff;
}
.context-menu-separator {
padding: 0;
margin: 5px 0;
border-bottom: 1px solid #e6e6e6;
}
.context-menu-item > label > input,
.context-menu-item > label > textarea {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.context-menu-item.context-menu-hover {
color: #fff;
cursor: pointer;
background-color: #2980b9;
}
.context-menu-item.context-menu-disabled {
color: #626262;
background-color: #fff;
}
.context-menu-item.context-menu-disabled {
color: #626262;
}
.context-menu-input.context-menu-hover,
.context-menu-item.context-menu-disabled.context-menu-hover {
cursor: default;
background-color: #eee;
}
.context-menu-submenu:after {
position: absolute;
top: 50%;
right: 8px;
z-index: $zindex1;
width: 0;
height: 0;
content: '';
border-color: transparent transparent transparent #2f2f2f;
border-style: solid;
border-width: 4px 0 4px 4px;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
}
/**
* Inputs
*/
.context-menu-item.context-menu-input {
padding: 5px 10px;
}
/* vertically align inside labels */
.context-menu-input > label > * {
vertical-align: top;
}
/* position checkboxes and radios as icons */
.context-menu-input > label > input[type="checkbox"],
.context-menu-input > label > input[type="radio"] {
position: relative;
top: 3px;
}
.context-menu-input > label,
.context-menu-input > label > input[type="text"],
.context-menu-input > label > textarea,
.context-menu-input > label > select {
display: block;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.context-menu-input > label > textarea {
height: 100px;
}
.context-menu-item > .context-menu-list {
top: 5px;
/* re-positioned by js */
right: -5px;
display: none;
}
.context-menu-item.context-menu-visible > .context-menu-list {
display: block;
}
.context-menu-accesskey {
text-decoration: underline;
}

View File

@@ -0,0 +1,10 @@
.shortcuts-list {
list-style-type: none;
padding: 0;
&__item {
display: flex;
justify-content: space-between;
margin-bottom: em(7, 14);
}
}

18
css/_login_menu.scss Normal file
View File

@@ -0,0 +1,18 @@
/*Initialize*/
div.loginmenu {
position: absolute;
margin: 0;
padding: 5px;
top: 40px;
left: 20px;
}
a.disabled {
color: gray !important;
pointer-events: none;
}
.loginmenu.extendedToolbarPopup {
top: 20px;
left: 40px;
}

Some files were not shown because too many files have changed in this diff Show More