Compare commits

...

13 Commits

Author SHA1 Message Date
Elias Nahum
872183ade0 Update fastlane android release 2017-08-04 16:59:03 -04:00
Elias Nahum
7a77c2c19c update fastlane 2017-08-04 16:45:34 -04:00
enahum
06aa01507f Release 1.1 changelog (#827)
* Release 1.1 changelog

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update CHANGELOG.md

Set supported server version
2017-08-04 16:36:42 -04:00
enahum
60bf695789 Version Bump to 47 (#825) 2017-08-04 11:13:51 -04:00
enahum
24eaef38ef Version Bump to 47 (#824) 2017-08-04 10:56:43 -04:00
Harrison Healey
53ae78674e RN-205/RN-210 Allow tapping buttons on post and DM lists without closing keyboard (#823) 2017-08-04 09:14:57 -04:00
enahum
d7ef19f883 Version Bump to 46 (#822) 2017-08-04 09:09:38 -04:00
enahum
15e05c44f5 Version Bump to 46 (#821) 2017-08-04 09:07:31 -04:00
enahum
12f6b11e09 Fix Create on Create channel to not push another Create Channel screen (#820) 2017-08-03 18:14:44 -04:00
enahum
10fd389e15 Android Version Bump to 45 (#819)
* Updated yarn.lock (#817)

* Version Bump to 45
2017-08-03 18:09:44 -04:00
enahum
e50049d0d6 Version Bump to 45 (#818) 2017-08-03 18:09:36 -04:00
enahum
9d3e072f7a Fastlane ensure branch for cutting builds (#815) 2017-08-03 16:25:58 -04:00
Harrison Healey
537598cc64 Updated yarn.lock 2017-08-03 16:22:30 -04:00
14 changed files with 86 additions and 36 deletions

View File

@@ -1,8 +1,9 @@
# Mattermost Mobile Apps Changelog # Mattermost Mobile Apps Changelog
## v1.1 Release (In Progress) ## v1.1 Release
- Planned Release Date: August 2017 - Release Date: August 2017
- Server Versions Supported: Server v3.10+ is required, Self-Signed SSL Certificates are not yet supported
### Highlights ### Highlights
@@ -13,6 +14,13 @@
#### Emoji Reactions #### Emoji Reactions
- View Emoji Reactions on a post - View Emoji Reactions on a post
#### Group Messages
- Start Direct and Group Messages from the same screen
#### Improved Performance on Poor Connections
- Added auto-retry to automatically reattempt to get posts if the network connection is intermittent
- Added manual loading option if auto-retry fails to retrieve new posts
### Improvements ### Improvements
- Android: Added Big Text support for Android notifications, so they expand to show more details - Android: Added Big Text support for Android notifications, so they expand to show more details
- Added a Reset Cache option - Added a Reset Cache option
@@ -20,17 +28,21 @@
- Tapping on an @username mention opens the user's profile - Tapping on an @username mention opens the user's profile
- Disabled the send button while attachments upload - Disabled the send button while attachments upload
- Adjusted margins on icons and elsewhere to make spacing more consistent - Adjusted margins on icons and elsewhere to make spacing more consistent
- iOS: mattermost:// links now open the new app - iOS URL scheme: mattermost:// links now open the new app
- About Mattermost page now includes a link to NOTICES.txt for platform and the mobile app
- Various UI improvements
### Bug Fixes ### Bug Fixes
- Fixed an issue where sometimes an unmounted badge caused app to crash on start up - Fixed an issue where sometimes an unmounted badge caused app to crash on start up
- Group Direct Messages now show the correct member count - Group Direct Messages now show the correct member count
- Hamburger icon does not break after swiping to close sidebar - Hamburger icon does not break after swiping to close sidebar
- Fixed an issue with some image thumbnails showing up blurry - Fixed an issue with some image thumbnails appearing out of focus
- Uploading a file and then leaving the channel no longer shows the file in a perpetual loading state - Uploading a file and then leaving the channel no longer shows the file in a perpetual loading state
- For private channels, the last member can no longer delete the channel if the EE server pemissions do not allow it - For private channels, the last member can no longer delete the channel if the EE server permissions do not allow it
- When SSO login fails, error messages are now shown - Error messages are now shown when SSO login fails
- Android: Leaving a channel now redirects to Town Square instead of the Town Square info page - Android: Leaving a channel now redirects to Town Square instead of the Town Square info page
- Fixed create new public channel screen shown twice when trying to create a channel
- Tapping on a post will no longer close the keyboard
## v1.0.1 Release ## v1.0.1 Release

View File

@@ -91,7 +91,7 @@ android {
applicationId "com.mattermost.rnbeta" applicationId "com.mattermost.rnbeta"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 23 targetSdkVersion 23
versionCode 44 versionCode 47
versionName "1.1.0" versionName "1.1.0"
multiDexEnabled true multiDexEnabled true
ndk { ndk {

View File

@@ -273,7 +273,6 @@ class List extends Component {
screenBackgroundColor: theme.centerChannelBg screenBackgroundColor: theme.centerChannelBg
}, },
passProps: { passProps: {
channelType: General.PRIVATE_CHANNEL,
closeButton: this.closeButton closeButton: this.closeButton
} }
}); });

View File

@@ -248,6 +248,7 @@ export default class CustomSectionList extends React.PureComponent {
sections={this.state.sections} sections={this.state.sections}
keyExtractor={this.props.keyExtractor} keyExtractor={this.props.keyExtractor}
renderItem={this.renderItem} renderItem={this.renderItem}
keyboardShouldPersistTaps='handled'
/> />
); );
} }

View File

@@ -4,6 +4,7 @@
import React, {Component} from 'react'; import React, {Component} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { import {
Keyboard,
View, View,
TouchableOpacity TouchableOpacity
} from 'react-native'; } from 'react-native';
@@ -69,6 +70,7 @@ export default class FileAttachmentList extends Component {
handlePreviewPress = (file) => { handlePreviewPress = (file) => {
this.props.hideOptionsContext(); this.props.hideOptionsContext();
Keyboard.dismiss();
preventDoubleTap(this.goToImagePreview, this, this.props.postId, file.id); preventDoubleTap(this.goToImagePreview, this, this.props.postId, file.id);
}; };

View File

@@ -176,6 +176,7 @@ export default class PostList extends PureComponent {
{...refreshControl} {...refreshControl}
renderItem={this.renderItem} renderItem={this.renderItem}
theme={theme} theme={theme}
keyboardShouldPersistTaps='handled'
/> />
); );
} }

View File

@@ -128,6 +128,7 @@ class CreateChannel extends PureComponent {
}; };
close = (goBack = false) => { close = (goBack = false) => {
EventEmitter.emit('closing-create-channel', false);
if (goBack) { if (goBack) {
this.props.navigator.pop({animated: true}); this.props.navigator.pop({animated: true});
} else { } else {

View File

@@ -3,6 +3,7 @@
import {bindActionCreators} from 'redux'; import {bindActionCreators} from 'redux';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import {createSelector} from 'reselect';
import {General} from 'mattermost-redux/constants'; import {General} from 'mattermost-redux/constants';
import {getChannels, joinChannel, searchChannels} from 'mattermost-redux/actions/channels'; import {getChannels, joinChannel, searchChannels} from 'mattermost-redux/actions/channels';
@@ -16,16 +17,23 @@ import {getTheme} from 'app/selectors/preferences';
import MoreChannels from './more_channels'; import MoreChannels from './more_channels';
const joinableChannels = createSelector(
getChannelsInCurrentTeam,
getMyChannelMemberships,
(channels, myMembers) => {
return channels.filter((c) => {
return (!myMembers[c.id] && c.type === General.OPEN_CHANNEL);
});
}
);
function mapStateToProps(state, ownProps) { function mapStateToProps(state, ownProps) {
const {currentUserId} = state.entities.users; const {currentUserId} = state.entities.users;
const {currentTeamId} = state.entities.teams; const {currentTeamId} = state.entities.teams;
const {getChannels: requestStatus} = state.requests.channels; const {getChannels: requestStatus} = state.requests.channels;
const {config, license} = state.entities.general; const {config, license} = state.entities.general;
const roles = getCurrentUserRoles(state); const roles = getCurrentUserRoles(state);
const myMembers = getMyChannelMemberships(state); const channels = joinableChannels(state);
const channels = getChannelsInCurrentTeam(state).filter((c) => {
return (!myMembers[c.id] && c.type === General.OPEN_CHANNEL);
});
return { return {
...ownProps, ...ownProps,

View File

@@ -58,6 +58,7 @@ class MoreChannels extends PureComponent {
this.state = { this.state = {
channels: props.channels.splice(0, General.CHANNELS_CHUNK_SIZE), channels: props.channels.splice(0, General.CHANNELS_CHUNK_SIZE),
createScreenVisible: false,
page: 0, page: 0,
adding: false, adding: false,
next: true, next: true,
@@ -80,6 +81,10 @@ class MoreChannels extends PureComponent {
props.navigator.setButtons(buttons); props.navigator.setButtons(buttons);
} }
componentWillMount() {
EventEmitter.on('closing-create-channel', this.handleCreateScreenVisible);
}
componentDidMount() { componentDidMount() {
// set the timeout to 400 cause is the time that the modal takes to open // set the timeout to 400 cause is the time that the modal takes to open
// Somehow interactionManager doesn't care // Somehow interactionManager doesn't care
@@ -101,7 +106,13 @@ class MoreChannels extends PureComponent {
this.setState({channels, showNoResults: true}); this.setState({channels, showNoResults: true});
} }
this.headerButtons(nextProps.canCreateChannels, true); if (!this.state.createScreenVisible) {
this.headerButtons(nextProps.canCreateChannels, true);
}
}
componentWillUnmount() {
EventEmitter.off('closing-create-channel', this.handleCreateScreenVisible);
} }
close = () => { close = () => {
@@ -112,6 +123,10 @@ class MoreChannels extends PureComponent {
this.headerButtons(this.props.canCreateChannels, enabled); this.headerButtons(this.props.canCreateChannels, enabled);
}; };
handleCreateScreenVisible = (createScreenVisible) => {
this.setState({createScreenVisible});
};
headerButtons = (canCreateChannels, enabled) => { headerButtons = (canCreateChannels, enabled) => {
const buttons = { const buttons = {
leftButtons: [this.leftButton] leftButtons: [this.leftButton]
@@ -182,7 +197,9 @@ class MoreChannels extends PureComponent {
this.close(); this.close();
break; break;
case 'create-pub-channel': case 'create-pub-channel':
this.onCreateChannel(); this.setState({
createScreenVisible: true
}, this.onCreateChannel);
break; break;
} }
} }

View File

@@ -3,11 +3,16 @@ skip_docs
platform :ios do platform :ios do
before_all do |lane| before_all do |lane|
if lane == :beta if lane == :beta or lane === :release
ensure_git_branch( current_branch = (sh 'git rev-parse --abbrev-ref HEAD').chop!
branch: 'master'
) UI.user_error!("To cut a beta or a release you need to be on master or in a release branch.
sh "git checkout -b ios-#{lane}" Current branch is #{current_branch}
Exiting") unless current_branch == 'master' or current_branch.start_with?('release')
if lane == :beta
sh "git checkout -b ios-#{lane}"
end
end end
end end
@@ -83,10 +88,6 @@ platform :ios do
desc 'Deploy a new version to the App Store' desc 'Deploy a new version to the App Store'
lane :release do lane :release do
ensure_git_branch(
branch: 'master'
)
match(type: 'appstore', app_identifier: 'com.mattermost.rn') match(type: 'appstore', app_identifier: 'com.mattermost.rn')
# snapshot # snapshot
@@ -211,11 +212,16 @@ end
platform :android do platform :android do
before_all do |lane| before_all do |lane|
if lane == :alpha if lane == :alpha or lane === :release
ensure_git_branch( current_branch = (sh 'git rev-parse --abbrev-ref HEAD').chop!
branch: 'master'
) UI.user_error!("To cut a beta or a release you need to be on master or in a release branch.
sh "git checkout -b android-#{lane}" Current branch is #{current_branch}
Exiting") unless current_branch == 'master' or current_branch.start_with?('release')
if lane == :alpha
sh "git checkout -b android-#{lane}"
end
end end
end end
@@ -281,9 +287,6 @@ platform :android do
desc 'Deploy a new version to Google Play' desc 'Deploy a new version to Google Play'
lane :release do lane :release do
ensure_git_branch(
branch: 'master'
)
android_change_package_identifier(newIdentifier: 'com.mattermost.rn', manifest: './android/app/src/main/AndroidManifest.xml') android_change_package_identifier(newIdentifier: 'com.mattermost.rn', manifest: './android/app/src/main/AndroidManifest.xml')
android_change_string_app_name(newName: 'Mattermost', stringsFile: './android/app/src/main/res/values/strings.xml') android_change_string_app_name(newName: 'Mattermost', stringsFile: './android/app/src/main/res/values/strings.xml')
android_update_application_id(app_folder_name: 'android/app', application_id: 'com.mattermost.rn') android_update_application_id(app_folder_name: 'android/app', application_id: 'com.mattermost.rn')
@@ -322,6 +325,12 @@ platform :android do
new_string: 'package com.mattermost.rn;' new_string: 'package com.mattermost.rn;'
) )
find_replace_string(
path_to_file: './android/app/src/main/java/com/mattermost/rn/NotificationDismissReceiver.java',
old_string: 'package com.mattermost.rnbeta;',
new_string: 'package com.mattermost.rn;'
)
find_replace_string( find_replace_string(
path_to_file: './android/app/BUCK', path_to_file: './android/app/BUCK',
old_string: 'package com.mattermost.rnbeta;', old_string: 'package com.mattermost.rnbeta;',

View File

@@ -1320,7 +1320,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements; CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CURRENT_PROJECT_VERSION = 44; CURRENT_PROJECT_VERSION = 47;
DEAD_CODE_STRIPPING = NO; DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = UQ8HT4Q2XM; DEVELOPMENT_TEAM = UQ8HT4Q2XM;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@@ -1353,7 +1353,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements; CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CURRENT_PROJECT_VERSION = 44; CURRENT_PROJECT_VERSION = 47;
DEAD_CODE_STRIPPING = NO; DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = UQ8HT4Q2XM; DEVELOPMENT_TEAM = UQ8HT4Q2XM;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (

View File

@@ -21,7 +21,7 @@
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>44</string> <string>47</string>
<key>ITSAppUsesNonExemptEncryption</key> <key>ITSAppUsesNonExemptEncryption</key>
<false/> <false/>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>

View File

@@ -19,6 +19,6 @@
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>44</string> <string>47</string>
</dict> </dict>
</plist> </plist>

View File

@@ -3645,7 +3645,7 @@ makeerror@1.0.x:
mattermost-redux@mattermost/mattermost-redux#master: mattermost-redux@mattermost/mattermost-redux#master:
version "0.0.1" version "0.0.1"
resolved "https://codeload.github.com/mattermost/mattermost-redux/tar.gz/09be47436ce729d8ab7a390e7e159fcfb75fd27f" resolved "https://codeload.github.com/mattermost/mattermost-redux/tar.gz/e5297912f528b822b61c61a36735fb4d6699d08d"
dependencies: dependencies:
deep-equal "1.0.1" deep-equal "1.0.1"
harmony-reflect "1.5.1" harmony-reflect "1.5.1"