diff --git a/android/app/src/main/res/drawable-hdpi/hashtag.png b/android/app/src/main/res/drawable-hdpi/hashtag.png
new file mode 100644
index 000000000..946eae134
Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/hashtag.png differ
diff --git a/android/app/src/main/res/drawable-hdpi/lock.png b/android/app/src/main/res/drawable-hdpi/lock.png
new file mode 100644
index 000000000..60f2bc365
Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/lock.png differ
diff --git a/android/app/src/main/res/drawable-hdpi/mention.png b/android/app/src/main/res/drawable-hdpi/mention.png
new file mode 100644
index 000000000..637ac5dc3
Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/mention.png differ
diff --git a/android/app/src/main/res/drawable-mdpi/hashtag.png b/android/app/src/main/res/drawable-mdpi/hashtag.png
new file mode 100644
index 000000000..890f02c73
Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/hashtag.png differ
diff --git a/android/app/src/main/res/drawable-mdpi/lock.png b/android/app/src/main/res/drawable-mdpi/lock.png
new file mode 100644
index 000000000..f0d911fdb
Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/lock.png differ
diff --git a/android/app/src/main/res/drawable-mdpi/mention.png b/android/app/src/main/res/drawable-mdpi/mention.png
new file mode 100644
index 000000000..4455b43e8
Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/mention.png differ
diff --git a/android/app/src/main/res/drawable-xhdpi/hashtag.png b/android/app/src/main/res/drawable-xhdpi/hashtag.png
new file mode 100644
index 000000000..70a5b3f63
Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/hashtag.png differ
diff --git a/android/app/src/main/res/drawable-xhdpi/lock.png b/android/app/src/main/res/drawable-xhdpi/lock.png
new file mode 100644
index 000000000..7522c4515
Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/lock.png differ
diff --git a/android/app/src/main/res/drawable-xhdpi/mention.png b/android/app/src/main/res/drawable-xhdpi/mention.png
new file mode 100644
index 000000000..1f51d42fe
Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/mention.png differ
diff --git a/android/app/src/main/res/drawable-xxhdpi/hashtag.png b/android/app/src/main/res/drawable-xxhdpi/hashtag.png
new file mode 100644
index 000000000..8017c8263
Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/hashtag.png differ
diff --git a/android/app/src/main/res/drawable-xxhdpi/lock.png b/android/app/src/main/res/drawable-xxhdpi/lock.png
new file mode 100644
index 000000000..72797f881
Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/lock.png differ
diff --git a/android/app/src/main/res/drawable-xxhdpi/mention.png b/android/app/src/main/res/drawable-xxhdpi/mention.png
new file mode 100644
index 000000000..29defc2cd
Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/mention.png differ
diff --git a/android/app/src/main/res/drawable-xxxhdpi/hashtag.png b/android/app/src/main/res/drawable-xxxhdpi/hashtag.png
new file mode 100644
index 000000000..1a88b82f1
Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/hashtag.png differ
diff --git a/android/app/src/main/res/drawable-xxxhdpi/lock.png b/android/app/src/main/res/drawable-xxxhdpi/lock.png
new file mode 100644
index 000000000..e4931fe5b
Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/lock.png differ
diff --git a/android/app/src/main/res/drawable-xxxhdpi/mention.png b/android/app/src/main/res/drawable-xxxhdpi/mention.png
new file mode 100644
index 000000000..14b2374d4
Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/mention.png differ
diff --git a/app/containers/RoomTypeIcon.js b/app/containers/RoomTypeIcon.js
index 0d843eef7..0eb6175bb 100644
--- a/app/containers/RoomTypeIcon.js
+++ b/app/containers/RoomTypeIcon.js
@@ -15,9 +15,9 @@ const RoomTypeIcon = ({ type, size, style }) => {
}
if (type === 'c') {
- return ;
+ return ;
}
- return ;
+ return ;
};
RoomTypeIcon.propTypes = {
diff --git a/app/containers/Typing.js b/app/containers/Typing.js
deleted file mode 100644
index 10836a1d7..000000000
--- a/app/containers/Typing.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import {
- View, StyleSheet, Text, Keyboard, LayoutAnimation
-} from 'react-native';
-import { connect } from 'react-redux';
-import I18n from '../i18n';
-
-const styles = StyleSheet.create({
- typing: {
- transform: [{ scaleY: -1 }],
- fontWeight: 'bold',
- paddingHorizontal: 15,
- height: 25
- },
- emptySpace: {
- height: 5
- }
-});
-
-@connect(state => ({
- username: state.login.user && state.login.user.username,
- usersTyping: state.room.usersTyping
-}))
-export default class Typing extends React.Component {
- shouldComponentUpdate(nextProps) {
- const { usersTyping } = this.props;
- return usersTyping.join() !== nextProps.usersTyping.join();
- }
-
- componentWillUpdate() {
- LayoutAnimation.easeInEaseOut();
- }
-
- onPress = () => {
- Keyboard.dismiss();
- }
-
- get usersTyping() {
- const { usersTyping, username } = this.props;
- const users = usersTyping.filter(_username => username !== _username);
- return users.length ? `${ users.join(', ') } ${ users.length > 1 ? I18n.t('are_typing') : I18n.t('is_typing') }` : '';
- }
-
- render() {
- const { usersTyping } = this;
-
- if (!usersTyping) {
- return ;
- }
-
- return ( this.onPress()}>{usersTyping});
- }
-}
-
-
-Typing.propTypes = {
- username: PropTypes.string,
- usersTyping: PropTypes.array
-};
diff --git a/app/sagas/messages.js b/app/sagas/messages.js
index c244960bc..01bda80c2 100644
--- a/app/sagas/messages.js
+++ b/app/sagas/messages.js
@@ -75,20 +75,13 @@ const handleTogglePinRequest = function* handleTogglePinRequest({ message }) {
}
};
-const goRoom = function* goRoom({ rid, name }) {
+const goRoom = function* goRoom({ rid }) {
yield Navigation.popToRoot('RoomsListView');
Navigation.push('RoomsListView', {
component: {
name: 'RoomView',
passProps: {
rid
- },
- options: {
- topBar: {
- title: {
- text: name
- }
- }
}
}
});
@@ -99,10 +92,10 @@ const handleReplyBroadcast = function* handleReplyBroadcast({ message }) {
const { username } = message.u;
const subscriptions = database.objects('subscriptions').filtered('name = $0', username);
if (subscriptions.length) {
- yield goRoom({ rid: subscriptions[0].rid, name: subscriptions[0].name });
+ yield goRoom({ rid: subscriptions[0].rid });
} else {
const room = yield RocketChat.createDirectMessage(username);
- yield goRoom({ rid: room.rid, name: username });
+ yield goRoom({ rid: room.rid });
}
yield delay(500);
yield put(replyInit(message, false));
diff --git a/app/views/CreateChannelView.js b/app/views/CreateChannelView.js
index 41f6f76cf..be205630a 100644
--- a/app/views/CreateChannelView.js
+++ b/app/views/CreateChannelView.js
@@ -125,20 +125,13 @@ export default class CreateChannelView extends LoggedView {
const msg = error.reason || I18n.t('There_was_an_error_while_action', { action: I18n.t('creating_channel') });
showErrorAlert(msg);
} else {
- const { rid, name } = result;
+ const { rid } = result;
await Navigation.dismissModal(componentId);
Navigation.push('RoomsListView', {
component: {
name: 'RoomView',
passProps: {
rid
- },
- options: {
- topBar: {
- title: {
- text: name
- }
- }
}
}
});
diff --git a/app/views/RoomMembersView/index.js b/app/views/RoomMembersView/index.js
index b33d6da0d..abfba5553 100644
--- a/app/views/RoomMembersView/index.js
+++ b/app/views/RoomMembersView/index.js
@@ -115,10 +115,10 @@ export default class RoomMembersView extends LoggedView {
try {
const subscriptions = database.objects('subscriptions').filtered('name = $0', item.username);
if (subscriptions.length) {
- this.goRoom({ rid: subscriptions[0].rid, name: subscriptions[0].name });
+ this.goRoom({ rid: subscriptions[0].rid });
} else {
const room = await RocketChat.createDirectMessage(item.username);
- this.goRoom({ rid: room.rid, name: item.username });
+ this.goRoom({ rid: room.rid });
}
} catch (e) {
log('onPressUser', e);
@@ -152,7 +152,7 @@ export default class RoomMembersView extends LoggedView {
await this.setState({ room });
}
- goRoom = async({ rid, name }) => {
+ goRoom = async({ rid }) => {
const { componentId } = this.props;
await Navigation.popToRoot(componentId);
Navigation.push('RoomsListView', {
@@ -160,13 +160,6 @@ export default class RoomMembersView extends LoggedView {
name: 'RoomView',
passProps: {
rid
- },
- options: {
- topBar: {
- title: {
- text: name
- }
- }
}
}
});
diff --git a/app/views/RoomView/Header/index.js b/app/views/RoomView/Header/index.js
new file mode 100644
index 000000000..e7888bd9b
--- /dev/null
+++ b/app/views/RoomView/Header/index.js
@@ -0,0 +1,162 @@
+import React, { PureComponent } from 'react';
+import PropTypes from 'prop-types';
+import {
+ View, Text, StyleSheet, Image, Platform, LayoutAnimation
+} from 'react-native';
+import { connect } from 'react-redux';
+import { responsive } from 'react-native-responsive-ui';
+import equal from 'deep-equal';
+
+import I18n from '../../../i18n';
+import { STATUS_COLORS } from '../../../constants/colors';
+
+const isIOS = () => Platform.OS === 'ios';
+const TITLE_SIZE = 18;
+const ICON_SIZE = 16;
+const styles = StyleSheet.create({
+ container: {
+ justifyContent: 'center',
+ backgroundColor: isIOS() ? 'transparent' : '#2F343D',
+ height: 44
+ },
+ titleContainer: {
+ flexDirection: 'row',
+ alignItems: 'center'
+ },
+ title: {
+ color: isIOS() ? '#0C0D0F' : '#fff',
+ fontSize: TITLE_SIZE,
+ fontWeight: '500'
+ },
+ type: {
+ width: ICON_SIZE,
+ height: ICON_SIZE,
+ marginRight: 5,
+ tintColor: isIOS() ? '#9EA2A8' : '#fff'
+ },
+ typing: {
+ color: isIOS() ? '#9EA2A8' : '#fff',
+ fontSize: 12
+ },
+ typingUsers: {
+ fontWeight: '600'
+ },
+ alignItemsFlexStart: {
+ alignItems: 'flex-start'
+ },
+ alignItemsCenter: {
+ alignItems: 'center'
+ }
+});
+
+@responsive
+@connect((state) => {
+ let status = '';
+ let title = '';
+ if (state.room.t === 'd') {
+ const { id: loggedUserId } = state.login.user;
+ const userId = state.room.rid.replace(loggedUserId, '').trim();
+ if (userId === loggedUserId) {
+ status = state.login.user.status; // eslint-disable-line
+ } else {
+ const user = state.activeUsers[userId];
+ status = (user && user.status) || 'offline';
+ }
+ title = state.settings.UI_Use_Real_Name ? state.room.fname : state.room.name;
+ } else {
+ title = state.room.name;
+ }
+
+ const { username } = state.login.user;
+ const { usersTyping } = state.room;
+ const otherUsersTyping = usersTyping.filter(_username => _username !== username);
+
+ return {
+ usersTyping: otherUsersTyping,
+ type: state.room.t,
+ title,
+ status
+ };
+})
+export default class RoomHeaderView extends PureComponent {
+ static propTypes = {
+ title: PropTypes.string,
+ type: PropTypes.string,
+ window: PropTypes.object,
+ usersTyping: PropTypes.array,
+ status: PropTypes.string
+ };
+
+ componentDidUpdate(prevProps) {
+ const { usersTyping } = this.props;
+ if (!equal(prevProps.usersTyping, usersTyping)) {
+ LayoutAnimation.easeInEaseOut();
+ }
+ }
+
+ get typing() {
+ const { usersTyping } = this.props;
+ let usersText;
+ if (!usersTyping.length) {
+ return null;
+ } else if (usersTyping.length === 2) {
+ usersText = usersTyping.join(` ${ I18n.t('and') } `);
+ } else {
+ usersText = usersTyping.join(', ');
+ }
+ return (
+
+ {usersText}
+ { usersTyping.length > 1 ? I18n.t('are_typing') : I18n.t('is_typing') }
+
+ );
+ }
+
+ render() {
+ const {
+ window, title, type, status, usersTyping
+ } = this.props;
+ const icon = {
+ d: 'mention',
+ c: 'hashtag'
+ }[type] || 'lock';
+ const portrait = window.height > window.width;
+ let height = 44;
+ let scale = 1;
+
+ if (!portrait) {
+ if (isIOS()) {
+ height = 32;
+ }
+ if (usersTyping.length > 0) {
+ scale = 0.8;
+ }
+ }
+
+ return (
+
+
+
+ {title}
+
+ {this.typing}
+
+ );
+ }
+}
diff --git a/app/views/RoomView/ListView.js b/app/views/RoomView/ListView.js
index 553584f31..a30fc01a6 100644
--- a/app/views/RoomView/ListView.js
+++ b/app/views/RoomView/ListView.js
@@ -7,7 +7,6 @@ import PropTypes from 'prop-types';
import Separator from './Separator';
import styles from './styles';
-import Typing from '../../containers/Typing';
import database from '../../lib/realm';
import scrollPersistTaps from '../../utils/scrollPersistTaps';
import throttle from '../../utils/throttle';
@@ -79,7 +78,6 @@ export class List extends React.Component {
keyExtractor={item => item._id}
onEndReachedThreshold={100}
renderFooter={renderFooter}
- renderHeader={() => }
onEndReached={() => onEndReached(this.data[this.data.length - 1])}
dataSource={this.dataSource}
renderRow={(item, previousItem) => renderRow(item, previousItem)}
diff --git a/app/views/RoomView/index.js b/app/views/RoomView/index.js
index 3ef12f9ad..ac66983de 100644
--- a/app/views/RoomView/index.js
+++ b/app/views/RoomView/index.js
@@ -51,6 +51,13 @@ export default class RoomView extends LoggedView {
static options() {
return {
topBar: {
+ animate: true,
+ title: {
+ component: {
+ name: 'RoomHeaderView',
+ alignment: 'fill'
+ }
+ },
rightButtons: [{
id: 'more',
testID: 'room-view-header-actions',
@@ -224,22 +231,14 @@ export default class RoomView extends LoggedView {
}
updateRoom = () => {
- const { componentId, openRoom, setLastOpen } = this.props;
+ const { openRoom, setLastOpen } = this.props;
if (this.rooms.length > 0) {
const { room: prevRoom } = this.state;
const room = JSON.parse(JSON.stringify(this.rooms[0] || {}));
- LayoutAnimation.easeInEaseOut();
this.internalSetState({ room });
if (!prevRoom.rid) {
- Navigation.mergeOptions(componentId, {
- topBar: {
- title: {
- text: room.name
- }
- }
- });
openRoom({
...room
});
diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js
index b1838a8fb..244b72c1e 100644
--- a/app/views/RoomsListView/index.js
+++ b/app/views/RoomsListView/index.js
@@ -378,19 +378,12 @@ export default class RoomsListView extends LoggedView {
});
}
- goRoom = (rid, name) => {
+ goRoom = (rid) => {
Navigation.push('RoomsListView', {
component: {
name: 'RoomView',
passProps: {
rid
- },
- options: {
- topBar: {
- title: {
- text: name
- }
- }
}
}
});
@@ -399,8 +392,8 @@ export default class RoomsListView extends LoggedView {
_onPressItem = async(item = {}) => {
if (!item.search) {
- const { rid, name } = item;
- return this.goRoom(rid, name);
+ const { rid } = item;
+ return this.goRoom(rid);
}
if (item.t === 'd') {
// if user is using the search we need first to join/create room
@@ -408,13 +401,13 @@ export default class RoomsListView extends LoggedView {
const { username } = item;
const sub = await RocketChat.createDirectMessage(username);
const { rid } = sub;
- return this.goRoom(rid, username);
+ return this.goRoom(rid);
} catch (e) {
log('RoomsListView._onPressItem', e);
}
} else {
- const { rid, name } = item;
- return this.goRoom(rid, name);
+ const { rid } = item;
+ return this.goRoom(rid);
}
}
diff --git a/app/views/index.js b/app/views/index.js
index 8fe13234f..e84fc69ff 100644
--- a/app/views/index.js
+++ b/app/views/index.js
@@ -7,6 +7,7 @@ import ProfileView from './ProfileView';
import RoomsListHeaderView from './RoomsListView/Header';
import RoomsListView from './RoomsListView';
import RoomView from './RoomView';
+import RoomHeaderView from './RoomView/Header';
import SettingsView from './SettingsView';
import Sidebar from '../containers/Sidebar';
@@ -16,6 +17,7 @@ export const registerScreens = (store) => {
Navigation.registerComponentWithRedux('RoomsListHeaderView', () => RoomsListHeaderView, Provider, store);
Navigation.registerComponentWithRedux('RoomsListView', () => gestureHandlerRootHOC(RoomsListView), Provider, store);
Navigation.registerComponentWithRedux('RoomView', () => gestureHandlerRootHOC(RoomView), Provider, store);
+ Navigation.registerComponentWithRedux('RoomHeaderView', () => RoomHeaderView, Provider, store);
Navigation.registerComponentWithRedux('SettingsView', () => SettingsView, Provider, store);
Navigation.registerComponentWithRedux('Sidebar', () => Sidebar, Provider, store);
};
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/Contents.json
similarity index 63%
rename from ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Contents.json
rename to ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/Contents.json
index 148a6e731..6eb8ad0b1 100644
--- a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Contents.json
+++ b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/Contents.json
@@ -2,17 +2,17 @@
"images" : [
{
"idiom" : "universal",
- "filename" : "Cell Subscription Lock.png",
+ "filename" : "hashtag.png",
"scale" : "1x"
},
{
"idiom" : "universal",
- "filename" : "Cell Subscription Lock@2x.png",
+ "filename" : "hashtag@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
- "filename" : "Cell Subscription Lock@3x.png",
+ "filename" : "hashtag@3x.png",
"scale" : "3x"
}
],
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag.png b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag.png
new file mode 100644
index 000000000..890f02c73
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@2x.png b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@2x.png
new file mode 100644
index 000000000..70a5b3f63
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@3x.png b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@3x.png
new file mode 100644
index 000000000..8017c8263
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/hashtag.imageset/hashtag@3x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/Contents.json
similarity index 62%
rename from ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Contents.json
rename to ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/Contents.json
index eac29d3ff..b888030d1 100644
--- a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Contents.json
+++ b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/Contents.json
@@ -2,17 +2,17 @@
"images" : [
{
"idiom" : "universal",
- "filename" : "Cell Subscription Hashtag.png",
+ "filename" : "lock.png",
"scale" : "1x"
},
{
"idiom" : "universal",
- "filename" : "Cell Subscription Hashtag@2x.png",
+ "filename" : "lock@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
- "filename" : "Cell Subscription Hashtag@3x.png",
+ "filename" : "lock@3x.png",
"scale" : "3x"
}
],
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock.png b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock.png
new file mode 100644
index 000000000..f0d911fdb
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock@2x.png b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock@2x.png
new file mode 100644
index 000000000..7522c4515
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock@3x.png b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock@3x.png
new file mode 100644
index 000000000..72797f881
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/lock.imageset/lock@3x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/Contents.json
new file mode 100644
index 000000000..059ff5a46
--- /dev/null
+++ b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "mention.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "mention@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "mention@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention.png b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention.png
new file mode 100644
index 000000000..4455b43e8
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention@2x.png b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention@2x.png
new file mode 100644
index 000000000..1f51d42fe
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention@3x.png b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention@3x.png
new file mode 100644
index 000000000..29defc2cd
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/Icons/mention.imageset/mention@3x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag.png b/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag.png
deleted file mode 100644
index 749534051..000000000
Binary files a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag.png and /dev/null differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag@2x.png b/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag@2x.png
deleted file mode 100644
index 56e7b8cbf..000000000
Binary files a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag@2x.png and /dev/null differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag@3x.png b/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag@3x.png
deleted file mode 100644
index 59983e226..000000000
Binary files a/ios/RocketChatRN/Images.xcassets/Icons/subscription_hashtag.imageset/Cell Subscription Hashtag@3x.png and /dev/null differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock.png b/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock.png
deleted file mode 100644
index 95368bae6..000000000
Binary files a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock.png and /dev/null differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock@2x.png b/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock@2x.png
deleted file mode 100644
index 7a0dd92ce..000000000
Binary files a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock@2x.png and /dev/null differ
diff --git a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock@3x.png b/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock@3x.png
deleted file mode 100644
index 060a2b03a..000000000
Binary files a/ios/RocketChatRN/Images.xcassets/Icons/subscription_lock.imageset/Cell Subscription Lock@3x.png and /dev/null differ