Commit Graph

1755 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé 36eb27e233 rn: add build information to SettingsView 2019-04-02 12:40:35 +02:00
Bettenbuk Zoltan b791fc32fd [RN] Make BaseIndicator render simpler 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan b1a70240fc Clear raise hand status on confidence leave 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 50d7c1521f Remove legacy web raise hand code 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 5d9762b429 Extract notification timeout to a constant 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 4e78502c9e Generalize indicators 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 6ff733dae0 Platform generic notification for raised hand 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 2dc59b9ea0 [RN] Add button to toggle raised hand 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan e65918564b [RN] Add UI for raised hand feature 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan ce9744b9c3 Move participant event handler to a platform generic location 2019-04-01 21:03:36 +02:00
Bettenbuk Zoltan 10e951c17c Reorg notifications feature files 2019-03-29 18:52:44 +01:00
Hristo Terezov 829e5597d5 fix(iframe-api-devices): Misc small issues. 2019-03-29 15:42:02 +00:00
Hristo Terezov f2e0704b93 fix(filmstrip-only): DeviceSelectionPopup 2019-03-29 15:42:02 +00:00
Hristo Terezov a7aaf31c79 feat(iframe-api): Add deviceListChanged event. 2019-03-29 15:42:02 +00:00
Hristo Terezov 4967488e56 ref(iframe-api-devices): Use labels instead of IDs 2019-03-29 15:42:02 +00:00
Hristo Terezov ed1d3d3df5 fix(api-devices): Initial device function calls 2019-03-29 15:42:02 +00:00
Hristo Terezov 427f49367b feat(iframe-api): Device handling. 2019-03-29 15:42:02 +00:00
paweldomas e839684ae9 fix(base/conference): tracks not added to the conference
If tracks are created while the conference is in the 'joining' state
they will never be added.
2019-03-27 10:06:59 +01:00
virtuacoplenny d7e112aaf0
fix(display-name): do not default name to placeholder name (#4027)
* ref(display-name): do not pass in display name

The component gets the state itself from redux.

* fix(display-name): do not default name to placeholder name

The web display name component supports inline editing of
the name. Problems can occur when the displayed name
differs from the actual saved name, because participants
without a display name, including the local user, have
a different, default display name displayed. So when
editing starts, the input field is populated with the
default name. To workaround such while supporting fetching
the display name using mapStateToProps, pass in both the
name which should be shown and the name value saved in
settings.

* ref(display-name): rename methods
2019-03-26 09:34:02 -07:00
Bettenbuk Zoltan 13212a5980 [RN] Replace chat modal with SlidingView 2019-03-25 14:52:43 +01:00
Bettenbuk Zoltan 2a5adfc601 Remove some Flow annotations 2019-03-25 13:53:08 +01:00
damencho 6894de00cc Fixes a typo of getting default number. 2019-03-23 09:59:25 +00:00
virtuacoplenny ac02a17943
feat(notifications): provide a way to turn off sticky notifications (#4010) 2019-03-21 14:06:33 -07:00
paweldomas 043d4db314 fix(NotificationsContainer.native): flow error 2019-03-21 17:09:56 +01:00
paweldomas 0175690a2b ref(mobile): display only the topmost notification
Only one notification will be displayed at a time on mobile.
2019-03-21 15:47:14 +01:00
paweldomas c7979a3944 feat(mobile): add 1 liner notifications
Adds 1 liner notifications to mobile. Only the title is displayed. In
case the title is missing there's a fallback to the description.
2019-03-21 15:47:14 +01:00
paweldomas 15fd27543a ref(Conference): extract AbstractConference 2019-03-21 15:47:14 +01:00
paweldomas 64f8a8d700 fix(AbstractNotificationsContainer): broken timeouts chain
If user dismisses the not topmost notification the timeout will be
cleared and a new one will not be set, because the top notification
remained the same (see the if at line 90).
2019-03-21 15:47:14 +01:00
paweldomas 95f684da2f fix(AbstractNotificationsContainer): dismiss timeout not always set
The docs of 'componentDidUpdate' say that it's not called for the
initial render. If the component is added to the DOM with 1 notification
already, then the update will not happen and timeout will never be set
which will effectively break the timeouts chain.
2019-03-21 15:47:14 +01:00
paweldomas f3f8dc2072 ref: move participant joined notification to the middleware 2019-03-21 15:47:14 +01:00
Saúl Ibarra Corretgé c025c7e132 flow: tame the beast
🔥🔥🔥
2019-03-21 14:47:55 +01:00
Saúl Ibarra Corretgé 0e92e73789 chore: use strings as action types
Using anything non-serializable for action types is discouraged:
https://redux.js.org/faq/actions#actions

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

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

Note how the `type` field is defined as a subtype of string, which Symbol isn’t.
2019-03-21 14:47:55 +01:00
Saúl Ibarra Corretgé b53a034aaf deps: update React Native to version 0.59
This new version comes with an updated JSC runtime, so we no longer need to
depend on the updated version ourselves.
2019-03-21 14:47:55 +01:00
paweldomas 4d1c0cf219 fix eslint error 2019-03-19 21:59:45 +01:00
virtuacoplenny a667c9bff2
ref: js-utils for random and room name generator (#3975) 2019-03-19 10:35:36 -07:00
Damien Fetis e652117571 Remove the boolean conversion of authLogin string to display the string value instead of 'true'. (#3995) 2019-03-19 08:55:14 -07:00
Hristo Terezov a6719896a2 fix(recording): Respect the selected recording service. 2019-03-15 20:12:25 +00:00
damencho f5a7e0bccb Adds provider name to fix welcomepage text.
* Removes unused ADD_PEOPLE_APP_NAME
* Moves deep-link header background and logo size as variables.
* Fixes more numbers page space in the header.
* Fixes left padding on deep-linking mobile page.
2019-03-15 11:24:18 +00:00
Hristo Terezov cb8e9eed5e feat(subject): UI 2019-03-12 23:03:58 +00:00
Saúl Ibarra Corretgé d39290f9fa rn: refactor conference events
Consolidate all failure cases into a single one: CONFERENCE_TERMINATED. If the
conference ended gracefully no error indicator will be present, otherwise there
will be.
2019-03-12 16:55:28 +01:00
Saúl Ibarra Corretgé 975ff9c83d rn: support passing serverURL and room to URL object
That's what the SDK passes now, if the room URL is not absolute.
2019-03-12 16:55:28 +01:00
Saúl Ibarra Corretgé b97cb3509a rn: document externalAPIScope prop 2019-03-12 16:55:28 +01:00
Saúl Ibarra Corretgé 7d8ea85ea0 rn: start removing defaultURL 2019-03-12 16:55:28 +01:00
Saúl Ibarra Corretgé e4c3e15791 rn: simplified code
There is no need for AbstractApp to require some getWindowLocation function.
It's only used in one place and we even polyfill it on mobile.

Thus replace it's usage with more specific functions.
2019-03-12 16:55:28 +01:00
Saúl Ibarra Corretgé 3fa5aed950 rn: drop deep / universal links handling from JS
It's now all handled in the SDK an we'll get the new URLs via props.
2019-03-12 16:55:28 +01:00
Hristo Terezov 59fc3642a6 feat(amplitude): add mobile implementation 2019-03-12 16:48:08 +01:00
Bettenbuk Zoltan 8400d01d75 [RN] Add color scheme support to dialog buttons 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan d04068344a [RN] Make header button same size as header label 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan 55a971c0fd [RN] Add color scheme support to header 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan 20c1b1cfae [RN] Wrap PagedList navigator with SafeAreaView 2019-03-12 12:36:15 +01:00
Bettenbuk Zoltan ecb44b6ab4 [RN] Make the header more compact 2019-03-12 12:36:15 +01:00
virtuacoplenny 22277ad799
feat(api): add notification for when filmstrip gets toggled (#3974) 2019-03-11 11:17:28 -07:00
Дамян Минков 12d0aef686 Updates recording dialog. (#3953)
* Updates recording dialog.

* Update config.js doc.

* Adds comment and make a check more intuitive.

* Changes of using enum for recording types.
2019-03-11 09:17:21 -07:00
Leonard Kim 81d4f694b7 fix(chat): prevent empty messages 2019-03-09 12:09:29 +01:00
damencho b3a05db286 Update dropbox redirect uri to always use the main domain static page. 2019-03-07 15:39:16 +00:00
Bettenbuk Zoltan 98c7430b6f [RN] Replace red screen with dialog 2019-03-07 01:09:03 +01:00
Bettenbuk Zoltan ebdcbe122a Change dialog button property keys 2019-03-07 01:09:03 +01:00
Hristo Terezov a9d82a79ea fix(toolbar): Move buttons to overflow menu when the space isn't enough 2019-03-06 17:51:31 +00:00
Bettenbuk Zoltan 27e1f5a1bc [RN] Avoid adding undefined in the invite 2019-03-06 16:52:22 +01:00
damencho 40f03fedc2 Replaces emoji flags with flag from a png.
Seems like windows does not have emojis for flags.
2019-02-27 16:45:26 +00:00
Hristo Terezov 55149670da fix(dropbox-auth): In Electron. 2019-02-27 16:12:54 +00:00
Bettenbuk Zoltan b6e2701991 [RN] Add invite screen 2019-02-27 13:26:21 +01:00
Bettenbuk Zoltan 38b1be1291 [RN] Extract AvatarListItem 2019-02-27 13:26:21 +01:00
Дамян Минков ea4d49f2a0
Adds new format of phoneList service and re-design dial in numbers page. (#3903)
* Adds new format of phoneList service and re-design dial in numbers page.

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

* Fixes tests and fixes get default number.

* Updates swagger with new format.

* Moves html back yo table.

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

* Fixes a wrong return statement.

* Small fixes.
2019-02-26 13:32:46 +00:00
Leonard Kim 03f8d8b51a fix(external_api): detect and skip params for hash routers 2019-02-22 10:34:49 -06:00
Hristo Terezov 0d674001d2 chore(icons): Cleanup 2019-02-21 16:18:01 +00:00
Hristo Terezov f7b930409b feat(toolbox): Redesign. 2019-02-21 00:42:13 +00:00
paweldomas 4312512d2f feat(external API): add feedbackPromptDisplayed event
Adds a new event fired when Jitsi Meet shows the feedback prompt.
2019-02-20 11:59:46 -06:00
damencho fc129d9849 Adds setting subject and adding event on receiving such change. 2019-02-19 13:22:27 +00:00
paweldomas 54c36198d0 fix(mobile/call-integration): cleanup if leave takes too long
The conference disconnection process is asynchronous which means there's
no guarantee that there will be CONFERENCE_LEFT event for the old
conference, before the next conference is joined. Because of that we can
end up with two simultaneous calls on the native side which is not
always supported. End the call on CONFERENCE_WILL_LEAVE to fix this
corner case.
2019-02-16 17:10:04 -08:00
Leonard Kim d872728966 fix(recording): support passing styles in firefox
Using an array of styles in Firefox causes an error
that triggers jitsi-meet to redirect to a static page.
2019-02-15 10:11:26 +01:00
Saúl Ibarra Corretgé 7289e59ca9 audio-mode: don't change the mode unless there is no active conference
If a new conference is joined and as a result the current one is terminated,
don't ever attempt to set the audio mode.
2019-02-14 10:20:45 +01:00
Aaron van Meerten 1a5e2763c1 use fetch syntax from virtuacoplenny 2019-02-13 16:23:26 -06:00
Aaron van Meerten 76638f524d invite post to use application/JSON
changed to .ajax from .post to allow content type to be set
2019-02-12 16:28:33 -06:00
Saúl Ibarra Corretgé 8ea693616d color-scheme: fix React warning
A reducer must always return a state or null to ignore it. When the color scheme
is undefined we should return the previous state.
2019-02-12 20:22:28 +01:00
Bettenbuk Zoltan e094b6516a [RN] Add color scheme support - Components 2019-02-08 11:43:21 +01:00
Bettenbuk Zoltan 2941f5dde4 [RN] Add color scheme support - JS 2019-02-08 11:43:21 +01:00
Saúl Ibarra Corretgé 5f7a515610 rn: drop {AddPeople,Invite}Controller
We are going to implement the invite dialog *inside* the SDK, so there is no
need to have all this machinery anymore.
2019-02-08 09:02:15 +01:00
virtuacoplenny b7133f5717
fix(large-video): do not show avatar if no url (#3871)
* fix(large-video): do not show avatar if no url

By default the large video dominant speaker avatar
has an empty src, which will result in a broken
image displaying. There is also disconnect with
non-react code trying to set an undefined src.
To prevent such until local avatar generation
work is done in the future, just don't show the
avatar.

* fix(conference): set the room instance earlier

Set the room instance on APP.conference before triggering
a redux update of the conference being set,, because
middleware can then fire and call methods on APP.conference
that depend on the room being set.

* get local participant directly from store instead of from global
2019-02-06 19:19:02 -08:00
Saúl Ibarra Corretgé 6f95c50d6e Revert "misc: make URL protocol matching regexes non-greedy"
This reverts commit 7c911eca96.

I'm dumb. We need global mode because otherwise lastIndex is not updated in the
regex object, which we rely upon, so this is intentional.
2019-02-06 15:49:44 +01:00
Bettenbuk Zoltan 9f3ef43daa [RN] Add conference navigation bar 2019-02-06 14:27:25 +01:00
Bettenbuk Zoltan 46713cab3b Move Labels to Conference 2019-02-06 14:27:25 +01:00
Bettenbuk Zoltan 8065cc0348 [RN] Remove unused code 2019-02-06 14:27:25 +01:00
Bettenbuk Zoltan 045a2d6aca Extract isToolboxVisible function 2019-02-06 14:27:25 +01:00
Bettenbuk Zoltan d7d9bc4eeb Reorganize conference feature files 2019-02-06 14:27:25 +01:00
bgrozev d9cf33b4c4
fix: Shows the "turn" indication for non-p2p connections. (#3865) 2019-02-05 23:13:59 +00:00
Saúl Ibarra Corretgé 7c911eca96 misc: make URL protocol matching regexes non-greedy 2019-02-02 21:21:21 +01:00
Saúl Ibarra Corretgé f3c83f6e6d rn: finally fix Android deep-linking
The URL cannot end in a /.
2019-02-02 21:21:21 +01:00
Aaron van Meerten b9a14acd3c adds conference to lookup of dial in numbers (#3859) 2019-02-01 19:10:34 -08:00
Saúl Ibarra Corretgé 53c232fd76 misc: fix off-by-one error
e729f0948c contained an off-by-one error:

URI_PROTOCOL_PATTERN includes the colon, so after applyting the regex we are
left with something like '//example.com/room' thus we only need to strip the
first 2 characters.

🤦
2019-02-01 15:22:17 +01:00
paweldomas 3b6e34e96b fix(JitsiMeetLogStorage): do not log whole message
The logMessage can be very long. Probably only it's length could be
important to why sendApplicationLog has failed. Stringify the error
though.
2019-02-01 10:34:03 +01:00
paweldomas 8fe5814831 ref(JitsiMeetLogStorage): move to base/logging 2019-02-01 10:34:03 +01:00
paweldomas 2305effa5c feat(RN): enable log collector on mobile
Stores the Logger.LogCollector instance in base/logging state instead of
global APP variable and enables it on mobile.
2019-02-01 10:34:03 +01:00
Saúl Ibarra Corretgé e729f0948c android: fix deep-linking from web
Looks like custom-scheme links no longer work in all browsers. They do on
Firefox, but the don't in Chrome and other default browsers.

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

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

Adds basic integration with Android's ConnectionService by implementing
the outgoing call scenario.

* ref(callkit): rename _SET_CALLKIT_SUBSCRIPTIONS

* ref(callkit): move feature to call-integration directory

* feat(ConnectionService): synchronize video state

* ref(AudioMode): use ConnectionService on API >= 26

Not ready yet - few details left mentioned in the FIXMEs

* feat(ConnectionService): add debug logs

Adds logs to trace the calls.

* fix(ConnectionService): leaking ConnectionImpl instances

Turns out there is no callback fired back from the JavaScript side after
the disconnect or abort event is sent from the native. The connection
must be marked as disconnected and removed immediately.

* feat(ConnectionService): handle onCreateOutgoingConnectionFailed

* ref(ConnectionService): merge classes and move to the sdk package

* feat(CallIntegration): show Alert if outgoing call fails

* fix(ConnectionService): alternatively get call UUID from the account

Some Android flavours (or versions ?) do copy over extras to
the onCreateOutgoingConnectionFailed callback. But the call UUID is also
set as the PhoneAccount's label, so eventually it should be available
there.

* ref(ConnectionService): use call UUID as PhoneAccount ID.

The extra is not reliable on some custom Android flavours. It also makes
sense to use unique id for the account instead of the URL given that
it's created on the per call basis.

* fix(ConnectionService): abort the call when hold is requested

Turns out Android P can sometimes request HOLD even though there's no
HOLD capability added to the connection (what!?), so just abort the call
in that case.

* fix(ConnectionService): unregister account on call failure

Unregister the PhoneAccount onCreateOutgoingConnectionFailed. That's
before the ConnectionImpl instance is created which is normally
responsible for doing that.

* fix(AudioModeModule): make package private and run on the audio thread

* address other review comments
2019-01-31 17:20:53 +01:00
virtuacoplenny a1383bf730
fix(local-recording): allow config override to enable (#3615)
* fix(local-recording): allow config override to enable

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

* remove redundant conditional check
2019-01-29 08:22:50 -08:00
Saúl Ibarra Corretgé 612028ce3c rn: fix showing Dropbox controls when recording
- remove unneeded dialog (it's taken care of by StartRecordingDialogContent)
- pass correct props so integrations (Dropbox) show up
2019-01-29 15:39:20 +01:00
Saúl Ibarra Corretgé 3cec4989fd ios: enable recording in dev mode
While Apple doesn't want to allow us to enable Dropbox, it's good to have it
available for testing.
2019-01-29 15:39:20 +01:00
Bettenbuk Zoltan 63ff0c27a9 [RN] Add display name to on-stage participant 2019-01-28 18:34:12 +01:00
Bettenbuk Zoltan f2b2cfda44 Extract shouldRenderParticipantVideo from ParticipantView 2019-01-28 18:34:12 +01:00
Saúl Ibarra Corretgé 8e58ce7500 ios: re-enable live streaming on iOS 10
There was a missing delegate method call into RNGoogleSignIn, which fixed this.
2019-01-25 11:06:35 +01:00
damencho 4d440f5f64 Fixes showing video after waiting for owner. Fixes #3671. 2019-01-20 14:17:50 -08:00
Bettenbuk Zoltan 79209535ea Centralise display name normalisation 2019-01-16 11:03:29 +01:00
Bettenbuk Zoltan 4bddae0bdb Remove default value from openDisplayNamePrompt action 2019-01-16 11:03:29 +01:00
Saúl Ibarra Corretgé f7162c1500 rn: add some cleanup tasks when a conference ends / changes
- unpin participant (if the local one was pinned it would remain)
- close any dialog (except if authentication is pending)
2019-01-16 11:00:37 +01:00
virtuacoplenny 998db80db1
Merge pull request #3782 from virtuacoplenny/lenny/camera-as-ss
feat(screenshare): use camera as a screenshare source
2019-01-15 12:05:09 -08:00
Hristo Terezov 4575e7e119 fix(calendar): Remove logs with invalid calendar items. 2019-01-15 17:00:23 +01:00
Bettenbuk Zoltan 230b2b02fa Chat render improbement 2019-01-15 13:38:26 +01:00
Bettenbuk Zoltan 8a241ba2b7 [RN] Add chat functionality
Co-authored-by: DimaG <dgeorgiev06@gmail.com>
2019-01-15 11:33:12 +01:00
Bettenbuk Zoltan 82f714b608 Move display name handling into redux 2019-01-15 10:15:02 +01:00
Leonard Kim 8c9ba325ca fix(pinning): send a participant id on unpin
Analytics is erroring when unpinning because the logged
event sends null for the objectId. The objectId should
be the id of the person getting unpinned.
2019-01-15 09:58:45 +01:00
Bettenbuk Zoltan eef31d05cf [RN] Add an abstraction layer to Modal 2019-01-12 15:51:50 +01:00
Bettenbuk Zoltan d7475a44e4 [RN] Extract header components for reuse 2019-01-12 15:51:50 +01:00
Leonard Kim 69dfa30142 feat(screenshare): use camera as a screenshare source
This feature is intended for spot. Spot can have an
HDMI -> usb adapter hooked up to it. In that case,
attempting to screenshare should use that adapter
as a screensharing source. Jitsi-Meet should pass
a configured screenshare source into lib-jitsi-meet
so it can be used as a source.
2019-01-11 09:52:53 -08:00
damencho c13424f7c0 Fixes some lint warnings. 2019-01-11 15:11:17 +01:00
srmcgann e7d0bf7b66 feat(DeepLinkingMobilePage): fix nested iframe button 2019-01-11 09:42:52 +01:00
damencho 653471e1c0 Adds specific class name to kick button.
The class name is similar to the one used for the mute button and is used by the tests to locate and click the button.
2019-01-10 12:02:55 -06:00
Bettenbuk Zoltan e960002c45 [RN] Fix InviteButton translation 2019-01-10 16:31:03 +01:00
Bettenbuk Zoltan c503187dc1 [RN] Fix input dialog value bug 2019-01-10 16:10:07 +01:00
virtuacoplenny 71563fec5b
Merge pull request #3773 from zbettenbuk/fix-file-location
Move DeviceSelectionPopup to its right place
2019-01-09 22:17:49 -08:00
Bettenbuk Zoltan 5c0ae10ccb Remote video menu post-PR improvements 2019-01-09 12:13:30 +01:00
Bettenbuk Zoltan 82f6931ee8 [RN] Fix a react warning on remote video menu 2019-01-09 12:13:30 +01:00
Bettenbuk Zoltan 2ea5f3c1aa [RN] Add avatar to remote video menu 2019-01-09 12:13:30 +01:00
Bettenbuk Zoltan 20d597e402 Move DeviceSelectionPopup to its right place 2019-01-09 12:02:42 +01:00
Saúl Ibarra Corretgé 634f304815 android: simplify handling of the back button
Provide a default and builtin default implementation which finishes the
Activity, same as before.

What this PR removes is the ability to provide a custom default handler because
applications can already take this decision when calling `onBackPressed`. In
addition, make `onBackPressed` return `void` because it's virtually impossible
for it to return `false` (that would mean that there is no
`ReactInstanceManager`, which means there is no app to begin with).

In addition, remove the use of `BackAndroid` since `BackHandler` contains an iOS
shim now.
2019-01-08 17:43:36 +01:00
Hristo Terezov c2b2b4eba4 fix(initAnalytics): Add catch. 2019-01-07 19:48:48 +00:00
Hristo Terezov 5ad98dd058 ref(config): Create 'analytics' section. 2019-01-07 14:32:31 +00:00
Hristo Terezov e5a8d95f1f feat(Amplitude): Integration. 2019-01-07 14:32:31 +00:00
virtuacoplenny 2d57d22a3f
Merge pull request #3762 from saghul/no-prop-types
misc: drop dependency on prop-types and polyfill
2019-01-04 08:37:18 -08:00
virtuacoplenny 9b47dd1403
Merge pull request #3753 from virtuacoplenny/lenny/hangup-clean-ui
ref(hangup): clean up some UI state on hangup
2019-01-04 08:29:40 -08:00
Saúl Ibarra Corretgé 0b6496bf4d misc: drop dependency on prop-types and polyfill 2019-01-04 10:53:07 +01:00
Saúl Ibarra Corretgé 8ac701ab74 deps: drop @atlaskit/layer-manager dependency
We no longer need it since Rect 16 takes care of passing the context around.
It's also deprecated: https://atlaskit.atlassian.com/packages/core/layer-manager
2019-01-04 10:52:31 +01:00
Leonard Kim 22a1917107 ref(app): move url change handling to componentDidUpdate
Instead of handling the side effect of navigating to another
url from within componentWillReceiveProps, try to match the
same logic instead in componentDidUpdate.
2019-01-03 19:34:46 -08:00
Saúl Ibarra Corretgé 937c74f49e rn: disable touch feedback on Thumbnail
Touch feedback manifests in some ugly black border bleeding out of the thumbnail
itself. Since we already provide feedback (be that by adding the blue border in
case of pinning, or showing the menu in case of long press) the perception is
the same, without the graphical glitch.
2019-01-03 13:10:51 +01:00
Leonard Kim 14cc4ea54a ref(hangup): clean up some UI state on hangup
- Reset some state on the singletons conference
  and VideoLayout.
- Add a way for LocalVideo to clean itself up
  by sharing logic with the other SmallVideos.
- Add clearing of chat messages so they don't
  linger.
- Remove some UI event listeners.
2019-01-02 09:54:05 -08:00
Leonard Kim 9215b1e8b2 ref(app): move initialization into componentDidMount
componentWillMount is a deprecated lifecycle method;
componentDidMount should be used to kick off things
like ajax. In the case of the _App hierarchy, a promise
chain is used to perform initialization, and it is
first started in the constructor by initializing
storage. However, by the time storage is initialized,
resolving the first promise, _App has already mounted.
So, move it all to the componentDidMount lifecycle.
2019-01-02 10:02:04 +01:00
Saúl Ibarra Corretgé fc75adc6ff feat(DialInInfo): fix webpack warning 2019-01-02 09:26:05 +01:00
Leonard Kim 3c4907ee0a fix(dial-in): update jsdoc 2019-01-02 09:22:58 +01:00
Leonard Kim 8b399e8caf chore(dep): bump @atlaskit/modal-dialog 6.0.12 to 7.1.2
The package now requires using a ModalTransition component
to handle animations. The existing DialogContainer component
has been split into native and web implementations to support
this change.
2018-12-20 20:05:49 -08:00
Bettenbuk Zoltan 6b68fba220 [RN] Add remote video menu 2018-12-20 17:23:07 +01:00
Saúl Ibarra Corretgé 24bd62c22a ios: disable recording
Apple rejected our app on account of requiring Dropbox not being acceptable. Oh
well! Disable it until we find a way around it. Sigh.
2018-12-20 14:15:12 +01:00
Leonard Kim b36fd96b07 chore(deps): update @atlaskit/checkbox from 4.0.6 to 5.0.10 2018-12-20 09:31:24 +01:00
Leonard Kim 07bcb38dd6 fix(live-streaming): show message if no broadcasts are found
It's possible for the YouTube api to return zero broadcasts
or broadcasts without any streams--streams are what are
associated with stream keys. In this case, instead of showing
an empty selector or no selector, show a message with a link
to where the stream key can be obtained.
2018-12-19 22:12:44 +01:00
Leonard Kim 5598b8443a fix(live-streaming): show stream key validation in mobile 2018-12-18 14:29:13 -08:00
Leonard Kim 920c179f56 fix(live-streaming): show warning if stream key seems wrong
Provide a client-side notice if the YouTube live stream key
looks like it might be in the wrong format. Normally the
stream key looks like 4 groups of 4 numbers and letters,
each separated by a dash. The warning does not block submission
in case YouTube changes their stream key format.
2018-12-18 12:59:02 -08:00
Leonard Kim b57eaed940 fix(live-streaming): trim the entered stream key 2018-12-18 12:59:02 -08:00
Bettenbuk Zoltan 4da8c626f7 Exclude static jitsi links from calendar fetch 2018-12-18 17:36:44 +01:00
Saúl Ibarra Corretgé 342718f673 rn: drop support for no longer supported deployments 2018-12-18 16:18:08 +01:00
Bettenbuk Zoltan 80e8afa9c1 [RN] Remove react-native-prompt 2018-12-18 13:21:48 +01:00
Saúl Ibarra Corretgé 3212bde6e6 [RN] Recolor AudioRoutePickerDialog 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 506b15e3b5 [RN] Recolor BottomSheet 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 62e7fd7e8e [RN] Make feature dialogs branded: recording 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 4bc09dd8b9 [RN] Make feature dialogs branded: room-lock 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan f6e6b09e78 [RN] Make feature dialogs branded: calendar-sync 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 9645de33bc [RN] Make feature dialogs branded: authentication 2018-12-18 13:21:48 +01:00
Bettenbuk Zoltan 22a602768c [RN] Add branded dialog component 2018-12-18 13:21:48 +01:00
Leonard Kim 3ebad112a2 ref(conference): remove deprecated lifecycle methods 2018-12-18 12:38:25 +01:00
Saúl Ibarra Corretgé 0a9333af02 rn: refactor Avatar to deal with FastImage changes
Updating react-native-fast-image brings a couple of interesting changes:

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

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

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

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

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

Using the key prop ensures AvatarContent will be recreated if the URI changes,
which is not a bad idea anyway, since the new image needs to be downloaded.
2018-12-18 09:05:50 +01:00
damencho 32798b1a80 Recognises calendar events with conference data. 2018-12-17 09:51:13 +00:00
virtuacoplenny f89f3f144f
Merge pull request #3597 from virtuacoplenny/lenny/handle-calendar-signed-out
fix(calendar): show error message if authorization fails on event fetch
2018-12-10 17:51:08 -08:00
Дамян Минков f11b6cbb1e
Replaces smileys and the logic of replacing links/emails. (#3560)
* Replaces smileys and the logic of replacing links/emails.

Now using react-emoji-render and react-linkify.

* Fixes heart emoji.

It is known that current implementation doesn't work with ascii emojis that contain < or >, like >:( >:-( </3 <\3 <3. Making those work may bring some xss issues.

* Adds '_blank' and 'noopener noreferrer' to the replaced links.

* Fixes package-lock links (http vs https).

* Fixes comments.
2018-12-03 18:01:40 +00:00
Saúl Ibarra Corretgé 26ba974757 [RN] Drop react-native-locale-detector dependency
The upstream package has been unmaintained for 2 years now, and making the litle
changes needed as React Native needs them is getting old. The actual
funcionality is a couple of one-liners plus tons of boliterplate, which gets
reduced by quite a bit if we just embed it. So here it goes.
2018-12-03 11:48:44 +01:00
Leonard Kim 7614ceda68 ref(video): remove deprecated lifecycle methods from gesture handler 2018-12-03 11:45:09 +01:00
Saúl Ibarra Corretgé 10163274d3 [RN] Share font selections between web and native 2018-12-03 11:27:12 +01:00
Saúl Ibarra Corretgé 2b91745af1 [RN] Fix dominant speaker and moderator indicators
They are part of the Jitsi font now, there is no need to load them from
FontAwesome.
2018-12-03 11:27:12 +01:00
Saúl Ibarra Corretgé e452867e12 feat(cleanup): remove no longer used FontAwesome 2018-12-03 11:27:12 +01:00
Leonard Kim f83d609f1a ref(video): calculate tint styles at render 2018-12-03 10:27:08 +01:00
Leonard Kim 822bc31d69 ref(video): use videoTrack from props
It doesn't seem like videoTrack needs to be set onto state
if it can be accessed directly from props. Removing the state
automatically removes the deprecated componentWillReceiveProps.
2018-12-03 10:10:24 +01:00
virtuacoplenny 05b7e6facc
Merge pull request #3636 from virtuacoplenny/lenny/tile-view-toggles-some-features
Tile view toggles some features and some features toggle tile view
2018-11-30 09:10:23 -08:00
Leonard Kim 35da17f5a6 ref(local-video): merge styles at render
Remove caching of calculated styles, thereby removing
componentWillReceiveProps, by passing in base styles
and passed in styles when rendering.
2018-11-30 08:42:44 +00:00
Leonard Kim 1396d59ce2 fix(tile-view): disable on etherpad display, disable etherpad on view enter 2018-11-28 11:48:15 -08:00
Leonard Kim 29bc18df01 fix(tile-view): disable tile view on pin, unpin all on view enter 2018-11-28 11:36:23 -08:00
virtuacoplenny 957606b3f8
Merge pull request #3630 from virtuacoplenny/lenny/youtube-1-on-1
fix(filmstrip): show thumbnails in 1-on-1 with a fake participant
2018-11-27 14:36:43 -08:00
Leonard Kim 769a2c7c94 fix(filmstrip): show thumbnails in 1-on-1 with a fake participant
Filmstrip remote thumbnails display under certain conditions, as
defined in filmstrip/functions.web.js. Previously the raw
participant count was used, which included fake participants.
Using the selector getParticipantCount excludes fake participants,
causing YouTube thumbnails to remain hidden in a 1-on-1 call.
2018-11-27 12:31:27 -08:00
virtuacoplenny f349357d3c
Merge pull request #3584 from virtuacoplenny/lenny/update-lifecycles-1
Remove some usages of deprecated lifecycle methods
2018-11-27 09:02:05 -08:00
mmoanis b844a9f06b Abstract the DialogWithTabs title so it can be reused with other components 2018-11-24 12:50:09 +01:00
Leonard Kim d4e18e78fa ref(recording-label): derive when the label state is no longer stale 2018-11-21 08:08:45 -08:00
Leonard Kim f13cfe70f3 ref(sidebar): derive showOverlay state
- Derive the showOverlay state. When the sidebar should be hidden,
  the internal showOverlay state should remain true until the
  animation hides it. When the sidebar should show, the showOverlay
  state should become true immediately.
- Use PureComponent to prevent additional animation triggers
  instead of explicitly checking changes to the "show" prop.
2018-11-21 08:08:45 -08:00
Leonard Kim 5cb4bec633 ref(circular-label): animate after dom updates
Based on react-native docs, looks like animations should be
started after mount. Updating animation states I'm not certain
on so I moved it to componentDidUpdate and tested with the
live streaming label to ensure the component still animated fine.
2018-11-21 08:08:45 -08:00
Leonard Kim 4409bbabb7 ref(blank-page): destroy local track after mount
To kill componentWillMount, call destroyLocalTrack after mount.
Navigation to the blank page was synthetically forced and no
UI issues were noticed, possibly because destroyLocalTrack may
already be async so destruction may already have been occurring
after mount.
2018-11-21 08:08:45 -08:00
Leonard Kim d6216f21d5 ref(live-streaming): remove picker state to remove componentWillReceiveProps 2018-11-21 08:08:45 -08:00
Leonard Kim 3a32f7f3f0 ref(audio-picker): fetch audio devices after mount
Per react migration docs, initially fetching external data is
recommended to be done in componentDidMount.
2018-11-21 08:08:45 -08:00
Leonard Kim c4f1588bb0 ref(dialog): set mounted flag after mount 2018-11-21 08:08:45 -08:00
Leonard Kim 609f3887f2 ref(welcome-page): native creates/destroys camera after mount 2018-11-21 08:08:45 -08:00
Leonard Kim 77f8f85b96 ref(device-selection): update preview tracks on component update 2018-11-21 08:08:45 -08:00
Leonard Kim 14adc0b887 ref(always-on-top): trigger toolbar hide timeout after update 2018-11-21 08:08:45 -08:00
Leonard Kim c288d0e18c ref(deep-linking): set initial state in constructor 2018-11-21 08:08:45 -08:00
Leonard Kim eaafc21133 ref(desktop-picker): derive desired types when props change 2018-11-21 08:08:45 -08:00
Leonard Kim 72c1fa38be ref(modal): simplify functional footer passing to remove componentWillUpdate 2018-11-21 08:08:45 -08:00
Leonard Kim 45068f68db ref(welcome-page): use getDerivedStateFromProps, set mounted after actual mount 2018-11-21 08:08:45 -08:00
Leonard Kim e0cbb838be ref(info): derive when to clear the entered password state 2018-11-21 08:08:45 -08:00
Leonard Kim c28c70fb2f ref(device-selection): change audio preview listener on component update 2018-11-21 08:08:45 -08:00
Leonard Kim 280178f5d1 ref(info-dialog): derive when to autoshow or autohide 2018-11-21 08:08:45 -08:00
Leonard Kim e9b2518f8a ref(info): use getDerivedStateFromProps to update state 2018-11-21 08:08:45 -08:00
Leonard Kim 1e3e71c2ff ref(speaker-stats): begin polling for stats after mount 2018-11-21 08:08:45 -08:00
Leonard Kim 007d60eb6c ref(toolbox): getter for the recording/streaming disabled tooltip 2018-11-21 08:08:45 -08:00
Leonard Kim 85f487cca5 ref(large-video): use componentDidUpdate to change background image 2018-11-21 08:08:44 -08:00
Leonard Kim b24e7ec5f0 ref(labels): use getDerivedStateFromProps to get display state 2018-11-21 08:08:44 -08:00
Leonard Kim a045353e6e ref(tooltbox): use componentDidUpdate to trigger more changes 2018-11-21 08:08:44 -08:00
Bettenbuk Zoltan 71edea8aac Rearrange recording feature files 2018-11-20 14:42:33 +01: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
Leonard Kim 7a2c465c4a fix(calendar): show error message if authorization fails on event fetch 2018-11-06 11:56:25 -08:00
mmoanis cd943319d6 Update docs for AbstractRecordButton _mapStateToProps 2018-11-06 11:36:00 +01:00
Hristo Terezov b30008e3a5 feat(welcome-page): Redesign. (#3559)
* feat(welcome-page): Redesign.

* Style adjustments.
2018-10-22 13:49:18 -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
Saúl Ibarra Corretgé 9407f562f6 [iOS] Simplify dynamically loading fonts 2018-10-16 14:33:48 +02: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é 7162080d00 feat(flow): tame the beast 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é d290d28248 feat(Audio): fix react warning 2018-10-10 18:07:36 +02:00
Bettenbuk Zoltan d8c1f107da [RN] Add swipe to delete feature 2018-10-09 13:35:06 +02:00
Saúl Ibarra Corretgé 057b300074 feat(Participant): reuse avatar URL generation logic
It was moved to js-utils, so make use of it.
2018-10-05 17:15:00 +02:00
Bettenbuk Zoltan e164a23cf0 [RN] Fix start recording dialog after dropbox changes 2018-10-04 12:10:28 -05:00
Bettenbuk Zoltan 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
hristoterezov 60decf7692 ref(dropbox): Consistency for the naming around the app key. 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
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
Bettenbuk Zoltan 2cbe7922f6 [RN] Dialogs: Replace legacy common style with common container 2018-09-21 15:22:27 +02:00
Saúl Ibarra Corretgé b673c4a11a feat(permissions): adjust to changes in permissions checking 2018-09-21 11:35:16 +02: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
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
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