diff --git a/android/app/build.gradle b/android/app/build.gradle index 9cd86d849..fc7baf740 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -226,12 +226,6 @@ dependencies { implementation('com.crashlytics.sdk.android:crashlytics:2.9.9@aar') { transitive = true } - implementation(project(':react-native-jitsi-meet')) { - exclude group: 'com.facebook.react', module:'react-native-fast-image' - exclude group: 'com.facebook.react', module:'react-native-vector-icons' - exclude group: 'com.facebook.react', module:'react-native-webview' - exclude group: 'com.facebook.react', module:'react-native-background-timer' - } if (enableHermes) { def hermesPath = "../../node_modules/hermesvm/android/"; diff --git a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java index c3631e2bc..4cdc29477 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java +++ b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.java @@ -35,7 +35,6 @@ import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage; import io.invertase.firebase.perf.RNFirebasePerformancePackage; import com.nozbe.watermelondb.WatermelonDBPackage; -import com.reactnativejitsimeet.JitsiMeetPackage; import java.util.Arrays; import java.util.List; @@ -60,7 +59,6 @@ public class MainApplication extends Application implements ReactApplication, IN packages.add(new KeyboardInputPackage(MainApplication.this)); packages.add(new RNNotificationsPackage(MainApplication.this)); packages.add(new WatermelonDBPackage()); - packages.add(new JitsiMeetPackage()); packages.add(new ModuleRegistryAdapter(mModuleRegistryProvider)); return packages; } diff --git a/android/settings.gradle b/android/settings.gradle index 6c24d8e31..db6d01bab 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -8,7 +8,5 @@ include ':reactnativenotifications' project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android/app') include ':reactnativekeyboardinput' project(':reactnativekeyboardinput').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keyboard-input/lib/android') -include ':react-native-jitsi-meet' -project(':react-native-jitsi-meet').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-jitsi-meet/android') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' diff --git a/app/containers/MessageBox/Recording.js b/app/containers/MessageBox/Recording.js index 96f45c9b7..d5fed549a 100644 --- a/app/containers/MessageBox/Recording.js +++ b/app/containers/MessageBox/Recording.js @@ -5,6 +5,7 @@ import { } from 'react-native'; import { AudioRecorder, AudioUtils } from 'react-native-audio'; import { BorderlessButton } from 'react-native-gesture-handler'; +import FileSystem from 'expo-file-system'; import styles from './styles'; import I18n from '../../i18n'; @@ -68,7 +69,7 @@ export default class extends React.PureComponent { // AudioRecorder.onFinished = (data) => { if (!this.recordingCanceled && isIOS) { - this.finishRecording(data.status === 'OK', data.audioFileURL); + this.finishRecording(data.status === 'OK', data.audioFileURL, data.audioFileSize); } }; AudioRecorder.startRecording(); @@ -80,7 +81,7 @@ export default class extends React.PureComponent { } } - finishRecording = (didSucceed, filePath) => { + finishRecording = (didSucceed, filePath, size) => { const { onFinish } = this.props; if (!didSucceed) { return onFinish && onFinish(didSucceed); @@ -90,9 +91,11 @@ export default class extends React.PureComponent { } const fileInfo = { name: this.name, + mime: 'audio/aac', type: 'audio/aac', store: 'Uploads', - path: filePath + path: filePath, + size }; return onFinish && onFinish(fileInfo); } @@ -102,7 +105,8 @@ export default class extends React.PureComponent { this.recording = false; const filePath = await AudioRecorder.stopRecording(); if (isAndroid) { - this.finishRecording(true, filePath); + const data = await FileSystem.getInfoAsync(decodeURIComponent(filePath)); + this.finishRecording(true, filePath, data.size); } } catch (err) { this.finishRecording(false); diff --git a/app/containers/MessageBox/RightButtons.android.js b/app/containers/MessageBox/RightButtons.android.js index 6384fabf3..6ce281653 100644 --- a/app/containers/MessageBox/RightButtons.android.js +++ b/app/containers/MessageBox/RightButtons.android.js @@ -10,10 +10,10 @@ const RightButtons = React.memo(({ return ; } return ( - + <> - + ); }); diff --git a/app/containers/MessageBox/UploadModal.js b/app/containers/MessageBox/UploadModal.js index 596934ebf..3773391b7 100644 --- a/app/containers/MessageBox/UploadModal.js +++ b/app/containers/MessageBox/UploadModal.js @@ -2,7 +2,6 @@ import React, { Component } from 'react'; import { View, Text, StyleSheet, Image, ScrollView, TouchableHighlight } from 'react-native'; -import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import Modal from 'react-native-modal'; import { responsive } from 'react-native-responsive-ui'; @@ -13,9 +12,8 @@ import Button from '../Button'; import I18n from '../../i18n'; import sharedStyles from '../../views/Styles'; import { isIOS } from '../../utils/deviceInfo'; -import { canUploadFile } from '../../utils/media'; import { - COLOR_PRIMARY, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_DANGER + COLOR_PRIMARY, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE } from '../../constants/colors'; import { CustomIcon } from '../../lib/Icons'; @@ -75,23 +73,6 @@ const styles = StyleSheet.create({ flex: 1, textAlign: 'center' }, - errorIcon: { - color: COLOR_DANGER - }, - fileMime: { - ...sharedStyles.textColorTitle, - ...sharedStyles.textBold, - textAlign: 'center', - fontSize: 20, - marginBottom: 20 - }, - errorContainer: { - margin: 20, - flex: 1, - textAlign: 'center', - justifyContent: 'center', - alignItems: 'center' - }, video: { flex: 1, borderRadius: 4, @@ -110,9 +91,7 @@ class UploadModal extends Component { file: PropTypes.object, close: PropTypes.func, submit: PropTypes.func, - window: PropTypes.object, - FileUpload_MediaTypeWhiteList: PropTypes.string, - FileUpload_MaxFileSize: PropTypes.number + window: PropTypes.object } state = { @@ -154,79 +133,12 @@ class UploadModal extends Component { return false; } - canUploadFile = () => { - const { FileUpload_MediaTypeWhiteList, FileUpload_MaxFileSize, file } = this.props; - if (!(file && file.path)) { - return true; - } - if (file.size > FileUpload_MaxFileSize) { - return false; - } - // if white list is empty, all media types are enabled - if (!FileUpload_MediaTypeWhiteList) { - return true; - } - const allowedMime = FileUpload_MediaTypeWhiteList.split(','); - if (allowedMime.includes(file.mime)) { - return true; - } - const wildCardGlob = '/*'; - const wildCards = allowedMime.filter(item => item.indexOf(wildCardGlob) > 0); - if (wildCards.includes(file.mime.replace(/(\/.*)$/, wildCardGlob))) { - return true; - } - return false; - } - submit = () => { const { file, submit } = this.props; const { name, description } = this.state; submit({ ...file, name, description }); } - renderError = () => { - const { file, FileUpload_MaxFileSize, close } = this.props; - const { window: { width } } = this.props; - const errorMessage = (FileUpload_MaxFileSize < file.size) - ? 'error-file-too-large' - : 'error-invalid-file-type'; - return ( - - - {I18n.t(errorMessage)} - - - - - { file.mime } - - { - (isIOS) - ? ( -