diff --git a/app/views/RoomView/RightButtons.tsx b/app/views/RoomView/RightButtons.tsx index b1e724a3e..9a3ef9f2a 100644 --- a/app/views/RoomView/RightButtons.tsx +++ b/app/views/RoomView/RightButtons.tsx @@ -20,7 +20,7 @@ import { onHoldLivechat, returnLivechat } from '../../lib/services/restApi'; import { getUserSelector } from '../../selectors/login'; import { TNavigation } from '../../stacks/stackType'; import { ChatsStackParamList } from '../../stacks/types'; -import HeaderCallButton from './components/HeaderCallButton'; +import { HeaderCallButton } from './components'; interface IRightButtonsProps extends Pick { userId?: string; diff --git a/app/views/RoomView/components/EncryptedRoom.tsx b/app/views/RoomView/components/EncryptedRoom.tsx new file mode 100644 index 000000000..e7cb05c0c --- /dev/null +++ b/app/views/RoomView/components/EncryptedRoom.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import { Text, View } from 'react-native'; + +export const EncryptedRoom = () => ( + + This room is encrypted + +); diff --git a/app/views/RoomView/components/HeaderCallButton.tsx b/app/views/RoomView/components/HeaderCallButton.tsx index 5f43e9552..8e312f2c7 100644 --- a/app/views/RoomView/components/HeaderCallButton.tsx +++ b/app/views/RoomView/components/HeaderCallButton.tsx @@ -3,7 +3,7 @@ import React from 'react'; import * as HeaderButton from '../../../containers/HeaderButton'; import { useVideoConf } from '../../../lib/hooks/useVideoConf'; -export default function HeaderCallButton({ rid }: { rid: string }): React.ReactElement | null { +export const HeaderCallButton = ({ rid }: { rid: string }): React.ReactElement | null => { const { showInitCallActionSheet, callEnabled, disabledTooltip } = useVideoConf(rid); if (callEnabled) @@ -16,4 +16,4 @@ export default function HeaderCallButton({ rid }: { rid: string }): React.ReactE /> ); return null; -} +}; diff --git a/app/views/RoomView/components/MissingRoomE2EEKey.tsx b/app/views/RoomView/components/MissingRoomE2EEKey.tsx new file mode 100644 index 000000000..380ec49cb --- /dev/null +++ b/app/views/RoomView/components/MissingRoomE2EEKey.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import { Text, View } from 'react-native'; + +export const MissingRoomE2EEKey = () => ( + + Check back in a few moments + +); diff --git a/app/views/RoomView/components/index.ts b/app/views/RoomView/components/index.ts new file mode 100644 index 000000000..68d4054e2 --- /dev/null +++ b/app/views/RoomView/components/index.ts @@ -0,0 +1,3 @@ +export * from './EncryptedRoom'; +export * from './HeaderCallButton'; +export * from './MissingRoomE2EEKey'; diff --git a/app/views/RoomView/definitions.ts b/app/views/RoomView/definitions.ts index 8feadc3d8..ca1b3073f 100644 --- a/app/views/RoomView/definitions.ts +++ b/app/views/RoomView/definitions.ts @@ -23,6 +23,7 @@ export interface IRoomViewProps extends IActionSheetProvider, IBaseScreen { private rid?: string; @@ -1441,7 +1442,7 @@ class RoomView extends React.Component { render() { console.count(`${this.constructor.name}.render calls`); const { room, loading, action, selectedMessages } = this.state; - const { user, baseUrl, theme, width, serverVersion } = this.props; + const { user, baseUrl, theme, width, serverVersion, encryptionEnabled } = this.props; const { rid, t } = room; let bannerClosed; let announcement; @@ -1449,6 +1450,16 @@ class RoomView extends React.Component { ({ bannerClosed, announcement } = room); } + // Missing room encryption key + if (encryptionEnabled && 'encrypted' in room && room.encrypted && 'E2EKey' in room && !room.E2EKey) { + return ; + } + + // Encrypted room, but user session is not encrypted + if (!encryptionEnabled && 'encrypted' in room && room.encrypted) { + return ; + } + return ( ({ transferLivechatGuestPermission: state.permissions['transfer-livechat-guest'], viewCannedResponsesPermission: state.permissions['view-canned-responses'], livechatAllowManualOnHold: state.settings.Livechat_allow_manual_on_hold as boolean, - inAppFeedback: state.inAppFeedback + inAppFeedback: state.inAppFeedback, + encryptionEnabled: state.encryption.enabled }); export default connect(mapStateToProps)(withDimensions(withTheme(withSafeAreaInsets(withActionSheet(RoomView)))));