message: [IMPROVE] Convert HEIC images to JPG and remove compression
diff: @@ -2,7 +2,7 @@ import React, { Component } from 'react';
  import { Alert, Keyboard, NativeModules, Text, View } from 'react-native';
  import { connect } from 'react-redux';
  import { KeyboardAccessoryView } from 'react-native-ui-lib/keyboard';
  -import ImagePicker from 'react-native-image-crop-picker';
  +import ImagePicker, { Image, ImageOrVideo } from 'react-native-image-crop-picker';
  import { dequal } from 'dequal';
  import DocumentPicker from 'react-native-document-picker';
  import { Q } from '@nozbe/watermelondb';
  @@ -27,7 +27,7 @@ import LeftButtons from './LeftButtons';
  // @ts-ignore
  // eslint-disable-next-line import/extensions,import/no-unresolved
  import RightButtons from './RightButtons';
  -import { isAndroid, isTablet } from '../../utils/deviceInfo';
  +import { isAndroid, isIOS, isTablet } from '../../utils/deviceInfo';
  import { canUploadFile } from '../../utils/media';
  import EventEmiter from '../../utils/events';
  import { KEY_COMMAND, handleCommandShowUpload, handleCommandSubmit, handleCommandTyping } from '../../commands';
  @@ -54,15 +54,16 @@ if (isAndroid) {
  const imagePickerConfig = {
  cropping: true,
  - compressImageQuality: 0.8,
  avoidEmptySpaceAroundImage: false,
  - freeStyleCropEnabled: true
  + freeStyleCropEnabled: true,
  + forceJpg: true
  };
  const libraryPickerConfig = {
  multiple: true,
  compressVideoPreset: 'Passthrough',
  - mediaType: 'any'
  + mediaType: 'any',
  + forceJpg: true
  };
  const videoPickerConfig = {
  @@ -129,6 +130,18 @@ interface IMessageBoxState {
  permissionToUpload: boolean;
  }
  +const forceJpgExtension = (attachment: ImageOrVideo) => {
  + if (isIOS && attachment.mime === 'image/jpeg' && attachment.filename) {
  + const regex = new RegExp(/.heic$/i);
  + if (attachment.filename.match(regex)) {
  + attachment.filename = attachment.filename.replace(regex, '.jpg');
  + } else {
  + attachment.filename += '.jpg';
  + }
  + }
  + return attachment;
  +};
  +
  class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
  private text: string;
  @@ -692,7 +705,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
  takePhoto = async () => {
  logEvent(events.ROOM_BOX_ACTION_PHOTO);
  try {
  - const image = await ImagePicker.openCamera(this.imagePickerConfig);
  + let image = (await ImagePicker.openCamera(this.imagePickerConfig)) as Image;
  + image = forceJpgExtension(image);
  if (this.canUploadFile(image)) {
  this.openShareView([image]);
  }
  @@ -716,7 +730,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
  chooseFromLibrary = async () => {
  logEvent(events.ROOM_BOX_ACTION_LIBRARY);
  try {
  - const attachments = await ImagePicker.openPicker(this.libraryPickerConfig);
  + let attachments = (await ImagePicker.openPicker(this.libraryPickerConfig)) as ImageOrVideo[];
  + attachments = attachments.map(att => forceJpgExtension(att));
  this.openShareView(attachments);
  } catch (e) {
  logEvent(events.ROOM_BOX_ACTION_LIBRARY_F);
  