Merge branch 'develop' into feat.media-auto-download-preference
This commit is contained in:
commit
f5d6fce6de
|
@ -7,7 +7,7 @@ orbs:
|
||||||
macos: &macos
|
macos: &macos
|
||||||
macos:
|
macos:
|
||||||
xcode: "14.2.0"
|
xcode: "14.2.0"
|
||||||
resource_class: large
|
resource_class: macos.m1.large.gen1
|
||||||
|
|
||||||
bash-env: &bash-env
|
bash-env: &bash-env
|
||||||
BASH_ENV: "~/.nvm/nvm.sh"
|
BASH_ENV: "~/.nvm/nvm.sh"
|
||||||
|
|
|
@ -9,9 +9,9 @@ module.exports = {
|
||||||
},
|
},
|
||||||
artifacts: {
|
artifacts: {
|
||||||
plugins: {
|
plugins: {
|
||||||
screenshot: 'failing',
|
screenshot: process.env.CI ? undefined : 'failing',
|
||||||
video: 'failing',
|
video: process.env.CI ? undefined : 'failing',
|
||||||
uiHierarchy: 'enabled'
|
uiHierarchy: process.env.CI ? undefined : 'enabled'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
apps: {
|
apps: {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -147,7 +147,7 @@ android {
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
minSdkVersion rootProject.ext.minSdkVersion
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||||
versionCode VERSIONCODE as Integer
|
versionCode VERSIONCODE as Integer
|
||||||
versionName "4.37.1"
|
versionName "4.38.0"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
if (!isFoss) {
|
if (!isFoss) {
|
||||||
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
||||||
|
|
|
@ -79,10 +79,4 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
<queries>
|
|
||||||
<package android:name="org.jitsi.meet" />
|
|
||||||
<intent>
|
|
||||||
<action android:name="android.intent.action.SEND" />
|
|
||||||
</intent>
|
|
||||||
</queries>
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class ReplyBroadcast extends BroadcastReceiver {
|
||||||
|
|
||||||
final Resources res = mContext.getResources();
|
final Resources res = mContext.getResources();
|
||||||
String packageName = mContext.getPackageName();
|
String packageName = mContext.getPackageName();
|
||||||
int smallIconResId = res.getIdentifier("ic_notification", "mipmap", packageName);
|
int smallIconResId = res.getIdentifier("ic_notification", "drawable", packageName);
|
||||||
|
|
||||||
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_LOW);
|
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_LOW);
|
||||||
notificationManager.createNotificationChannel(channel);
|
notificationManager.createNotificationChannel(channel);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React, { useContext } from 'react';
|
import React, { useContext } from 'react';
|
||||||
import { dequal } from 'dequal';
|
import { dequal } from 'dequal';
|
||||||
import { Text } from 'react-native';
|
|
||||||
|
|
||||||
import { IMessageAttachments } from './interfaces';
|
import { IMessageAttachments } from './interfaces';
|
||||||
import Image from './Image';
|
import Image from './Image';
|
||||||
|
@ -8,13 +7,12 @@ import Audio from './Audio';
|
||||||
import Video from './Video';
|
import Video from './Video';
|
||||||
import Reply from './Reply';
|
import Reply from './Reply';
|
||||||
import Button from '../Button';
|
import Button from '../Button';
|
||||||
import styles from './styles';
|
|
||||||
import MessageContext from './Context';
|
import MessageContext from './Context';
|
||||||
import { useTheme } from '../../theme';
|
import { useTheme } from '../../theme';
|
||||||
import { IAttachment } from '../../definitions';
|
import { IAttachment, TGetCustomEmoji } from '../../definitions';
|
||||||
import CollapsibleQuote from './Components/CollapsibleQuote';
|
import CollapsibleQuote from './Components/CollapsibleQuote';
|
||||||
import openLink from '../../lib/methods/helpers/openLink';
|
import openLink from '../../lib/methods/helpers/openLink';
|
||||||
import { themes } from '../../lib/constants';
|
import Markdown from '../markdown';
|
||||||
|
|
||||||
export type TElement = {
|
export type TElement = {
|
||||||
type: string;
|
type: string;
|
||||||
|
@ -23,9 +21,8 @@ export type TElement = {
|
||||||
text: string;
|
text: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const AttachedActions = ({ attachment }: { attachment: IAttachment }) => {
|
const AttachedActions = ({ attachment, getCustomEmoji }: { attachment: IAttachment; getCustomEmoji: TGetCustomEmoji }) => {
|
||||||
const { onAnswerButtonPress } = useContext(MessageContext);
|
const { onAnswerButtonPress } = useContext(MessageContext);
|
||||||
const { theme } = useTheme();
|
|
||||||
|
|
||||||
if (!attachment.actions) {
|
if (!attachment.actions) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -50,7 +47,7 @@ const AttachedActions = ({ attachment }: { attachment: IAttachment }) => {
|
||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Text style={[styles.text, { color: themes[theme].bodyText }]}>{attachment.text}</Text>
|
<Markdown msg={attachment.text} getCustomEmoji={getCustomEmoji} />
|
||||||
{attachedButtons}
|
{attachedButtons}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -106,7 +103,7 @@ const Attachments: React.FC<IMessageAttachments> = React.memo(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file && file.actions && file.actions.length > 0) {
|
if (file && file.actions && file.actions.length > 0) {
|
||||||
return <AttachedActions attachment={file} />;
|
return <AttachedActions attachment={file} getCustomEmoji={getCustomEmoji} />;
|
||||||
}
|
}
|
||||||
if (typeof file.collapsed === 'boolean') {
|
if (typeof file.collapsed === 'boolean') {
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
import React, { useRef } from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { messageBlockWithContext } from '../UIKit/MessageBlock';
|
import { messageBlockWithContext } from '../UIKit/MessageBlock';
|
||||||
import { IMessageBlocks } from './interfaces';
|
import { IMessageBlocks } from './interfaces';
|
||||||
|
|
||||||
const Blocks = React.memo(({ blocks, id: mid, rid, blockAction }: IMessageBlocks) => {
|
const Blocks = ({ blocks, id: mid, rid, blockAction }: IMessageBlocks) => {
|
||||||
if (blocks && blocks.length > 0) {
|
if (blocks && blocks.length > 0) {
|
||||||
const appId = blocks[0]?.appId || '';
|
const appId = blocks[0]?.appId || '';
|
||||||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
return React.createElement(
|
||||||
const comp = useRef(
|
|
||||||
React.createElement(
|
|
||||||
messageBlockWithContext({
|
messageBlockWithContext({
|
||||||
action: async ({ actionId, value, blockId }: { actionId: string; value: string; blockId: string }) => {
|
action: async ({ actionId, value, blockId }: { actionId: string; value: string; blockId: string }) => {
|
||||||
if (blockAction) {
|
if (blockAction) {
|
||||||
|
@ -26,12 +24,10 @@ const Blocks = React.memo(({ blocks, id: mid, rid, blockAction }: IMessageBlocks
|
||||||
rid
|
rid
|
||||||
}),
|
}),
|
||||||
{ blocks }
|
{ blocks }
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return comp.current;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
});
|
};
|
||||||
|
|
||||||
Blocks.displayName = 'MessageBlocks';
|
Blocks.displayName = 'MessageBlocks';
|
||||||
|
|
||||||
|
|
|
@ -875,6 +875,7 @@ export const Ignored = () => <Message isIgnored />;
|
||||||
export const CustomStyle = () => <Message msg='Message' style={[{ backgroundColor: '#ddd' }]} />;
|
export const CustomStyle = () => <Message msg='Message' style={[{ backgroundColor: '#ddd' }]} />;
|
||||||
|
|
||||||
export const ShowButtonAsAttachment = () => (
|
export const ShowButtonAsAttachment = () => (
|
||||||
|
<>
|
||||||
<Message
|
<Message
|
||||||
attachments={[
|
attachments={[
|
||||||
{
|
{
|
||||||
|
@ -890,6 +891,22 @@ export const ShowButtonAsAttachment = () => (
|
||||||
}
|
}
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
<Message
|
||||||
|
attachments={[
|
||||||
|
{
|
||||||
|
text: ':avocado: **Message with markdown**\n\n_Some text_\n\nThis is a test',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
type: 'button',
|
||||||
|
text: 'Text button',
|
||||||
|
msg: 'Response message',
|
||||||
|
msg_in_chat_window: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
export const ThumbnailFromServer = () => (
|
export const ThumbnailFromServer = () => (
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Keyboard, ViewStyle } from 'react-native';
|
import { Keyboard, ViewStyle } from 'react-native';
|
||||||
import { Subscription } from 'rxjs';
|
|
||||||
|
|
||||||
import Message from './Message';
|
import Message from './Message';
|
||||||
import MessageContext from './Context';
|
import MessageContext from './Context';
|
||||||
|
@ -78,13 +77,16 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
|
||||||
|
|
||||||
state = { isManualUnignored: false };
|
state = { isManualUnignored: false };
|
||||||
|
|
||||||
private subscription?: Subscription;
|
private subscription?: Function;
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { item } = this.props;
|
const { item } = this.props;
|
||||||
if (item && item.observe) {
|
// @ts-ignore
|
||||||
const observable = item.observe();
|
if (item && item.experimentalSubscribe) {
|
||||||
this.subscription = observable.subscribe(() => {
|
// TODO: Update watermelonDB to recognize experimentalSubscribe at types
|
||||||
|
// experimentalSubscribe(subscriber: (isDeleted: boolean) => void, debugInfo?: any): Unsubscribe
|
||||||
|
// @ts-ignore
|
||||||
|
this.subscription = item.experimentalSubscribe(() => {
|
||||||
this.forceUpdate();
|
this.forceUpdate();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -112,8 +114,8 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
if (this.subscription && this.subscription.unsubscribe) {
|
if (this.subscription) {
|
||||||
this.subscription.unsubscribe();
|
this.subscription();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ declare module 'react-native-config-reader';
|
||||||
declare module 'react-native-keycommands';
|
declare module 'react-native-keycommands';
|
||||||
declare module 'react-native-mime-types';
|
declare module 'react-native-mime-types';
|
||||||
declare module 'react-native-restart';
|
declare module 'react-native-restart';
|
||||||
declare module 'react-native-jitsi-meet';
|
|
||||||
declare module 'rn-root-view';
|
declare module 'rn-root-view';
|
||||||
declare module 'react-native-math-view';
|
declare module 'react-native-math-view';
|
||||||
declare module '@env' {
|
declare module '@env' {
|
||||||
|
|
|
@ -12,3 +12,4 @@ export * from './notifications';
|
||||||
export * from './defaultSettings';
|
export * from './defaultSettings';
|
||||||
export * from './tablet';
|
export * from './tablet';
|
||||||
export * from './mediaAutoDownload';
|
export * from './mediaAutoDownload';
|
||||||
|
export * from './userAgent';
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
import { isIOS } from '../methods/helpers';
|
||||||
|
|
||||||
|
export const userAgent = isIOS
|
||||||
|
? 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1'
|
||||||
|
: 'Mozilla/5.0 (Linux; Android 12; SM-A315G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36';
|
|
@ -104,6 +104,7 @@ export const search = async ({ text = '', filterUsers = true, filterRooms = true
|
||||||
...user,
|
...user,
|
||||||
rid: user.username,
|
rid: user.username,
|
||||||
name: user.username,
|
name: user.username,
|
||||||
|
fname: user.name,
|
||||||
t: SubscriptionType.DIRECT,
|
t: SubscriptionType.DIRECT,
|
||||||
search: true
|
search: true
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,15 +10,12 @@ import { OutsideModalParamList } from '../stacks/types';
|
||||||
import StatusBar from '../containers/StatusBar';
|
import StatusBar from '../containers/StatusBar';
|
||||||
import ActivityIndicator from '../containers/ActivityIndicator';
|
import ActivityIndicator from '../containers/ActivityIndicator';
|
||||||
import { TSupportedThemes, withTheme } from '../theme';
|
import { TSupportedThemes, withTheme } from '../theme';
|
||||||
import { debounce, isIOS } from '../lib/methods/helpers';
|
import { userAgent } from '../lib/constants';
|
||||||
|
import { debounce } from '../lib/methods/helpers';
|
||||||
import * as HeaderButton from '../containers/HeaderButton';
|
import * as HeaderButton from '../containers/HeaderButton';
|
||||||
import { Services } from '../lib/services';
|
import { Services } from '../lib/services';
|
||||||
import { IApplicationState, ICredentials } from '../definitions';
|
import { IApplicationState, ICredentials } from '../definitions';
|
||||||
|
|
||||||
const userAgent = isIOS
|
|
||||||
? 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1'
|
|
||||||
: 'Mozilla/5.0 (Linux; Android 12; SM-A315G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36';
|
|
||||||
|
|
||||||
// iframe uses a postMessage to send the token to the client
|
// iframe uses a postMessage to send the token to the client
|
||||||
// We'll handle this sending the token to the hash of the window.location
|
// We'll handle this sending the token to the hash of the window.location
|
||||||
// https://docs.rocket.chat/guides/developer-guides/iframe-integration/authentication#iframe-url
|
// https://docs.rocket.chat/guides/developer-guides/iframe-integration/authentication#iframe-url
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
declare const JitsiMeetView: React.SFC<>;
|
|
||||||
|
|
||||||
export default JitsiMeetView;
|
|
|
@ -1,74 +0,0 @@
|
||||||
// @ts-ignore
|
|
||||||
// eslint-disable-next-line import/no-unresolved
|
|
||||||
import JitsiMeet from '@socialcode-rob1/react-native-jitsimeet-custom';
|
|
||||||
import React, { useEffect } from 'react';
|
|
||||||
import { RouteProp, useNavigation, useRoute } from '@react-navigation/native';
|
|
||||||
|
|
||||||
import RCActivityIndicator from '../containers/ActivityIndicator';
|
|
||||||
import { useAppSelector } from '../lib/hooks';
|
|
||||||
import { events, logEvent } from '../lib/methods/helpers/log';
|
|
||||||
import { getUserSelector } from '../selectors/login';
|
|
||||||
import { ChatsStackParamList } from '../stacks/types';
|
|
||||||
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
|
||||||
|
|
||||||
const formatUrl = (url: string, baseUrl: string, uriSize: number, avatarAuthURLFragment: string) =>
|
|
||||||
`${baseUrl}/avatar/${url}?format=png&width=${uriSize}&height=${uriSize}${avatarAuthURLFragment}`;
|
|
||||||
|
|
||||||
const JitsiMeetView = (): React.ReactElement => {
|
|
||||||
const { goBack } = useNavigation();
|
|
||||||
const {
|
|
||||||
params: { url, onlyAudio, videoConf, rid }
|
|
||||||
} = useRoute<RouteProp<ChatsStackParamList, 'JitsiMeetView'>>();
|
|
||||||
const user = useAppSelector(state => getUserSelector(state));
|
|
||||||
const baseUrl = useAppSelector(state => state.server.server);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
initJitsi();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const initJitsi = async () => {
|
|
||||||
const audioOnly = onlyAudio ?? false;
|
|
||||||
const { name, id: userId, token, username } = user;
|
|
||||||
const avatarAuthURLFragment = `&rc_token=${token}&rc_uid=${userId}`;
|
|
||||||
const avatar = formatUrl(username, baseUrl, 100, avatarAuthURLFragment);
|
|
||||||
|
|
||||||
const userInfo = {
|
|
||||||
displayName: name as string,
|
|
||||||
avatar
|
|
||||||
};
|
|
||||||
const regex = /(?:\/.*\/)(.*)/;
|
|
||||||
const urlWithoutServer = regex.exec(url)![1];
|
|
||||||
const serverUrl = url.replace(`/${urlWithoutServer}`, '');
|
|
||||||
const room = (url.includes('jwt=') ? urlWithoutServer.split('jwt=')[0] : urlWithoutServer.split('#')[0]).replace('?', '');
|
|
||||||
const jwtToken = url.includes('jwt=') ? url.substring(url.indexOf('jwt=') + 4, url.lastIndexOf('#config')) : undefined;
|
|
||||||
const conferenceOptions = {
|
|
||||||
room,
|
|
||||||
serverUrl,
|
|
||||||
userInfo: {
|
|
||||||
displayName: userInfo.displayName,
|
|
||||||
avatar: userInfo.avatar
|
|
||||||
},
|
|
||||||
subject: room,
|
|
||||||
audioOnly,
|
|
||||||
audioMuted: false,
|
|
||||||
videoMuted: audioOnly,
|
|
||||||
token: jwtToken,
|
|
||||||
featureFlags: {
|
|
||||||
'calendar.enabled': false
|
|
||||||
},
|
|
||||||
configOverrides: {
|
|
||||||
'breakoutRooms.hideAddRoomButton': false
|
|
||||||
}
|
|
||||||
};
|
|
||||||
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_JOIN : events.JM_CONFERENCE_JOIN);
|
|
||||||
if (!videoConf) initVideoConfTimer(rid);
|
|
||||||
await JitsiMeet.launchJitsiMeetView(conferenceOptions);
|
|
||||||
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_TERMINATE : events.JM_CONFERENCE_TERMINATE);
|
|
||||||
if (!videoConf) endVideoConfTimer();
|
|
||||||
goBack();
|
|
||||||
};
|
|
||||||
|
|
||||||
return <RCActivityIndicator absolute size='large' />;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default JitsiMeetView;
|
|
|
@ -1,18 +1,17 @@
|
||||||
import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake';
|
import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { BackHandler, NativeEventSubscription } from 'react-native';
|
import { BackHandler, Linking, NativeEventSubscription, SafeAreaView } from 'react-native';
|
||||||
import { isAppInstalled, openAppWithUri } from 'react-native-send-intent';
|
|
||||||
import WebView from 'react-native-webview';
|
import WebView from 'react-native-webview';
|
||||||
import { WebViewMessage, WebViewNavigation } from 'react-native-webview/lib/WebViewTypes';
|
import { WebViewNavigation } from 'react-native-webview/lib/WebViewTypes';
|
||||||
|
|
||||||
import { IBaseScreen } from '../definitions';
|
import { IBaseScreen } from '../definitions';
|
||||||
|
import { userAgent } from '../lib/constants';
|
||||||
|
import { isIOS } from '../lib/methods/helpers';
|
||||||
import { events, logEvent } from '../lib/methods/helpers/log';
|
import { events, logEvent } from '../lib/methods/helpers/log';
|
||||||
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
||||||
import { ChatsStackParamList } from '../stacks/types';
|
import { ChatsStackParamList } from '../stacks/types';
|
||||||
import { withTheme } from '../theme';
|
import { withTheme } from '../theme';
|
||||||
|
|
||||||
const JITSI_INTENT = 'org.jitsi.meet';
|
|
||||||
|
|
||||||
type TJitsiMeetViewProps = IBaseScreen<ChatsStackParamList, 'JitsiMeetView'>;
|
type TJitsiMeetViewProps = IBaseScreen<ChatsStackParamList, 'JitsiMeetView'>;
|
||||||
|
|
||||||
class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
|
@ -29,19 +28,8 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { route, navigation } = this.props;
|
this.handleJitsiApp();
|
||||||
isAppInstalled(JITSI_INTENT)
|
|
||||||
.then(function (isInstalled) {
|
|
||||||
if (isInstalled) {
|
|
||||||
const callUrl = route.params.url.replace(/^https?:\/\//, '').split('#')[0];
|
|
||||||
openAppWithUri(`intent://${callUrl}#Intent;scheme=${JITSI_INTENT};package=${JITSI_INTENT};end`)
|
|
||||||
.then(() => navigation.pop())
|
|
||||||
.catch(() => {});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(() => {});
|
|
||||||
this.onConferenceJoined();
|
this.onConferenceJoined();
|
||||||
this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => true);
|
|
||||||
activateKeepAwake();
|
activateKeepAwake();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,10 +38,24 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
if (!this.videoConf) {
|
if (!this.videoConf) {
|
||||||
endVideoConfTimer();
|
endVideoConfTimer();
|
||||||
}
|
}
|
||||||
|
if (this.backHandler) {
|
||||||
this.backHandler.remove();
|
this.backHandler.remove();
|
||||||
|
}
|
||||||
deactivateKeepAwake();
|
deactivateKeepAwake();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleJitsiApp = async () => {
|
||||||
|
const { route, navigation } = this.props;
|
||||||
|
const callUrl = route.params.url.replace(/^https?:\/\//, '');
|
||||||
|
try {
|
||||||
|
await Linking.openURL(`org.jitsi.meet://${callUrl}`);
|
||||||
|
navigation.pop();
|
||||||
|
} catch (error) {
|
||||||
|
// As the jitsi app was not opened disable the backhandler on android
|
||||||
|
this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Jitsi Update Timeout needs to be called every 10 seconds to make sure
|
// Jitsi Update Timeout needs to be called every 10 seconds to make sure
|
||||||
// call is not ended and is available to web users.
|
// call is not ended and is available to web users.
|
||||||
onConferenceJoined = () => {
|
onConferenceJoined = () => {
|
||||||
|
@ -63,28 +65,36 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onNavigationStateChange = (webViewState: WebViewNavigation | WebViewMessage) => {
|
onNavigationStateChange = (webViewState: WebViewNavigation) => {
|
||||||
const { navigation, route } = this.props;
|
const { navigation, route } = this.props;
|
||||||
const jitsiRoomId = route.params.url
|
const jitsiRoomId = route.params.url
|
||||||
?.split(/^https?:\/\//)[1]
|
?.split(/^https?:\/\//)[1]
|
||||||
?.split('#')[0]
|
?.split('#')[0]
|
||||||
?.split('/')[1];
|
?.split('/')[1];
|
||||||
if ((jitsiRoomId && !webViewState.url.includes(jitsiRoomId)) || webViewState.url.includes('close')) {
|
if ((jitsiRoomId && !webViewState.url.includes(jitsiRoomId)) || webViewState.url.includes('close')) {
|
||||||
|
if (isIOS) {
|
||||||
|
if (webViewState.navigationType) {
|
||||||
navigation.pop();
|
navigation.pop();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
navigation.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
|
<SafeAreaView style={{ flex: 1 }}>
|
||||||
<WebView
|
<WebView
|
||||||
source={{ uri: `${this.url}${this.url.includes('#config') ? '&' : '#'}config.disableDeepLinking=true` }}
|
source={{ uri: `${this.url}${this.url.includes('#config') ? '&' : '#'}config.disableDeepLinking=true` }}
|
||||||
onMessage={({ nativeEvent }) => this.onNavigationStateChange(nativeEvent)}
|
|
||||||
onNavigationStateChange={this.onNavigationStateChange}
|
onNavigationStateChange={this.onNavigationStateChange}
|
||||||
style={{ flex: 1 }}
|
style={{ flex: 1 }}
|
||||||
|
userAgent={userAgent}
|
||||||
javaScriptEnabled
|
javaScriptEnabled
|
||||||
domStorageEnabled
|
domStorageEnabled
|
||||||
mediaPlaybackRequiresUserAction={false}
|
mediaPlaybackRequiresUserAction={false}
|
||||||
/>
|
/>
|
||||||
|
</SafeAreaView>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,7 +22,7 @@ import { sanitizeLikeString } from '../../lib/database/utils';
|
||||||
import UserPreferences from '../../lib/methods/userPreferences';
|
import UserPreferences from '../../lib/methods/userPreferences';
|
||||||
import { OutsideParamList } from '../../stacks/types';
|
import { OutsideParamList } from '../../stacks/types';
|
||||||
import { withTheme } from '../../theme';
|
import { withTheme } from '../../theme';
|
||||||
import { isTablet } from '../../lib/methods/helpers';
|
import { isIOS, isTablet } from '../../lib/methods/helpers';
|
||||||
import EventEmitter from '../../lib/methods/helpers/events';
|
import EventEmitter from '../../lib/methods/helpers/events';
|
||||||
import { BASIC_AUTH_KEY, setBasicAuth } from '../../lib/methods/helpers/fetch';
|
import { BASIC_AUTH_KEY, setBasicAuth } from '../../lib/methods/helpers/fetch';
|
||||||
import { showConfirmationAlert } from '../../lib/methods/helpers/info';
|
import { showConfirmationAlert } from '../../lib/methods/helpers/info';
|
||||||
|
@ -392,6 +392,8 @@ class NewServerView extends React.Component<INewServerViewProps, INewServerViewS
|
||||||
style={[styles.connectButton, { marginTop: verticalScale({ size: 16, height }) }]}
|
style={[styles.connectButton, { marginTop: verticalScale({ size: 16, height }) }]}
|
||||||
testID='new-server-view-button'
|
testID='new-server-view-button'
|
||||||
/>
|
/>
|
||||||
|
{isIOS ? (
|
||||||
|
<>
|
||||||
<OrSeparator theme={theme} />
|
<OrSeparator theme={theme} />
|
||||||
<Text
|
<Text
|
||||||
style={[
|
style={[
|
||||||
|
@ -414,6 +416,8 @@ class NewServerView extends React.Component<INewServerViewProps, INewServerViewS
|
||||||
loading={connectingOpen && connecting}
|
loading={connectingOpen && connecting}
|
||||||
testID='new-server-view-open'
|
testID='new-server-view-open'
|
||||||
/>
|
/>
|
||||||
|
</>
|
||||||
|
) : null}
|
||||||
</FormContainerInner>
|
</FormContainerInner>
|
||||||
{this.renderCertificatePicker()}
|
{this.renderCertificatePicker()}
|
||||||
</FormContainer>
|
</FormContainer>
|
||||||
|
|
|
@ -906,7 +906,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
const { selectedMessage } = this.state;
|
const { selectedMessage } = this.state;
|
||||||
this.handleCloseEmoji(showActionSheet, {
|
this.handleCloseEmoji(showActionSheet, {
|
||||||
children: <ReactionsList reactions={selectedMessage?.reactions} getCustomEmoji={this.getCustomEmoji} />,
|
children: <ReactionsList reactions={selectedMessage?.reactions} getCustomEmoji={this.getCustomEmoji} />,
|
||||||
snaps: ['50%', '80%'],
|
snaps: ['50%'],
|
||||||
enableContentPanningGesture: false
|
enableContentPanningGesture: false
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,7 +31,7 @@ const data = {
|
||||||
return {
|
return {
|
||||||
username: `user${randomVal}`,
|
username: `user${randomVal}`,
|
||||||
name: `user${randomVal}`, // FIXME: apply a different name
|
name: `user${randomVal}`, // FIXME: apply a different name
|
||||||
password: `password${randomVal}`,
|
password: `Password1@${randomVal}`,
|
||||||
email: `mobile+${randomVal}@rocket.chat`
|
email: `mobile+${randomVal}@rocket.chat`
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,7 +108,10 @@ describe('E2E Encryption', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tap "How it works" and navigate', async () => {
|
it('should tap "How it works" and navigate', async () => {
|
||||||
await element(by.id('e2e-save-password-view-how-it-works').and(by.label('How It Works'))).tap();
|
await waitFor(element(by[textMatcher]('How It Works')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await element(by.id('e2e-save-password-view-how-it-works')).tap();
|
||||||
await waitFor(element(by.id('e2e-how-it-works-view')))
|
await waitFor(element(by.id('e2e-how-it-works-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
|
@ -116,7 +119,10 @@ describe('E2E Encryption', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tap "Save my password" and close modal', async () => {
|
it('should tap "Save my password" and close modal', async () => {
|
||||||
await element(by.id('e2e-save-password-view-saved-password').and(by.label('I Saved My E2E Password'))).tap();
|
await waitFor(element(by[textMatcher]('I Saved My E2E Password')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await element(by.id('e2e-save-password-view-saved-password')).tap();
|
||||||
await sleep(300); // wait for animation
|
await sleep(300); // wait for animation
|
||||||
await waitFor(element(by.id('rooms-list-view')))
|
await waitFor(element(by.id('rooms-list-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
|
@ -237,8 +243,14 @@ describe('E2E Encryption', () => {
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
await expect(element(by.id('e2e-encryption-security-view-password'))).toExist();
|
await expect(element(by.id('e2e-encryption-security-view-password'))).toExist();
|
||||||
await expect(element(by.id('e2e-encryption-security-view-change-password').and(by.label('Save Changes')))).toExist();
|
await waitFor(element(by[textMatcher]('Save Changes')).atIndex(0))
|
||||||
await expect(element(by.id('e2e-encryption-security-view-reset-key').and(by.label('Reset E2E Key')))).toExist();
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await expect(element(by.id('e2e-encryption-security-view-change-password'))).toExist();
|
||||||
|
await waitFor(element(by[textMatcher]('Reset E2E Key')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await expect(element(by.id('e2e-encryption-security-view-reset-key'))).toExist();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -330,7 +342,10 @@ describe('E2E Encryption', () => {
|
||||||
await waitFor(element(by.id('e2e-encryption-security-view')))
|
await waitFor(element(by.id('e2e-encryption-security-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
await element(by.id('e2e-encryption-security-view-reset-key').and(by.label('Reset E2E Key'))).tap();
|
await waitFor(element(by[textMatcher]('Reset E2E Key')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await element(by.id('e2e-encryption-security-view-reset-key')).tap();
|
||||||
await waitFor(element(by[textMatcher]('Are you sure?')))
|
await waitFor(element(by[textMatcher]('Are you sure?')))
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import Detox, { device, waitFor, element, by, expect } from 'detox';
|
import Detox, { device, waitFor, element, by, expect } from 'detox';
|
||||||
|
|
||||||
import { navigateToLogin, login } from '../../helpers/app';
|
import { navigateToLogin, login, TTextMatcher, platformTypes } from '../../helpers/app';
|
||||||
import { createRandomUser, ITestUser } from '../../helpers/data_setup';
|
import { createRandomUser, ITestUser } from '../../helpers/data_setup';
|
||||||
|
|
||||||
const defaultLaunchArgs = { permissions: { notifications: 'YES' } } as Detox.DeviceLaunchAppConfig;
|
const defaultLaunchArgs = { permissions: { notifications: 'YES' } } as Detox.DeviceLaunchAppConfig;
|
||||||
|
let textMatcher: TTextMatcher;
|
||||||
|
|
||||||
const navToLanguage = async () => {
|
const navToLanguage = async () => {
|
||||||
await waitFor(element(by.id('rooms-list-view')))
|
await waitFor(element(by.id('rooms-list-view')))
|
||||||
|
@ -28,10 +29,13 @@ const navToLanguage = async () => {
|
||||||
|
|
||||||
describe('i18n', () => {
|
describe('i18n', () => {
|
||||||
describe('OS language', () => {
|
describe('OS language', () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
({ textMatcher } = platformTypes[device.getPlatform()]);
|
||||||
|
});
|
||||||
it("OS set to 'en' and proper translate to 'en'", async () => {
|
it("OS set to 'en' and proper translate to 'en'", async () => {
|
||||||
// if (device.getPlatform() === 'android') {
|
if (device.getPlatform() === 'android') {
|
||||||
// return; // FIXME: Passing language with launch parameters doesn't work with Android
|
return; // FIXME: Passing language with launch parameters doesn't work with Android
|
||||||
// }
|
}
|
||||||
await device.launchApp({
|
await device.launchApp({
|
||||||
...defaultLaunchArgs,
|
...defaultLaunchArgs,
|
||||||
languageAndLocale: {
|
languageAndLocale: {
|
||||||
|
@ -43,13 +47,16 @@ describe('i18n', () => {
|
||||||
await waitFor(element(by.id('new-server-view')))
|
await waitFor(element(by.id('new-server-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(20000);
|
.withTimeout(20000);
|
||||||
await expect(element(by.id('new-server-view-open').and(by.label('Join our open workspace')))).toBeVisible();
|
await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
||||||
|
await waitFor(element(by[textMatcher]('Join our open workspace')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("OS set to unavailable language and fallback to 'en'", async () => {
|
it("OS set to unavailable language and fallback to 'en'", async () => {
|
||||||
// if (device.getPlatform() === 'android') {
|
if (device.getPlatform() === 'android') {
|
||||||
// return; // FIXME: Passing language with launch parameters doesn't work with Android
|
return; // FIXME: Passing language with launch parameters doesn't work with Android
|
||||||
// }
|
}
|
||||||
await device.launchApp({
|
await device.launchApp({
|
||||||
...defaultLaunchArgs,
|
...defaultLaunchArgs,
|
||||||
languageAndLocale: {
|
languageAndLocale: {
|
||||||
|
@ -60,7 +67,10 @@ describe('i18n', () => {
|
||||||
await waitFor(element(by.id('new-server-view')))
|
await waitFor(element(by.id('new-server-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(20000);
|
.withTimeout(20000);
|
||||||
await expect(element(by.id('new-server-view-open').and(by.label('Join our open workspace')))).toBeVisible();
|
await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
||||||
|
await waitFor(element(by[textMatcher]('Join our open workspace')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,9 +19,9 @@ describe('Onboarding', () => {
|
||||||
await expect(element(by.id('new-server-view'))).toBeVisible();
|
await expect(element(by.id('new-server-view'))).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have "Join our open workspace"', async () => {
|
// it('should have "Join our open workspace"', async () => {
|
||||||
await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
// await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
||||||
});
|
// });
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Usage', () => {
|
describe('Usage', () => {
|
||||||
|
@ -34,12 +34,12 @@ describe('Onboarding', () => {
|
||||||
await element(by[textMatcher]('OK').and(by.type(alertButtonType))).tap();
|
await element(by[textMatcher]('OK').and(by.type(alertButtonType))).tap();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tap on "Join our open workspace" and navigate', async () => {
|
// it('should tap on "Join our open workspace" and navigate', async () => {
|
||||||
await element(by.id('new-server-view-open')).tap();
|
// await element(by.id('new-server-view-open')).tap();
|
||||||
await waitFor(element(by.id('workspace-view')))
|
// await waitFor(element(by.id('workspace-view')))
|
||||||
.toBeVisible()
|
// .toBeVisible()
|
||||||
.withTimeout(60000);
|
// .withTimeout(60000);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it('should enter a valid server without login services and navigate to login', async () => {
|
it('should enter a valid server without login services and navigate to login', async () => {
|
||||||
await device.launchApp({ newInstance: true });
|
await device.launchApp({ newInstance: true });
|
||||||
|
|
|
@ -48,6 +48,13 @@ async function waitForLoading() {
|
||||||
// .withTimeout(10000);
|
// .withTimeout(10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getIndex() {
|
||||||
|
if (device.getPlatform() === 'android') {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
describe('Room', () => {
|
describe('Room', () => {
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||||
|
@ -123,11 +130,11 @@ describe('Room', () => {
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(5000);
|
.withTimeout(5000);
|
||||||
await element(by.id('search-message-view-input')).replaceText('30');
|
await element(by.id('search-message-view-input')).replaceText('30');
|
||||||
await waitFor(element(by[textMatcher]('30')).atIndex(1))
|
await waitFor(element(by[textMatcher]('30')).atIndex(getIndex()))
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(30000);
|
.withTimeout(30000);
|
||||||
await sleep(1000);
|
await sleep(1000);
|
||||||
await element(by[textMatcher]('30')).atIndex(1).tap();
|
await element(by[textMatcher]('30')).atIndex(getIndex()).tap();
|
||||||
await waitForLoading();
|
await waitForLoading();
|
||||||
await waitFor(element(by[textMatcher]('30')).atIndex(0))
|
await waitFor(element(by[textMatcher]('30')).atIndex(0))
|
||||||
.toExist()
|
.toExist()
|
||||||
|
@ -267,10 +274,10 @@ describe('Threads', () => {
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(5000);
|
.withTimeout(5000);
|
||||||
await element(by.id('search-message-view-input')).replaceText('to be searched');
|
await element(by.id('search-message-view-input')).replaceText('to be searched');
|
||||||
await waitFor(element(by[textMatcher]('to be searched')).atIndex(1))
|
await waitFor(element(by[textMatcher]('to be searched')).atIndex(getIndex()))
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(30000);
|
.withTimeout(30000);
|
||||||
await element(by[textMatcher]('to be searched')).atIndex(1).tap();
|
await element(by[textMatcher]('to be searched')).atIndex(getIndex()).tap();
|
||||||
await expectThreadMessages('to be searched');
|
await expectThreadMessages('to be searched');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -107,9 +107,6 @@ PODS:
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- hermes-engine (0.11.0)
|
- hermes-engine (0.11.0)
|
||||||
- iosMath (0.9.4)
|
- iosMath (0.9.4)
|
||||||
- JitsiMeetSDKLite (7.0.1-lite):
|
|
||||||
- JitsiWebRTC (~> 106.0)
|
|
||||||
- JitsiWebRTC (106.0.0)
|
|
||||||
- KeyCommands (2.0.3):
|
- KeyCommands (2.0.3):
|
||||||
- React
|
- React
|
||||||
- libevent (2.1.12)
|
- libevent (2.1.12)
|
||||||
|
@ -366,9 +363,6 @@ PODS:
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-document-picker (8.1.2):
|
- react-native-document-picker (8.1.2):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-jitsimeet-custom (2.5.0):
|
|
||||||
- JitsiMeetSDKLite (= 7.0.1-lite)
|
|
||||||
- React-Core
|
|
||||||
- react-native-mmkv-storage (0.8.0):
|
- react-native-mmkv-storage (0.8.0):
|
||||||
- MMKV (= 1.2.13)
|
- MMKV (= 1.2.13)
|
||||||
- React-Core
|
- React-Core
|
||||||
|
@ -630,7 +624,6 @@ DEPENDENCIES:
|
||||||
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
|
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
|
||||||
- "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)"
|
- "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)"
|
||||||
- react-native-document-picker (from `../node_modules/react-native-document-picker`)
|
- react-native-document-picker (from `../node_modules/react-native-document-picker`)
|
||||||
- "react-native-jitsimeet-custom (from `../node_modules/@socialcode-rob1/react-native-jitsimeet-custom`)"
|
|
||||||
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
||||||
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
|
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
|
||||||
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
||||||
|
@ -696,8 +689,6 @@ SPEC REPOS:
|
||||||
- GoogleUtilities
|
- GoogleUtilities
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- iosMath
|
- iosMath
|
||||||
- JitsiMeetSDKLite
|
|
||||||
- JitsiWebRTC
|
|
||||||
- libevent
|
- libevent
|
||||||
- libwebp
|
- libwebp
|
||||||
- MMKV
|
- MMKV
|
||||||
|
@ -784,8 +775,6 @@ EXTERNAL SOURCES:
|
||||||
:path: "../node_modules/@react-native-cookies/cookies"
|
:path: "../node_modules/@react-native-cookies/cookies"
|
||||||
react-native-document-picker:
|
react-native-document-picker:
|
||||||
:path: "../node_modules/react-native-document-picker"
|
:path: "../node_modules/react-native-document-picker"
|
||||||
react-native-jitsimeet-custom:
|
|
||||||
:path: "../node_modules/@socialcode-rob1/react-native-jitsimeet-custom"
|
|
||||||
react-native-mmkv-storage:
|
react-native-mmkv-storage:
|
||||||
:path: "../node_modules/react-native-mmkv-storage"
|
:path: "../node_modules/react-native-mmkv-storage"
|
||||||
react-native-netinfo:
|
react-native-netinfo:
|
||||||
|
@ -917,8 +906,6 @@ SPEC CHECKSUMS:
|
||||||
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
|
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
|
||||||
hermes-engine: 84e3af1ea01dd7351ac5d8689cbbea1f9903ffc3
|
hermes-engine: 84e3af1ea01dd7351ac5d8689cbbea1f9903ffc3
|
||||||
iosMath: f7a6cbadf9d836d2149c2a84c435b1effc244cba
|
iosMath: f7a6cbadf9d836d2149c2a84c435b1effc244cba
|
||||||
JitsiMeetSDKLite: d59573336ce887ec52327a9927aa8443f560d0b9
|
|
||||||
JitsiWebRTC: f441eb0e2d67f0588bf24e21c5162e97342714fb
|
|
||||||
KeyCommands: f66c535f698ed14b3d3a4e58859d79a827ea907e
|
KeyCommands: f66c535f698ed14b3d3a4e58859d79a827ea907e
|
||||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||||
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
|
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
|
||||||
|
@ -946,7 +933,6 @@ SPEC CHECKSUMS:
|
||||||
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
|
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
|
||||||
react-native-cookies: f54fcded06bb0cda05c11d86788020b43528a26c
|
react-native-cookies: f54fcded06bb0cda05c11d86788020b43528a26c
|
||||||
react-native-document-picker: f5ec1a712ca2a975c233117f044817bb8393cad4
|
react-native-document-picker: f5ec1a712ca2a975c233117f044817bb8393cad4
|
||||||
react-native-jitsimeet-custom: a57ca376bfc1c69f639b138f2de2a10e0ed42c04
|
|
||||||
react-native-mmkv-storage: 8ba3c0216a6df283ece11205b442a3e435aec4e5
|
react-native-mmkv-storage: 8ba3c0216a6df283ece11205b442a3e435aec4e5
|
||||||
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
|
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
|
||||||
react-native-notifications: 83b4fd4a127a6c918fc846cae90da60f84819e44
|
react-native-notifications: 83b4fd4a127a6c918fc846cae90da60f84819e44
|
||||||
|
|
|
@ -273,7 +273,6 @@
|
||||||
56A64DDF0C1730D640D3931C /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
56A64DDF0C1730D640D3931C /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = RocketChatRN.entitlements; path = RocketChatRN/RocketChatRN.entitlements; sourceTree = "<group>"; };
|
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = RocketChatRN.entitlements; path = RocketChatRN/RocketChatRN.entitlements; sourceTree = "<group>"; };
|
||||||
6346D438F967C4A0CF0218B4 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
6346D438F967C4A0CF0218B4 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
65360F272979AA1500778C04 /* JitsiMeetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = JitsiMeetViewController.swift; path = "../node_modules/@socialcode-rob1/react-native-jitsimeet-custom/ios/JitsiMeetViewController.swift"; sourceTree = "<group>"; };
|
|
||||||
7A006F13229C83B600803143 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
7A006F13229C83B600803143 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||||
7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Experimental.xcassets; sourceTree = "<group>"; };
|
7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Experimental.xcassets; sourceTree = "<group>"; };
|
||||||
|
@ -359,7 +358,6 @@
|
||||||
13B07FAE1A68108700A75B9A /* RocketChatRN */ = {
|
13B07FAE1A68108700A75B9A /* RocketChatRN */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
65360F272979AA1500778C04 /* JitsiMeetViewController.swift */,
|
|
||||||
7A006F13229C83B600803143 /* GoogleService-Info.plist */,
|
7A006F13229C83B600803143 /* GoogleService-Info.plist */,
|
||||||
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */,
|
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */,
|
||||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
||||||
|
@ -945,15 +943,11 @@
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh",
|
"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiMeetSDKLite/JitsiMeetSDK.framework/JitsiMeetSDK",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||||
);
|
);
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JitsiMeetSDK.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
||||||
);
|
);
|
||||||
|
@ -1306,15 +1300,11 @@
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh",
|
"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiMeetSDKLite/JitsiMeetSDK.framework/JitsiMeetSDK",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||||
);
|
);
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JitsiMeetSDK.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
||||||
);
|
);
|
||||||
|
@ -1770,7 +1760,7 @@
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||||
MARKETING_VERSION = 4.37.1;
|
MARKETING_VERSION = 4.38.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
|
||||||
|
@ -1809,7 +1799,7 @@
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||||
MARKETING_VERSION = 4.37.1;
|
MARKETING_VERSION = 4.38.0;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService;
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>4.37.1</string>
|
<string>4.38.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>XPC!</string>
|
<string>XPC!</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>4.37.1</string>
|
<string>4.38.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>KeychainGroup</key>
|
<key>KeychainGroup</key>
|
||||||
|
|
|
@ -21,7 +21,6 @@ module.exports = {
|
||||||
},
|
},
|
||||||
maxWorkers: 2,
|
maxWorkers: 2,
|
||||||
resolver: {
|
resolver: {
|
||||||
blocklistRE: blocklist([/ios\/Pods\/JitsiMeetSDK\/Frameworks\/JitsiMeet.framework\/assets\/node_modules\/react-native\/.*/]),
|
|
||||||
resolverMainFields: ['sbmodern', 'react-native', 'browser', 'main'],
|
resolverMainFields: ['sbmodern', 'react-native', 'browser', 'main'],
|
||||||
sourceExts: process.env.RUNNING_E2E_TESTS ? ['mock.ts', ...defaultSourceExts] : defaultSourceExts
|
sourceExts: process.env.RUNNING_E2E_TESTS ? ['mock.ts', ...defaultSourceExts] : defaultSourceExts
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "rocket-chat-reactnative",
|
"name": "rocket-chat-reactnative",
|
||||||
"version": "4.37.1",
|
"version": "4.38.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-native start",
|
"start": "react-native start",
|
||||||
|
@ -64,7 +64,6 @@
|
||||||
"@rocket.chat/message-parser": "^0.31.14",
|
"@rocket.chat/message-parser": "^0.31.14",
|
||||||
"@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile",
|
"@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile",
|
||||||
"@rocket.chat/ui-kit": "^0.31.19",
|
"@rocket.chat/ui-kit": "^0.31.19",
|
||||||
"@socialcode-rob1/react-native-jitsimeet-custom": "socialcode-rob1/react-native-jitsimeet-custom.git",
|
|
||||||
"bytebuffer": "^5.0.1",
|
"bytebuffer": "^5.0.1",
|
||||||
"color2k": "1.2.4",
|
"color2k": "1.2.4",
|
||||||
"commonmark": "git+https://github.com/RocketChat/commonmark.js.git",
|
"commonmark": "git+https://github.com/RocketChat/commonmark.js.git",
|
||||||
|
@ -127,7 +126,6 @@
|
||||||
"react-native-safe-area-context": "3.2.0",
|
"react-native-safe-area-context": "3.2.0",
|
||||||
"react-native-screens": "3.13.1",
|
"react-native-screens": "3.13.1",
|
||||||
"react-native-scrollable-tab-view": "ptomasroos/react-native-scrollable-tab-view",
|
"react-native-scrollable-tab-view": "ptomasroos/react-native-scrollable-tab-view",
|
||||||
"react-native-send-intent": "^1.3.0",
|
|
||||||
"react-native-simple-crypto": "RocketChat/react-native-simple-crypto#0.5.1",
|
"react-native-simple-crypto": "RocketChat/react-native-simple-crypto#0.5.1",
|
||||||
"react-native-skeleton-placeholder": "^5.2.3",
|
"react-native-skeleton-placeholder": "^5.2.3",
|
||||||
"react-native-slowlog": "^1.0.2",
|
"react-native-slowlog": "^1.0.2",
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
diff --git a/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec b/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec
|
|
||||||
index 80a584b..5b2f71c 100644
|
|
||||||
--- a/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec
|
|
||||||
+++ b/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec
|
|
||||||
@@ -16,5 +16,5 @@ Pod::Spec.new do |s|
|
|
||||||
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
|
||||||
|
|
||||||
s.dependency "React-Core"
|
|
||||||
- s.dependency 'JitsiMeetSDK', '6.2.2'
|
|
||||||
+ s.dependency 'JitsiMeetSDKLite', '7.0.1-lite'
|
|
||||||
end
|
|
|
@ -14,11 +14,6 @@ module.exports = {
|
||||||
platforms: {
|
platforms: {
|
||||||
android: null
|
android: null
|
||||||
}
|
}
|
||||||
},
|
|
||||||
'@socialcode-rob1/react-native-jitsimeet-custom': {
|
|
||||||
platforms: {
|
|
||||||
android: null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -5431,10 +5431,6 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@sinonjs/commons" "^1.7.0"
|
"@sinonjs/commons" "^1.7.0"
|
||||||
|
|
||||||
"@socialcode-rob1/react-native-jitsimeet-custom@socialcode-rob1/react-native-jitsimeet-custom.git":
|
|
||||||
version "2.5.0"
|
|
||||||
resolved "https://codeload.github.com/socialcode-rob1/react-native-jitsimeet-custom/tar.gz/b1f57cd065028fef2e806824e176d2b54e12cfaf"
|
|
||||||
|
|
||||||
"@storybook/addon-storyshots@6.3":
|
"@storybook/addon-storyshots@6.3":
|
||||||
version "6.3.13"
|
version "6.3.13"
|
||||||
resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-6.3.13.tgz#282a48880e5074baea7b84f5b091591eb21a9485"
|
resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-6.3.13.tgz#282a48880e5074baea7b84f5b091591eb21a9485"
|
||||||
|
@ -17581,11 +17577,6 @@ react-native-scrollable-tab-view@ptomasroos/react-native-scrollable-tab-view:
|
||||||
prop-types "^15.6.0"
|
prop-types "^15.6.0"
|
||||||
react-timer-mixin "^0.13.3"
|
react-timer-mixin "^0.13.3"
|
||||||
|
|
||||||
react-native-send-intent@^1.3.0:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/react-native-send-intent/-/react-native-send-intent-1.3.0.tgz#d8c7898827da1b8b10e25a645ce6802d1a0b440c"
|
|
||||||
integrity sha512-ODTX7BHITFxdcAL0K2iHfa3qVYnqG8GPcv1NbLBNC1DyCaOSJiiGtVH6Kc5YBqzQ8+1pV9uN5nfQ5wyFgiq74g==
|
|
||||||
|
|
||||||
react-native-simple-crypto@RocketChat/react-native-simple-crypto#0.5.1:
|
react-native-simple-crypto@RocketChat/react-native-simple-crypto#0.5.1:
|
||||||
version "0.5.1"
|
version "0.5.1"
|
||||||
resolved "https://codeload.github.com/RocketChat/react-native-simple-crypto/tar.gz/dcf6eef5359c739d521371918e13a73f2ea6cb42"
|
resolved "https://codeload.github.com/RocketChat/react-native-simple-crypto/tar.gz/dcf6eef5359c739d521371918e13a73f2ea6cb42"
|
||||||
|
|
Loading…
Reference in New Issue