Compare commits

...

9 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé
9e51819d7f ios: bump CocoaPods dependency 2020-04-23 09:00:21 +02:00
paweldomas
ddf69160e5 android: version 20.2.3 2020-04-22 15:40:33 -05:00
paweldomas
34d8cd8c15 ios: version 20.2.3 2020-04-22 15:40:19 -05:00
paweldomas
c46a646da3 fix: Uncaught TypeError: CreateListFromArrayLike called on non-object
updates ljm to mobile-20.2 branch at d2155878aae350f82b83c491bffd69f94711e1ae
2020-04-22 15:37:31 -05:00
Bettenbuk Zoltan
8f87240ad2 fix: private message open 2020-04-22 15:13:25 +02:00
Bettenbuk Zoltan
fe0ab4eb0f fix: modal keyboard avoiding view fix 2020-04-21 11:51:28 +02:00
paweldomas
715c7b3826 android: version 20.2.2 2020-04-21 11:50:44 +02:00
paweldomas
de8c679e83 android: version 20.2.1 2020-04-09 13:48:54 -05:00
Bettenbuk Zoltan
d8da56d85d feat: add url params: config.disableInviteFunctions, config.doNotStoreRoom and userInfo.displayName 2020-04-09 13:47:39 -05:00
14 changed files with 96 additions and 53 deletions

View File

@@ -20,5 +20,5 @@
android.useAndroidX=true
android.enableJetifier=true
appVersion=20.2.0
appVersion=20.2.3
sdkVersion=2.8.0

View File

@@ -586,4 +586,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: f615794fb9184757b00cd16e534824ba6ee2fc98
COCOAPODS: 1.8.4
COCOAPODS: 1.9.1

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>20.2.0</string>
<string>20.2.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>20.2.0</string>
<string>20.2.3</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>UISupportedInterfaceOrientations</key>

View File

@@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleShortVersionString</key>
<string>20.2.0</string>
<string>20.2.3</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CLKComplicationPrincipalClass</key>

10
package-lock.json generated
View File

