From 6385daebb5c8a56c2f999e2fda74a4fe16d61e5c Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 6 Jul 2021 13:22:38 -0300 Subject: [PATCH 01/12] [FIX] Subscribe to settings making app to hang on login (#3254) --- app/lib/methods/getSettings.js | 5 ++++- app/lib/rocketchat.js | 3 ++- app/sagas/login.js | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/lib/methods/getSettings.js b/app/lib/methods/getSettings.js index f68995af8..c51ac4068 100644 --- a/app/lib/methods/getSettings.js +++ b/app/lib/methods/getSettings.js @@ -131,6 +131,10 @@ export async function setSettings() { reduxStore.dispatch(addSettings(RocketChat.parseSettings(parsed.slice(0, parsed.length)))); } +export function subscribeSettings() { + return RocketChat.subscribe('stream-notify-all', 'public-settings-changed'); +} + export default async function() { try { const db = database.active; @@ -146,7 +150,6 @@ export default async function() { const filteredSettingsIds = filteredSettings.map(s => s._id); reduxStore.dispatch(addSettings(this.parseSettings(filteredSettings))); - RocketChat.subscribe('stream-notify-all', 'public-settings-changed'); // filter server info const serverInfo = filteredSettings.filter(i1 => serverInfoKeys.includes(i1._id)); diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index 1cc0d4e0f..5b69b92ba 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -28,7 +28,7 @@ import getUsersPresence, { getUserPresence, subscribeUsersPresence } from './met import protectedFunction from './methods/helpers/protectedFunction'; import readMessages from './methods/readMessages'; -import getSettings, { getLoginSettings, setSettings } from './methods/getSettings'; +import getSettings, { getLoginSettings, setSettings, subscribeSettings } from './methods/getSettings'; import getRooms from './methods/getRooms'; import { setPermissions, getPermissions } from './methods/getPermissions'; @@ -883,6 +883,7 @@ const RocketChat = { getSettings, getLoginSettings, setSettings, + subscribeSettings, getPermissions, setPermissions, getCustomEmojis, diff --git a/app/sagas/login.js b/app/sagas/login.js index 83eb04dd6..9381e0459 100644 --- a/app/sagas/login.js +++ b/app/sagas/login.js @@ -80,6 +80,10 @@ const handleLoginRequest = function* handleLoginRequest({ credentials, logoutOnE } }; +const subscribeSettings = function* subscribeSettings() { + yield RocketChat.subscribeSettings(); +}; + const fetchPermissions = function* fetchPermissions() { yield RocketChat.getPermissions(); }; @@ -133,6 +137,7 @@ const handleLoginSuccess = function* handleLoginSuccess({ user }) { yield fork(registerPushToken); yield fork(fetchUsersPresence); yield fork(fetchEnterpriseModules, { user }); + yield fork(subscribeSettings); yield put(encryptionInit()); setLanguage(user?.language); From 3e53a7623850967533d14adac266552fba0c5ead Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 8 Jul 2021 17:09:46 -0300 Subject: [PATCH 02/12] [FIX] Poor performance in messages list on Android 11 (#3260) --- patches/react-native+0.63.4.patch | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 patches/react-native+0.63.4.patch diff --git a/patches/react-native+0.63.4.patch b/patches/react-native+0.63.4.patch new file mode 100644 index 000000000..efadfe80b --- /dev/null +++ b/patches/react-native+0.63.4.patch @@ -0,0 +1,55 @@ +diff --git a/node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js b/node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js +index c344ac4..479c8c0 100644 +--- a/node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js ++++ b/node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js +@@ -1244,9 +1244,17 @@ class ScrollView extends React.Component { + // Note: we should split props.style on the inner and outer props + // however, the ScrollView still needs the baseStyle to be scrollable + const {outer, inner} = splitLayoutProps(flattenStyle(props.style)); ++ ++ // Workaround for RefreshControl inverted: https://github.com/facebook/react-native/issues/30034 ++ let inverted; ++ if (inner.scaleY) { ++ inverted = { scaleY: -1 }; ++ delete inner.scaleY; ++ } ++ + return React.cloneElement( + refreshControl, +- {style: [baseStyle, outer]}, ++ {style: [baseStyle, outer, inverted]}, + Date: Thu, 8 Jul 2021 17:10:35 -0300 Subject: [PATCH 03/12] Bump version to 4.18.0 (#3252) --- android/app/build.gradle | 2 +- ios/RocketChatRN.xcodeproj/project.pbxproj | 4 ++-- ios/RocketChatRN/Info.plist | 2 +- ios/ShareRocketChatRN/Info.plist | 2 +- package.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index e3da57bb9..95628ac2f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -144,7 +144,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode VERSIONCODE as Integer - versionName "4.17.0" + versionName "4.18.0" vectorDrawables.useSupportLibrary = true if (!isFoss) { manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj index bbebd2ee7..2c24aa093 100644 --- a/ios/RocketChatRN.xcodeproj/project.pbxproj +++ b/ios/RocketChatRN.xcodeproj/project.pbxproj @@ -1694,7 +1694,7 @@ INFOPLIST_FILE = NotificationService/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 4.17.0; + MARKETING_VERSION = 4.18.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService; @@ -1731,7 +1731,7 @@ INFOPLIST_FILE = NotificationService/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 4.17.0; + MARKETING_VERSION = 4.18.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/ios/RocketChatRN/Info.plist b/ios/RocketChatRN/Info.plist index 4357a8abb..bc30c1441 100644 --- a/ios/RocketChatRN/Info.plist +++ b/ios/RocketChatRN/Info.plist @@ -23,7 +23,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4.17.0 + 4.18.0 CFBundleSignature ???? CFBundleURLTypes diff --git a/ios/ShareRocketChatRN/Info.plist b/ios/ShareRocketChatRN/Info.plist index e38798d73..5db7e5aef 100644 --- a/ios/ShareRocketChatRN/Info.plist +++ b/ios/ShareRocketChatRN/Info.plist @@ -21,7 +21,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 4.17.0 + 4.18.0 CFBundleVersion 1 KeychainGroup diff --git a/package.json b/package.json index 7e0e5d6da..f338cbadb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rocket-chat-reactnative", - "version": "4.17.0", + "version": "4.18.0", "private": true, "scripts": { "start": "react-native start", From 190853225fe1b3ecd784f9f14b18f450c3990f62 Mon Sep 17 00:00:00 2001 From: Reinaldo Neto <47038980+reinaldonetof@users.noreply.github.com> Date: Fri, 9 Jul 2021 11:11:26 -0300 Subject: [PATCH 04/12] [FIX] Create team crashing the app (#3248) Co-authored-by: Gerzon Z Co-authored-by: Gerzon Z Co-authored-by: Diego Mello --- app/sagas/createChannel.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/sagas/createChannel.js b/app/sagas/createChannel.js index a768916c8..9493d5405 100644 --- a/app/sagas/createChannel.js +++ b/app/sagas/createChannel.js @@ -41,10 +41,10 @@ const handleRequest = function* handleRequest({ data }) { encrypted } = data; logEvent(events.CT_CREATE, { - type, - readOnly, - broadcast, - encrypted + type: `${ type }`, + readOnly: `${ readOnly }`, + broadcast: `${ broadcast }`, + encrypted: `${ encrypted }` }); const result = yield call(createTeam, data); sub = { From 16fee2aa64fbd2bd358af312909e625da33e1da8 Mon Sep 17 00:00:00 2001 From: Reinaldo Neto <47038980+reinaldonetof@users.noreply.github.com> Date: Fri, 9 Jul 2021 15:46:24 -0300 Subject: [PATCH 05/12] [IMPROVE] Convert Team to Channel (#3249) * [IMPROVE] Add convert team to a channel * Action to SelectListView and new words to i18n * Implemented the post and it's working with selected channels or not * Fixed the Convert Team Warning at english i18n and changed the function name * E2E test completed in sequence the convert/move teams * [IMPROVE] Add convert team to a channel * Action to SelectListView and new words to i18n * Implemented the post and it's working with selected channels or not * Fixed the Convert Team Warning at english i18n and changed the function name * rebase develop into this branch * [IMPROVE] Add convert team to a channel * Action to SelectListView and new words to i18n * Implemented the post and it's working with selected channels or not * Fixed the Convert Team Warning at english i18n and changed the function name * rebase develop into this branch Co-authored-by: Diego Mello --- app/i18n/locales/en.json | 8 +- app/i18n/locales/pt-BR.json | 3 +- app/lib/methods/getPermissions.js | 3 +- app/lib/rocketchat.js | 7 ++ app/utils/log/events.js | 2 + app/views/RoomActionsView/index.js | 103 +++++++++++++++++++++++++- e2e/tests/team/03-moveconvert.spec.js | 29 +++++++- 7 files changed, 146 insertions(+), 9 deletions(-) diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 723b4dd9e..426aaa77a 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -756,7 +756,7 @@ "member-does-not-exist": "Member does not exist", "Convert": "Convert", "Convert_to_Team": "Convert to Team", - "Convert_to_Team_Warning": "This can't be undone. Once you convert a channel to a team, you can not turn it back to a channel.", + "Convert_to_Team_Warning": "You are converting this Channel to a Team. All Members will be kept.", "Move_to_Team": "Move to Team", "Move_Channel_Paragraph": "Moving a channel inside a team means that this channel will be added in the team’s context, however, all channel’s members, which are not members of the respective team, will still have access to this channel, but will not be added as team’s members. \n\nAll channel’s management will still be made by the owners of this channel.\n\nTeam’s members and even team’s owners, if not a member of this channel, can not have access to the channel’s content. \n\nPlease notice that the Team’s owner will be able remove members from the Channel.", "Move_to_Team_Warning": "After reading the previous intructions about this behavior, do you still want to move this channel to the selected team?", @@ -765,5 +765,9 @@ "Load_Older": "Load Older", "Left_The_Room_Successfully": "Left the room successfully", "Deleted_The_Team_Successfully": "Team deleted successfully", - "Deleted_The_Room_Successfully": "Room deleted successfully" + "Deleted_The_Room_Successfully": "Room deleted successfully", + "Convert_to_Channel": "Convert to Channel", + "Converting_Team_To_Channel": "Converting Team to Channel", + "Select_Team_Channels_To_Delete": "Select the Team’s Channels you would like to delete, the ones you do not select will be moved to the Workspace. \n\nNotice that public Channels will be public and visible to everyone.", + "You_are_converting_the_team": "You are converting this Team to a Channel" } \ No newline at end of file diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index a56f169b8..aefd96106 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -669,5 +669,6 @@ "invalid-room": "Sala inválida", "Left_The_Room_Successfully": "Saiu da sala com sucesso", "Deleted_The_Team_Successfully": "Time deletado com sucesso", - "Deleted_The_Room_Successfully": "Sala deletada com sucesso" + "Deleted_The_Room_Successfully": "Sala deletada com sucesso", + "Convert_to_Channel": "Converter para um Canal" } \ No newline at end of file diff --git a/app/lib/methods/getPermissions.js b/app/lib/methods/getPermissions.js index 6e68f5c33..1c4c56b46 100644 --- a/app/lib/methods/getPermissions.js +++ b/app/lib/methods/getPermissions.js @@ -47,7 +47,8 @@ const PERMISSIONS = [ 'view-statistics', 'view-user-administration', 'view-all-teams', - 'view-all-team-channels' + 'view-all-team-channels', + 'convert-team' ]; export async function setPermissions() { diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index 5b69b92ba..59ee94fc5 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -866,6 +866,13 @@ const RocketChat = { }; return this.sdk.post(type === 'c' ? 'channels.convertToTeam' : 'groups.convertToTeam', params); }, + convertTeamToChannel({ teamId, selected }) { + const params = { + teamId, + ...(selected.length && { roomsToRemove: selected }) + }; + return this.sdk.post('teams.convertToChannel', params); + }, joinRoom(roomId, joinCode, type) { // TODO: join code // RC 0.48.0 diff --git a/app/utils/log/events.js b/app/utils/log/events.js index a183735ba..2ab3f539b 100644 --- a/app/utils/log/events.js +++ b/app/utils/log/events.js @@ -259,6 +259,8 @@ export default { RA_LEAVE_TEAM_F: 'ra_leave_team_f', RA_CONVERT_TO_TEAM: 'ra_convert_to_team', RA_CONVERT_TO_TEAM_F: 'ra_convert_to_team_f', + RA_CONVERT_TEAM_TO_CHANNEL: 'ra_convert_team_to_channel', + RA_CONVERT_TEAM_TO_CHANNEL_F: 'ra_convert_team_to_channel_f', RA_MOVE_TO_TEAM: 'ra_move_to_team', RA_MOVE_TO_TEAM_F: 'ra_move_to_team_f', RA_SEARCH_TEAM: 'ra_search_team', diff --git a/app/views/RoomActionsView/index.js b/app/views/RoomActionsView/index.js index 75c977a28..914a42913 100644 --- a/app/views/RoomActionsView/index.js +++ b/app/views/RoomActionsView/index.js @@ -67,7 +67,8 @@ class RoomActionsView extends React.Component { viewBroadcastMemberListPermission: PropTypes.array, transferLivechatGuestPermission: PropTypes.array, createTeamPermission: PropTypes.array, - addTeamChannelPermission: PropTypes.array + addTeamChannelPermission: PropTypes.array, + convertTeamPermission: PropTypes.array } constructor(props) { @@ -91,7 +92,8 @@ class RoomActionsView extends React.Component { canEdit: false, canToggleEncryption: false, canCreateTeam: false, - canAddChannelToTeam: false + canAddChannelToTeam: false, + canConvertTeam: false }; if (room && room.observe && room.rid) { this.roomObservable = room.observe(); @@ -142,9 +144,10 @@ class RoomActionsView extends React.Component { const canViewMembers = await this.canViewMembers(); const canCreateTeam = await this.canCreateTeam(); const canAddChannelToTeam = await this.canAddChannelToTeam(); + const canConvertTeam = await this.canConvertTeam(); this.setState({ - canAutoTranslate, canAddUser, canInviteUser, canEdit, canToggleEncryption, canViewMembers, canCreateTeam, canAddChannelToTeam + canAutoTranslate, canAddUser, canInviteUser, canEdit, canToggleEncryption, canViewMembers, canCreateTeam, canAddChannelToTeam, canConvertTeam }); // livechat permissions @@ -240,6 +243,16 @@ class RoomActionsView extends React.Component { return canAddChannelToTeam; } + canConvertTeam = async() => { + const { room } = this.state; + const { convertTeamPermission } = this.props; + const { rid } = room; + const permissions = await RocketChat.hasPermission([convertTeamPermission], rid); + + const canConvertTeam = permissions[0]; + return canConvertTeam; + } + canToggleEncryption = async() => { const { room } = this.state; const { toggleRoomE2EEncryptionPermission } = this.props; @@ -433,6 +446,59 @@ class RoomActionsView extends React.Component { }); } + convertTeamToChannel = async() => { + const { room } = this.state; + const { navigation } = this.props; + + try { + const result = await RocketChat.teamListRoomsOfUser({ teamId: room.teamId, userId: room.u._id }); + + if (result.rooms?.length) { + const teamChannels = result.rooms.map(r => ({ + rid: r._id, + name: r.name, + teamId: r.teamId + })); + navigation.navigate('SelectListView', { + title: 'Converting_Team_To_Channel', + data: teamChannels, + infoText: 'Select_Team_Channels_To_Delete', + nextAction: data => this.convertTeamToChannelConfirmation(data) + }); + } else { + this.convertTeamToChannelConfirmation(); + } + } catch (e) { + this.convertTeamToChannelConfirmation(); + } + } + + handleConvertTeamToChannel = async(selected) => { + logEvent(events.RA_CONVERT_TEAM_TO_CHANNEL); + try { + const { room } = this.state; + const { navigation } = this.props; + + const result = await RocketChat.convertTeamToChannel({ teamId: room.teamId, selected }); + + if (result.success) { + navigation.navigate('RoomView'); + } + } catch (e) { + logEvent(events.RA_CONVERT_TEAM_TO_CHANNEL_F); + log(e); + } + } + + convertTeamToChannelConfirmation = (selected = []) => { + showConfirmationAlert({ + title: I18n.t('Confirmation'), + message: I18n.t('You_are_converting_the_team'), + confirmationText: I18n.t('Convert'), + onPress: () => this.handleConvertTeamToChannel(selected) + }); + } + leaveTeam = async() => { const { room } = this.state; const { navigation, leaveRoom } = this.props; @@ -806,6 +872,32 @@ class RoomActionsView extends React.Component { ); } + teamToChannelActions = (t, room) => { + const { canEdit, canConvertTeam } = this.state; + const canConvertTeamToChannel = canEdit && canConvertTeam && !!room?.teamMain; + + return ( + <> + {['c', 'p'].includes(t) && canConvertTeamToChannel + ? ( + <> + this.onPressTouchable({ + event: this.convertTeamToChannel + })} + testID='room-actions-convert-channel-to-team' + left={() => } + showActionIndicator + /> + + + ) + : null} + + ); + } + render() { const { room, membersCount, canViewMembers, canAddUser, canInviteUser, joined, canAutoTranslate, canForwardGuest, canReturnQueue @@ -1007,7 +1099,9 @@ class RoomActionsView extends React.Component { ) : null} + { this.teamChannelActions(t, room) } + {this.teamToChannelActions(t, room)} {['l'].includes(t) && !this.isOmnichannelPreview ? ( @@ -1099,7 +1193,8 @@ const mapStateToProps = state => ({ viewBroadcastMemberListPermission: state.permissions['view-broadcast-member-list'], transferLivechatGuestPermission: state.permissions['transfer-livechat-guest'], createTeamPermission: state.permissions['create-team'], - addTeamChannelPermission: state.permissions['add-team-channel'] + addTeamChannelPermission: state.permissions['add-team-channel'], + convertTeamPermission: state.permissions['convert-team'] }); const mapDispatchToProps = dispatch => ({ diff --git a/e2e/tests/team/03-moveconvert.spec.js b/e2e/tests/team/03-moveconvert.spec.js index 7c071442b..754aafc09 100644 --- a/e2e/tests/team/03-moveconvert.spec.js +++ b/e2e/tests/team/03-moveconvert.spec.js @@ -51,7 +51,7 @@ describe('Move/Convert Team', () => { await element(by.id('room-actions-scrollview')).scrollTo('bottom'); await waitFor(element(by.id('room-actions-convert-to-team'))).toExist().withTimeout(2000); await element(by.id('room-actions-convert-to-team')).tap(); - await waitFor(element(by.label('This can\'t be undone. Once you convert a channel to a team, you can not turn it back to a channel.'))).toExist().withTimeout(2000); + await waitFor(element(by.label('You are converting this Channel to a Team. All Members will be kept.'))).toExist().withTimeout(2000); await element(by.text('Convert')).tap(); await waitFor(element(by.id('room-view'))).toExist().withTimeout(20000); await waitFor(element(by.id(`room-view-title-${ toBeConverted }`))).toExist().withTimeout(6000); @@ -84,5 +84,32 @@ describe('Move/Convert Team', () => { await element(by.text('Yes, move it!')).tap(); await waitFor(element(by.id('room-view-header-team-channels'))).toExist().withTimeout(10000); }); + + after(async() => { + await tapBack(); + await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000); + }); + }); + + describe('Convert Team to Channel and Delete toBeMoved channel within the Converted', () => { + it('should convert a team to a channel', async() => { + await navigateToRoomActions(toBeConverted); + await element(by.id('room-actions-scrollview')).scrollTo('bottom'); + await waitFor(element(by.id('room-actions-convert-channel-to-team'))).toExist().withTimeout(2000); + await element(by.id('room-actions-convert-channel-to-team')).tap(); + await sleep(2000); + await waitFor(element(by.id('select-list-view'))).toExist().withTimeout(2000); + await waitFor(element(by.id(`select-list-view-item-${ toBeMoved }`))).toExist().withTimeout(2000); + await element(by.id(`select-list-view-item-${ toBeMoved }`)).tap(); + await waitFor(element(by.id('select-list-view-submit'))).toExist().withTimeout(2000); + await element(by.id('select-list-view-submit')).tap(); + await waitFor(element(by.label('You are converting this Team to a Channel'))).toExist().withTimeout(2000); + await element(by.text('Convert')).tap(); + await waitFor(element(by.id('room-view'))).toExist().withTimeout(20000); + await waitFor(element(by.id(`room-view-title-${ toBeConverted }`))).toExist().withTimeout(6000); + await tapBack(); + await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000); + await waitFor(element(by.id(`rooms-list-view-item-${ toBeMoved }`))).toBeNotVisible().withTimeout(60000); + }); }); }); From c9d5bc37c48904c2cc81a6ad2ee5b0165448ef1c Mon Sep 17 00:00:00 2001 From: Gerzon Z Date: Mon, 12 Jul 2021 14:05:09 -0400 Subject: [PATCH 06/12] [IMPROVE] Set black as default dark theme (#3270) * Update default darkLevel * Minor tweak --- app/index.js | 2 +- app/share.js | 2 +- app/views/ThemeView.js | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/index.js b/app/index.js index 048323a5b..efcf1557e 100644 --- a/app/index.js +++ b/app/index.js @@ -75,7 +75,7 @@ export default class Root extends React.Component { theme: defaultTheme(), themePreferences: { currentTheme: supportSystemTheme() ? 'automatic' : 'light', - darkLevel: 'dark' + darkLevel: 'black' }, width, height, diff --git a/app/share.js b/app/share.js index bfe011264..dbf0bfbff 100644 --- a/app/share.js +++ b/app/share.js @@ -124,7 +124,7 @@ class Root extends React.Component { theme: defaultTheme(), themePreferences: { currentTheme: supportSystemTheme() ? 'automatic' : 'light', - darkLevel: 'dark' + darkLevel: 'black' }, root: '', width, diff --git a/app/views/ThemeView.js b/app/views/ThemeView.js index e62d7ca58..1152a920c 100644 --- a/app/views/ThemeView.js +++ b/app/views/ThemeView.js @@ -30,14 +30,14 @@ const THEMES = [ label: 'Dark', value: 'dark', group: THEME_GROUP - }, { - label: 'Dark', - value: 'dark', - group: DARK_GROUP }, { label: 'Black', value: 'black', group: DARK_GROUP + }, { + label: 'Dark', + value: 'dark', + group: DARK_GROUP } ]; From 4882ccd58831dac6671eaef2dbf9da6e3eac8777 Mon Sep 17 00:00:00 2001 From: Reinaldo Neto <47038980+reinaldonetof@users.noreply.github.com> Date: Mon, 12 Jul 2021 16:19:25 -0300 Subject: [PATCH 07/12] [IMPROVE] Make `system default` the default browser (#3265) * [FIX] use systemdefault: as the default browser, not inApp * Fix Co-authored-by: Diego Mello --- app/utils/openLink.js | 8 ++++---- app/views/DefaultBrowserView.js | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/utils/openLink.js b/app/utils/openLink.js index 36f72c0e2..703625497 100644 --- a/app/utils/openLink.js +++ b/app/utils/openLink.js @@ -39,16 +39,16 @@ const openLink = async(url, theme = 'light') => { try { const browser = await UserPreferences.getStringAsync(DEFAULT_BROWSER_KEY); - if (browser) { - const schemeUrl = appSchemeURL(url, browser.replace(':', '')); - await Linking.openURL(schemeUrl); - } else { + if (browser === 'inApp') { await WebBrowser.openBrowserAsync(url, { toolbarColor: themes[theme].headerBackground, controlsColor: themes[theme].headerTintColor, collapseToolbar: true, showTitle: true }); + } else { + const schemeUrl = appSchemeURL(url, browser.replace(':', '')); + await Linking.openURL(schemeUrl); } } catch { try { diff --git a/app/views/DefaultBrowserView.js b/app/views/DefaultBrowserView.js index 119ce9fa8..568802360 100644 --- a/app/views/DefaultBrowserView.js +++ b/app/views/DefaultBrowserView.js @@ -83,7 +83,7 @@ class DefaultBrowserView extends React.Component { isSelected = (value) => { const { browser } = this.state; - if (!browser && value === 'inApp') { + if (!browser && value === 'systemDefault:') { return true; } return browser === value; @@ -92,7 +92,7 @@ class DefaultBrowserView extends React.Component { changeDefaultBrowser = async(newBrowser) => { logEvent(events.DB_CHANGE_DEFAULT_BROWSER, { browser: newBrowser }); try { - const browser = newBrowser !== 'inApp' ? newBrowser : null; + const browser = newBrowser !== 'systemDefault:' ? newBrowser : null; await UserPreferences.setStringAsync(DEFAULT_BROWSER_KEY, browser); this.setState({ browser }); } catch { From 8a91d0d50903f5b51b15f4af488694bb6e49b22c Mon Sep 17 00:00:00 2001 From: "lingohub[bot]" <69908207+lingohub[bot]@users.noreply.github.com> Date: Tue, 13 Jul 2021 08:50:49 -0300 Subject: [PATCH 08/12] =?UTF-8?q?Language=20update=20from=20LingoHub=20?= =?UTF-8?q?=F0=9F=A4=96=20(#3269)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Rocket.Chat.ReactNative Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat-dot-reactnative User: Robot LingoHub Easy language translations with LingoHub 🚀 Co-authored-by: Robot LingoHub Co-authored-by: Diego Mello --- app/i18n/locales/fr.json | 8 ++++++-- app/i18n/locales/nl.json | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index 22088b5d1..5f26a2c83 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -756,7 +756,7 @@ "member-does-not-exist": "Le membre n'existe pas", "Convert": "Convertir", "Convert_to_Team": "Convertir en équipe", - "Convert_to_Team_Warning": "Ceci ne peut pas être annulé. Une fois que vous avez converti un canal en équipe, vous ne pouvez pas le retransformer en canal.", + "Convert_to_Team_Warning": "Vous convertissez ce canal en équipe. Tous les membres seront conservés.", "Move_to_Team": "Déplacer vers l'équipe", "Move_Channel_Paragraph": "Le déplacement d'un canal dans une équipe signifie que ce canal sera ajouté dans le contexte d'équipe. Cependant, tous les membres du canal, qui ne sont pas membres de l'équipe respective, auront toujours accès à ce canal, mais ne seront pas ajoutés comme membres de l'équipe.\n\nLa gestion de tout le canal sera toujours assurée par les propriétaires de ce canal.\n\nLes membres de l'équipe et même les propriétaires de l'équipe, s'ils ne sont pas membres de ce canal, ne peuvent pas avoir accès au contenu du canal.\n\nVeuillez noter que le propriétaire de l'équipe pourra supprimer des membres du canal.", "Move_to_Team_Warning": "Après avoir lu les instructions précédentes sur ce comportement, voulez-vous toujours déplacer ce canal vers l'équipe sélectionnée ?", @@ -765,5 +765,9 @@ "Load_Older": "Charger plus ancien", "Left_The_Room_Successfully": "A quitté le salon avec succès", "Deleted_The_Team_Successfully": "Equipe supprimée avec succès", - "Deleted_The_Room_Successfully": "Salon supprimé avec succès" + "Deleted_The_Room_Successfully": "Salon supprimé avec succès", + "Convert_to_Channel": "Convertir en canal", + "Converting_Team_To_Channel": "Conversion de l’équipe en canal", + "Select_Team_Channels_To_Delete": "Sélectionnez les canaux de l'équipe que vous souhaitez supprimer, ceux que vous ne sélectionnez pas, seront déplacés vers l'espace de travail. \n\n\nNotez que les canaux publics seront publics et visibles par tous.", + "You_are_converting_the_team": "Vous convertissez cette équipe en canal" } \ No newline at end of file diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index 5d54bfee7..4b06156d5 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -756,7 +756,7 @@ "member-does-not-exist": "Lid bestaat niet", "Convert": "Converteren", "Convert_to_Team": "Converteren naar team", - "Convert_to_Team_Warning": "Dit kan niet ongedaan worden gemaakt. Eens je een kanaal naar een team hebt geconverteerd, kun je het niet meer naar een kanaal terugzetten.", + "Convert_to_Team_Warning": "Je converteert dit kanaal naar een team. Alle leden blijven behouden.", "Move_to_Team": "Verplaats naar team", "Move_Channel_Paragraph": "Het verplaatsen van een kanaal binnen een team betekent dat dit kanaal wordt toegevoegd in de context van het team. Maar, alle leden van dit kanaal, die geen lid zijn van het respectieve team, zullen nog steeds toegang hebben tot dit kanaal, maar worden niet als teamleden toegevoegd.\n\nHet volledige beheer van dit kanaal wordt nog steeds door de eigenaren van dit kanaal gedaan.\n\nTeamleden en zelfs teameigenaren, wanneer ze geen lid zijn van dit kanaal, hebben geen toegang tot de content van het kanaal.\n\nHou er rekening mee dat de eigenaar van het team de leden uit het kanaal kan verwijderen.", "Move_to_Team_Warning": "Wil je na het lezen van de vorige instructies over dit gedrag, dit kanaal nog steeds naar het geselecteerde team verplaatsen?", @@ -765,5 +765,9 @@ "Load_Older": "Ouder laden", "Left_The_Room_Successfully": "Heeft kamer met succes verlaten", "Deleted_The_Team_Successfully": "Team succesvol verwijderd", - "Deleted_The_Room_Successfully": "Kamer succesvol verwijderd" + "Deleted_The_Room_Successfully": "Kamer succesvol verwijderd", + "Convert_to_Channel": "Converteren naar kanaal", + "Converting_Team_To_Channel": "Team converteren naar kanaal", + "Select_Team_Channels_To_Delete": "Selecteer de teamkanalen die je wilt verwijderen, de kanalen die u niet selecteert, worden naar de werkruimte verplaatst.\n\nMerk op dat openbare kanalen openbaar en voor iedereen zichtbaar zullen zijn.", + "You_are_converting_the_team": "Je converteert dit team naar een kanaal" } \ No newline at end of file From e040be0b453c1d8d256e56770d03ba9f591b286f Mon Sep 17 00:00:00 2001 From: Gerzon Z Date: Tue, 13 Jul 2021 15:35:21 -0400 Subject: [PATCH 09/12] [IMPROVE] Remove difference between public/private on "Group by type" (#3271) * Merge channels and private groups * Remove i18n --- app/i18n/locales/ar.json | 1 - app/i18n/locales/de.json | 1 - app/i18n/locales/en.json | 1 - app/i18n/locales/es-ES.json | 1 - app/i18n/locales/fr.json | 1 - app/i18n/locales/it.json | 1 - app/i18n/locales/ja.json | 1 - app/i18n/locales/nl.json | 1 - app/i18n/locales/pt-BR.json | 1 - app/i18n/locales/pt-PT.json | 1 - app/i18n/locales/ru.json | 1 - app/i18n/locales/tr.json | 1 - app/i18n/locales/zh-CN.json | 1 - app/i18n/locales/zh-TW.json | 1 - app/views/RoomsListView/index.js | 5 +---- 15 files changed, 1 insertion(+), 18 deletions(-) diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json index 6f188ca55..8b08c047d 100644 --- a/app/i18n/locales/ar.json +++ b/app/i18n/locales/ar.json @@ -387,7 +387,6 @@ "Preferences_saved": "تم حفظ التفضيلات", "Privacy_Policy": "سياسة الخصوصية", "Private_Channel": "قناة خاصة", - "Private_Groups": "مجموعات خاصة", "Private": "خاص", "Processing": "جار معالجة...", "Profile_saved_successfully": "تم حفظ الملف الشخصي بنجاح!", diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json index e734fd164..cf61aac86 100644 --- a/app/i18n/locales/de.json +++ b/app/i18n/locales/de.json @@ -400,7 +400,6 @@ "Preferences_saved": "Einstellungen gespeichert!", "Privacy_Policy": " Datenschutzbestimmungen", "Private_Channel": "Privater Kanal", - "Private_Groups": "Private Gruppen", "Private": "Privat", "Processing": "Bearbeite …", "Profile_saved_successfully": "Profil erfolgreich gespeichert!", diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 426aaa77a..194031660 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -400,7 +400,6 @@ "Preferences_saved": "Preferences saved!", "Privacy_Policy": " Privacy Policy", "Private_Channel": "Private Channel", - "Private_Groups": "Private Groups", "Private": "Private", "Processing": "Processing...", "Profile_saved_successfully": "Profile saved successfully!", diff --git a/app/i18n/locales/es-ES.json b/app/i18n/locales/es-ES.json index ac6657042..25a65523d 100644 --- a/app/i18n/locales/es-ES.json +++ b/app/i18n/locales/es-ES.json @@ -280,7 +280,6 @@ "Preferences_saved": "¡Preferencias guardadas!", "Privacy_Policy": "Política de privacidad", "Private_Channel": "Canal privado", - "Private_Groups": "Grupos privados", "Private": "Privado", "Processing": "Procesando...", "Profile_saved_successfully": "¡Perfil guardado correctamente!", diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index 5f26a2c83..07d441eed 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -400,7 +400,6 @@ "Preferences_saved": "Préférences sauvegardées !", "Privacy_Policy": " Politique de confidentialité", "Private_Channel": "Canal privé", - "Private_Groups": "Groupes privés", "Private": "Privé", "Processing": "Traitement...", "Profile_saved_successfully": "Profil enregistré avec succès !", diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json index 505282dd5..e8618f28e 100644 --- a/app/i18n/locales/it.json +++ b/app/i18n/locales/it.json @@ -392,7 +392,6 @@ "Preferences_saved": "Impostazioni salvate!", "Privacy_Policy": " Privacy Policy", "Private_Channel": "Canale privato", - "Private_Groups": "Gruppi privati", "Private": "Privato", "Processing": "Elaborazione...", "Profile_saved_successfully": "Profilo salvato correttamente!", diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json index 994753fbb..61accdd79 100644 --- a/app/i18n/locales/ja.json +++ b/app/i18n/locales/ja.json @@ -296,7 +296,6 @@ "Preferences_saved": "設定が保存されました。", "Privacy_Policy": " プライバシーポリシー", "Private_Channel": "プライベートチャンネル", - "Private_Groups": "プライベートグループ", "Private": "プライベート", "Processing": "処理中...", "Profile_saved_successfully": "プロフィールが保存されました!", diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index 4b06156d5..7c823c9ba 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -400,7 +400,6 @@ "Preferences_saved": "Voorkeuren opgeslagen!", "Privacy_Policy": " Privacybeleid", "Private_Channel": "Privékanaal", - "Private_Groups": "Privé groepen", "Private": "Privé", "Processing": "Verwerking...", "Profile_saved_successfully": "Profiel succesvol opgeslagen!", diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index aefd96106..a6fed1be2 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -370,7 +370,6 @@ "Preferences_saved": "Preferências salvas!", "Privacy_Policy": " Política de Privacidade", "Private_Channel": "Canal Privado", - "Private_Groups": "Grupo Privado", "Private": "Privado", "Processing": "Processando...", "Profile_saved_successfully": "Perfil salvo com sucesso!", diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json index 3724b0634..fa10dcd36 100644 --- a/app/i18n/locales/pt-PT.json +++ b/app/i18n/locales/pt-PT.json @@ -399,7 +399,6 @@ "Preferences_saved": "Preferências guardadas!", "Privacy_Policy": " Política de Privacidade", "Private_Channel": "Canal Privado", - "Private_Groups": "Grupos Privados", "Private": "Privado", "Processing": "A processar...", "Profile_saved_successfully": "Perfil actualizado com sucesso!", diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json index 5267a4a41..58174b8ea 100644 --- a/app/i18n/locales/ru.json +++ b/app/i18n/locales/ru.json @@ -400,7 +400,6 @@ "Preferences_saved": "Настройки сохранены!", "Privacy_Policy": " Политика конфиденциальности", "Private_Channel": "Приватный канал", - "Private_Groups": "Приватные группы", "Private": "Приватный", "Processing": "Обработка...", "Profile_saved_successfully": "Профиль успешно сохранен!", diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json index 82959de8b..bc58ee92b 100644 --- a/app/i18n/locales/tr.json +++ b/app/i18n/locales/tr.json @@ -393,7 +393,6 @@ "Preferences_saved": "Tercihler kaydedildi!", "Privacy_Policy": " Privacy Policy", "Private_Channel": "Özel Kanal", - "Private_Groups": "Özel Gruplar", "Private": "Özel", "Processing": "İşleniyor...", "Profile_saved_successfully": "Profil başarıyla kaydedildi!", diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json index 1b6fe974c..4836d9a83 100644 --- a/app/i18n/locales/zh-CN.json +++ b/app/i18n/locales/zh-CN.json @@ -390,7 +390,6 @@ "Preferences_saved": "偏好已保存!", "Privacy_Policy": "隐私政策", "Private_Channel": "私人频道", - "Private_Groups": "私人群组", "Private": "私有的", "Processing": "处理中", "Profile_saved_successfully": "个人资料保存成功!", diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json index 6f60d155a..29626191c 100644 --- a/app/i18n/locales/zh-TW.json +++ b/app/i18n/locales/zh-TW.json @@ -391,7 +391,6 @@ "Preferences_saved": "偏好設定已被儲存!", "Privacy_Policy": "隱私政策", "Private_Channel": "私人頻道", - "Private_Groups": "私人群組", "Private": "私有的", "Processing": "處理中", "Profile_saved_successfully": "個人資料儲存成功!", diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js index 19df2c3b0..214f213e4 100644 --- a/app/views/RoomsListView/index.js +++ b/app/views/RoomsListView/index.js @@ -71,7 +71,6 @@ const DISCUSSIONS_HEADER = 'Discussions'; const TEAMS_HEADER = 'Teams'; const CHANNELS_HEADER = 'Channels'; const DM_HEADER = 'Direct_Messages'; -const GROUPS_HEADER = 'Private_Groups'; const OMNICHANNEL_HEADER = 'Open_Livechats'; const QUERY_SIZE = 20; @@ -480,13 +479,11 @@ class RoomsListView extends React.Component { if (groupByType) { const teams = chats.filter(s => filterIsTeam(s)); const discussions = chats.filter(s => filterIsDiscussion(s)); - const channels = chats.filter(s => s.t === 'c' && !filterIsDiscussion(s) && !filterIsTeam(s)); - const privateGroup = chats.filter(s => s.t === 'p' && !filterIsDiscussion(s) && !filterIsTeam(s)); + const channels = chats.filter(s => (s.t === 'c' || s.t === 'p') && !filterIsDiscussion(s) && !filterIsTeam(s)); const direct = chats.filter(s => s.t === 'd' && !filterIsDiscussion(s) && !filterIsTeam(s)); tempChats = this.addRoomsGroup(teams, TEAMS_HEADER, tempChats); tempChats = this.addRoomsGroup(discussions, DISCUSSIONS_HEADER, tempChats); tempChats = this.addRoomsGroup(channels, CHANNELS_HEADER, tempChats); - tempChats = this.addRoomsGroup(privateGroup, GROUPS_HEADER, tempChats); tempChats = this.addRoomsGroup(direct, DM_HEADER, tempChats); } else if (showUnread || showFavorites || isOmnichannelAgent) { tempChats = this.addRoomsGroup(chats, CHATS_HEADER, tempChats); From d1702aa4165a25d8673429904a76ec4584a95611 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 15 Jul 2021 11:34:39 -0300 Subject: [PATCH 10/12] Regression: Settings pagination not working (#3277) --- app/lib/methods/getSettings.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/lib/methods/getSettings.js b/app/lib/methods/getSettings.js index c51ac4068..be6ef1ee3 100644 --- a/app/lib/methods/getSettings.js +++ b/app/lib/methods/getSettings.js @@ -138,9 +138,10 @@ export function subscribeSettings() { export default async function() { try { const db = database.active; - const settingsParams = JSON.stringify(Object.keys(settings).filter(key => !loginSettings.includes(key))); + const settingsParams = Object.keys(settings).filter(key => !loginSettings.includes(key)); // RC 0.60.0 - const result = await fetch(`${ this.sdk.client.host }/api/v1/settings.public?query={"_id":{"$in":${ settingsParams }}}`).then(response => response.json()); + const result = await fetch(`${ this.sdk.client.host }/api/v1/settings.public?query={"_id":{"$in":${ JSON.stringify(settingsParams) }}}&count=${ settingsParams.length }`) + .then(response => response.json()); if (!result.success) { return; From d1f35bb79988aa95264961b171ad4943bdca3332 Mon Sep 17 00:00:00 2001 From: Gerzon Z Date: Thu, 15 Jul 2021 10:39:44 -0400 Subject: [PATCH 11/12] Regression: Markdown handlePress not working properly (#3278) Co-authored-by: Diego Mello --- app/containers/markdown/Link.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/containers/markdown/Link.js b/app/containers/markdown/Link.js index 008dc0ba8..615b66128 100644 --- a/app/containers/markdown/Link.js +++ b/app/containers/markdown/Link.js @@ -7,15 +7,19 @@ import { themes } from '../../constants/colors'; import { LISTENER } from '../Toast'; import EventEmitter from '../../utils/events'; import I18n from '../../i18n'; +import openLink from '../../utils/openLink'; const Link = React.memo(({ children, link, theme, onLinkPress }) => { const handlePress = () => { - if (!link || !onLinkPress) { + if (!link) { return; } - onLinkPress(link); + if (onLinkPress) { + return onLinkPress(link); + } + openLink(link, theme); }; const childLength = React.Children.toArray(children).filter(o => o).length; From 66d986e2b5aa6702c87eb1b8d9f06045db6fc154 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 19 Jul 2021 18:04:45 -0300 Subject: [PATCH 12/12] Chore: Improve QA workflow (#3285) --- .circleci/config.yml | 34 +++++++++++++++++++++++++++++----- android/fastlane/Fastfile | 8 ++++++++ android/fastlane/README.md | 27 +++++++++++---------------- 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 182e64339..0f72a02c9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -290,6 +290,23 @@ commands: command: bundle exec fastlane android beta official:<< parameters.official >> working_directory: android + # EXPERIMENTAL ONLY + upload-to-internal-app-sharing: + description: "Upload to Internal App Sharing" + steps: + - checkout + - attach_workspace: + at: android + - run: + name: Store the google service account key + command: echo "$FASTLANE_GOOGLE_SERVICE_ACCOUNT" | base64 --decode > service_account.json + working_directory: android + - run: *update-fastlane-android + - run: + name: Fastlane Play Store Upload + command: bundle exec fastlane android internal_app_sharing + working_directory: android + # EXPERIMENTAL ONLY # No plans to do it for Official upload-to-google-play-production: @@ -391,6 +408,14 @@ jobs: steps: - android-build + android-internal-app-sharing-experimental: + <<: *defaults + docker: + - image: circleci/android:api-28-node + + steps: + - upload-to-internal-app-sharing + android-google-play-beta-experimental: <<: *defaults docker: @@ -452,13 +477,9 @@ workflows: - ios-build-experimental: requires: - ios-hold-build-experimental - - ios-hold-testflight-experimental: - type: approval - requires: - - ios-build-experimental - ios-testflight-experimental: requires: - - ios-hold-testflight-experimental + - ios-build-experimental # iOS Official - ios-hold-build-official: @@ -484,6 +505,9 @@ workflows: - android-build-experimental: requires: - android-hold-build-experimental + - android-internal-app-sharing-experimental: + requires: + - android-build-experimental - android-hold-google-play-beta-experimental: type: approval requires: diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index a1c5bd70c..0f600c36c 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -33,6 +33,14 @@ platform :android do end end + desc "Upload App to Internal App Sharing" + lane :internal_app_sharing do + upload_to_play_store_internal_app_sharing( + package_name: 'chat.rocket.reactnative', + aab: 'android/app/build/outputs/bundle/experimentalPlayRelease/app-experimental-play-release.aab' + ) + end + desc "Upload App to Play Store Production" lane :production do |options| upload_to_play_store( diff --git a/android/fastlane/README.md b/android/fastlane/README.md index 32a0f12c2..8c4626025 100644 --- a/android/fastlane/README.md +++ b/android/fastlane/README.md @@ -12,33 +12,28 @@ Install _fastlane_ using ``` [sudo] gem install fastlane -NV ``` -or alternatively using `brew cask install fastlane` +or alternatively using `brew install fastlane` # Available Actions ## Android -### android playBuild +### android beta ``` -fastlane android playBuild +fastlane android beta ``` -Play build for development -### android fossRelease +Upload App to Play Store Internal +### android internal_app_sharing ``` -fastlane android fossRelease +fastlane android internal_app_sharing ``` -Foss build for release -### android playRelease +Upload App to Internal App Sharing +### android production ``` -fastlane android playRelease +fastlane android production ``` -Play build for release -### android playAlpha -``` -fastlane android playAlpha -``` -Upload App to Play store +Upload App to Play Store Production ---- -This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. +This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).