diff --git a/__mocks__/react-native-device-info.js b/__mocks__/react-native-device-info.js new file mode 100644 index 000000000..746f49549 --- /dev/null +++ b/__mocks__/react-native-device-info.js @@ -0,0 +1,4 @@ +export default { + getModel: () => '', + getReadableVersion: () => '' +}; diff --git a/__mocks__/react-native-navigation.js b/__mocks__/react-native-navigation.js index 1ea9fa342..b1c2af5e6 100644 --- a/__mocks__/react-native-navigation.js +++ b/__mocks__/react-native-navigation.js @@ -1,4 +1,17 @@ -export const Navigation = { - registerComponent: () => {}, - startSingleScreenApp: () => {} +class Events { + registerAppLaunchedListener = () => {} +} +const events = new Events(); +class NavigationClass { + registerComponent = () => {} + + setRoot = () => {} + + events = () => events +} + +const Navigation = new NavigationClass(); + +export { + Navigation }; diff --git a/app/Icons.js b/app/Icons.js index 968a72379..29fdb18ad 100644 --- a/app/Icons.js +++ b/app/Icons.js @@ -1,7 +1,6 @@ -import { Platform } from 'react-native'; import Ionicons from 'react-native-vector-icons/Ionicons'; +import { isIOS } from './utils/deviceInfo'; -const isIOS = Platform.OS === 'ios'; const prefix = isIOS ? 'ios' : 'md'; // icon name from provider: [ size of the uri, icon provider, name to be used later ] diff --git a/app/constants/headerOptions.js b/app/constants/headerOptions.js index a02384fc9..3516c6f0d 100644 --- a/app/constants/headerOptions.js +++ b/app/constants/headerOptions.js @@ -7,6 +7,7 @@ export const DARK_HEADER = { }, topBar: { backButton: { + showTitle: false, color: '#fff' }, background: { @@ -31,6 +32,7 @@ export const LIGHT_HEADER = { }, topBar: { backButton: { + showTitle: false, color: '#1d74f5' }, background: { diff --git a/app/containers/EmojiPicker/EmojiCategory.js b/app/containers/EmojiPicker/EmojiCategory.js index 19f2cf48a..3ea6c4018 100644 --- a/app/containers/EmojiPicker/EmojiCategory.js +++ b/app/containers/EmojiPicker/EmojiCategory.js @@ -1,14 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Text, TouchableOpacity, Platform } from 'react-native'; +import { Text, TouchableOpacity } from 'react-native'; import { emojify } from 'react-emojione'; import { responsive } from 'react-native-responsive-ui'; import { OptimizedFlatList } from 'react-native-optimized-flatlist'; + import styles from './styles'; import CustomEmoji from './CustomEmoji'; import scrollPersistTaps from '../../utils/scrollPersistTaps'; +import { isIOS } from '../../utils/deviceInfo'; -const EMOJIS_PER_ROW = Platform.OS === 'ios' ? 8 : 9; +const EMOJIS_PER_ROW = isIOS ? 8 : 9; const renderEmoji = (emoji, size, baseUrl) => { if (emoji.isCustom) { diff --git a/app/containers/MessageBox/Recording.js b/app/containers/MessageBox/Recording.js index 8652f27a0..b7ae0f517 100644 --- a/app/containers/MessageBox/Recording.js +++ b/app/containers/MessageBox/Recording.js @@ -1,14 +1,15 @@ import React from 'react'; import PropTypes from 'prop-types'; import { - View, SafeAreaView, Platform, PermissionsAndroid, Text + View, SafeAreaView, PermissionsAndroid, Text } from 'react-native'; import { AudioRecorder, AudioUtils } from 'react-native-audio'; import { BorderlessButton } from 'react-native-gesture-handler'; - import Icon from 'react-native-vector-icons/MaterialIcons'; + import styles from './styles'; import I18n from '../../i18n'; +import { isIOS, isAndroid } from '../../utils/deviceInfo'; export const _formatTime = function(seconds) { let minutes = Math.floor(seconds / 60); @@ -20,7 +21,7 @@ export const _formatTime = function(seconds) { export default class extends React.PureComponent { static async permission() { - if (Platform.OS !== 'android') { + if (!isAndroid) { return true; } @@ -64,7 +65,7 @@ export default class extends React.PureComponent { }; // AudioRecorder.onFinished = (data) => { - if (!this.recordingCanceled && Platform.OS === 'ios') { + if (!this.recordingCanceled && isIOS) { this.finishRecording(data.status === 'OK', data.audioFileURL); } }; @@ -96,7 +97,7 @@ export default class extends React.PureComponent { try { this.recording = false; const filePath = await AudioRecorder.stopRecording(); - if (Platform.OS === 'android') { + if (isAndroid) { this.finishRecording(true, filePath); } } catch (err) { diff --git a/app/containers/MessageBox/UploadModal.js b/app/containers/MessageBox/UploadModal.js index 06417a0b8..3d04ba416 100644 --- a/app/containers/MessageBox/UploadModal.js +++ b/app/containers/MessageBox/UploadModal.js @@ -1,6 +1,6 @@ import React, { Component } from 'react'; import { - View, Text, StyleSheet, Image, ScrollView, Platform, TouchableHighlight + View, Text, StyleSheet, Image, ScrollView, TouchableHighlight } from 'react-native'; import PropTypes from 'prop-types'; import Modal from 'react-native-modal'; @@ -11,6 +11,7 @@ import TextInput from '../TextInput'; import Button from '../Button'; import I18n from '../../i18n'; import sharedStyles from '../../views/Styles'; +import { isIOS } from '../../utils/deviceInfo'; const cancelButtonColor = '#f7f8fa'; @@ -120,7 +121,7 @@ export default class UploadModal extends Component { renderButtons = () => { const { close } = this.props; - if (Platform.OS === 'ios') { + if (isIOS) { return (