@@ -10883,8 +10883,8 @@
}
},
"lib-jitsi-meet": {
"version": "github:jitsi/lib-jitsi-meet#960eea3c5087ce07e9135fad70268c7d338e0de5",
"from": "github:jitsi/lib-jitsi-meet#960eea3c5087ce07e9135fad70268c7d338e0de5",
"version": "github:jitsi/lib-jitsi-meet#d2155878aae350f82b83c491bffd69f94711e1ae",
"from": "github:jitsi/lib-jitsi-meet#d2155878aae350f82b83c491bffd69f94711e1ae",
"requires": {
"@jitsi/sdp-interop": "0.1.14",
"@jitsi/sdp-simulcast": "0.2.2",
@@ -10896,7 +10896,7 @@
"sdp-transform": "2.3.0",
"strophe.js": "1.3.4",
"strophejs-plugin-disco": "0.0.2",
"strophejs-plugin-stream-management": "github:jitsi/strophejs-plugin-stream-management#cec7608601c1bc098543823fc658e3ddf758c009",
"strophejs-plugin-stream-management": "github:jitsi/strophejs-plugin-stream-management#e719a02b4f83856c1530882084a4b048ee622d45",
"webrtc-adapter": "7.5.0"
},
"dependencies": {
@@ -16879,8 +16879,8 @@
"integrity": "sha512-T9pJFzn1ZUqZ/we9+OvI5pFdrjeb4IBMbEjK+ZWEZV036wEl8l8GOtF8AJ3sIqOMtdIiFLdFu99JiGWd7yapAQ=="
},
"strophejs-plugin-stream-management": {
"version": "github:jitsi/strophejs-plugin-stream-management#cec7608601c1bc098543823fc658e3ddf758c009",
"from": "github:jitsi/strophejs-plugin-stream-management#cec7608601c1bc098543823fc658e3ddf758c009"
"version": "github:jitsi/strophejs-plugin-stream-management#e719a02b4f83856c1530882084a4b048ee622d45",
"from": "github:jitsi/strophejs-plugin-stream-management#e719a02b4f83856c1530882084a4b048ee622d45"
},
"style-loader": {
"version": "0.19.0",

View File

@@ -56,7 +56,7 @@
"js-utils": "github:jitsi/js-utils#0b2cef90613a74777fefd98d4ee3eda3879809ab",
"jsrsasign": "8.0.12",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#960eea3c5087ce07e9135fad70268c7d338e0de5",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#d2155878aae350f82b83c491bffd69f94711e1ae",
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
"lodash": "4.17.13",
"moment": "2.19.4",

View File

@@ -87,6 +87,7 @@ export default [
'disableDeepLinking',
'disableH264',
'disableHPF',
'disableInviteFunctions',
'disableLocalVideoFlip',
'disableNS',
'disableRemoteControl',
@@ -95,6 +96,7 @@ export default [
'disableSuspendVideo',
'disableThirdPartyRequests',
'displayJids',
'doNotStoreRoom',
'e2eping',
'enableDisplayNameInStats',
'enableEmailInStats',

View File

@@ -107,7 +107,7 @@ class JitsiModal extends PureComponent<Props> {
position = { position }
show = { _show }>
<KeyboardAvoidingView
behavior = 'padding'
behavior = 'height'
style = { [
_headerStyles.page,
_styles.page,

View File

@@ -137,8 +137,9 @@ function _updateLocalParticipantFromUrl({ dispatch, getState }) {
const urlParams
= parseURLParams(getState()['features/base/connection'].locationURL);
const urlEmail = urlParams['userInfo.email'];
const urlDisplayName = urlParams['userInfo.displayName'];
if (!urlEmail) {
if (!urlEmail && !urlDisplayName) {
return;
}
@@ -147,7 +148,8 @@ function _updateLocalParticipantFromUrl({ dispatch, getState }) {
if (localParticipant) {
dispatch(participantUpdated({
...localParticipant,
email: _.escape(urlEmail)
email: _.escape(urlEmail),
name: _.escape(urlDisplayName)
}));
}
}

View File

@@ -10,6 +10,7 @@ import {
JitsiConferenceErrors,
JitsiConferenceEvents
} from '../base/lib-jitsi-meet';
import { setActiveModalId } from '../base/modal';
import {
getLocalParticipant,
getParticipantById,
@@ -22,7 +23,13 @@ import { isButtonEnabled, showToolbox } from '../toolbox';
import { SEND_MESSAGE, SET_PRIVATE_MESSAGE_RECIPIENT } from './actionTypes';
import { addMessage, clearMessages, toggleChat } from './actions';
import { ChatPrivacyDialog } from './components';
import { INCOMING_MSG_SOUND_ID, MESSAGE_TYPE_ERROR, MESSAGE_TYPE_LOCAL, MESSAGE_TYPE_REMOTE } from './constants';
import {
CHAT_VIEW_MODAL_ID,
INCOMING_MSG_SOUND_ID,
MESSAGE_TYPE_ERROR,
MESSAGE_TYPE_LOCAL,
MESSAGE_TYPE_REMOTE
} from './constants';
import { INCOMING_MSG_SOUND_FILE } from './sounds';
declare var APP: Object;
@@ -94,6 +101,7 @@ MiddlewareRegistry.register(store => next => action => {
}
case SET_PRIVATE_MESSAGE_RECIPIENT: {
Boolean(action.participant) && dispatch(setActiveModalId(CHAT_VIEW_MODAL_ID));
_maybeFocusField();
break;
}

View File

@@ -18,6 +18,11 @@ import { Icon, IconAddPeople } from '../../../base/icons';
*/
type Props = {
/**
* True if the invite functions (dial out, invite, share...etc) are disabled.
*/
_isInviteFunctionsDiabled: boolean,
/**
* True if it's a lonely meeting (participant count excluding fakes is 1).
*/
@@ -60,7 +65,7 @@ class LonelyMeetingExperience extends PureComponent<Props> {
* @inheritdoc
*/
render() {
const { _isLonelyMeeting, _styles, t } = this.props;
const { _isInviteFunctionsDiabled, _isLonelyMeeting, _styles, t } = this.props;
if (!_isLonelyMeeting) {
return null;
@@ -75,24 +80,26 @@ class LonelyMeetingExperience extends PureComponent<Props> {
] }>
{ t('lonelyMeetingExperience.youAreAlone') }
</Text>
<TouchableOpacity
onPress = { this._onPress }
style = { [
styles.lonelyButton,
_styles.lonelyButton
] }>
<Icon
size = { 24 }
src = { IconAddPeople }
style = { styles.lonelyButtonComponents } />
<Text
{ !_isInviteFunctionsDiabled && (
<TouchableOpacity
onPress = { this._onPress }
style = { [
styles.lonelyButtonComponents,
_styles.lonelyMessage
styles.lonelyButton,
_styles.lonelyButton
] }>
{ t('lonelyMeetingExperience.button') }
</Text>
</TouchableOpacity>
<Icon
size = { 24 }
src = { IconAddPeople }
style = { styles.lonelyButtonComponents } />
<Text
style = { [
styles.lonelyButtonComponents,
_styles.lonelyMessage
] }>
{ t('lonelyMeetingExperience.button') }
</Text>
</TouchableOpacity>
) }
</View>
);
}
@@ -117,7 +124,10 @@ class LonelyMeetingExperience extends PureComponent<Props> {
* @returns {Props}
*/
function _mapStateToProps(state): $Shape<Props> {
const { disableInviteFunctions } = state['features/base/config'];
return {
_isInviteFunctionsDiabled: disableInviteFunctions,
_isLonelyMeeting: getParticipantCount(state) === 1,
_styles: ColorSchemeRegistry.get(state, 'Conference')
};

View File

@@ -38,5 +38,20 @@ class InviteButton extends AbstractButton<Props, *> {
}
}
/**
* Maps part of the Redux state to the props of this component.
*
* @param {Object} state - The Redux state.
* @param {Props} ownProps - The own props of the component.
* @returns {Props}
*/
function _mapStateToProps(state, ownProps: Props) {
const { disableInviteFunctions } = state['features/base/config'];
export default translate(connect()(InviteButton));
return {
visible: !disableInviteFunctions && ownProps.visible
};
}
export default translate(connect(_mapStateToProps)(InviteButton));

View File

@@ -86,27 +86,31 @@ function _appWillMount({ dispatch, getState }, next, action) {
* @returns {*} The result returned by {@code next(action)}.
*/
function _conferenceWillLeave({ dispatch, getState }, next, action) {
let locationURL;
const { doNotStoreRoom } = getState()['features/base/config'];
/**
* FIXME:
* It is better to use action.conference[JITSI_CONFERENCE_URL_KEY]
* in order to make sure we get the url the conference is leaving
* from (i.e. the room we are leaving from) because if the order of events
* is different, we cannot be guranteed that the location URL in base
* connection is the url we are leaving from... not the one we are going to
* (the latter happens on mobile -- if we use the web implementation);
* however, the conference object on web does not have
* JITSI_CONFERENCE_URL_KEY so we cannot call it and must use the other way
*/
if (typeof APP === 'undefined') {
locationURL = action.conference[JITSI_CONFERENCE_URL_KEY];
} else {
locationURL = getState()['features/base/connection'].locationURL;
if (!doNotStoreRoom) {
let locationURL;
/**
* FIXME:
* It is better to use action.conference[JITSI_CONFERENCE_URL_KEY]
* in order to make sure we get the url the conference is leaving
* from (i.e. the room we are leaving from) because if the order of events
* is different, we cannot be guranteed that the location URL in base
* connection is the url we are leaving from... not the one we are going to
* (the latter happens on mobile -- if we use the web implementation);
* however, the conference object on web does not have
* JITSI_CONFERENCE_URL_KEY so we cannot call it and must use the other way
*/
if (typeof APP === 'undefined') {
locationURL = action.conference[JITSI_CONFERENCE_URL_KEY];
} else {
locationURL = getState()['features/base/connection'].locationURL;
}
dispatch(
_updateConferenceDuration(
locationURL));
}
dispatch(
_updateConferenceDuration(
locationURL));
return next(action);
}
@@ -122,7 +126,9 @@ function _conferenceWillLeave({ dispatch, getState }, next, action) {
* @returns {*} The result returned by {@code next(action)}.
*/
function _setRoom({ dispatch, getState }, next, action) {
if (action.room) {
const { doNotStoreRoom } = getState()['features/base/config'];
if (!doNotStoreRoom && action.room) {
const { locationURL } = getState()['features/base/connection'];
if (locationURL) {