forked from Ivasoft/mattermost-mobile
Compare commits
11 Commits
release-1.
...
v1.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06aa01507f | ||
|
|
60bf695789 | ||
|
|
24eaef38ef | ||
|
|
53ae78674e | ||
|
|
d7ef19f883 | ||
|
|
15e05c44f5 | ||
|
|
12f6b11e09 | ||
|
|
10fd389e15 | ||
|
|
e50049d0d6 | ||
|
|
9d3e072f7a | ||
|
|
537598cc64 |
24
CHANGELOG.md
24
CHANGELOG.md
@@ -1,8 +1,9 @@
|
||||
# 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
|
||||
|
||||
@@ -13,6 +14,13 @@
|
||||
#### Emoji Reactions
|
||||
- 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
|
||||
- Android: Added Big Text support for Android notifications, so they expand to show more details
|
||||
- Added a Reset Cache option
|
||||
@@ -20,17 +28,21 @@
|
||||
- Tapping on an @username mention opens the user's profile
|
||||
- Disabled the send button while attachments upload
|
||||
- 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
|
||||
- Fixed an issue where sometimes an unmounted badge caused app to crash on start up
|
||||
- Group Direct Messages now show the correct member count
|
||||
- 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
|
||||
- For private channels, the last member can no longer delete the channel if the EE server pemissions do not allow it
|
||||
- When SSO login fails, error messages are now shown
|
||||
- For private channels, the last member can no longer delete the channel if the EE server permissions do not allow it
|
||||
- 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
|
||||
- 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
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ android {
|
||||
applicationId "com.mattermost.rnbeta"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 23
|
||||
versionCode 44
|
||||
versionCode 47
|
||||
versionName "1.1.0"
|
||||
multiDexEnabled true
|
||||
ndk {
|
||||
|
||||
@@ -273,7 +273,6 @@ class List extends Component {
|
||||
screenBackgroundColor: theme.centerChannelBg
|
||||
},
|
||||
passProps: {
|
||||
channelType: General.PRIVATE_CHANNEL,
|
||||
closeButton: this.closeButton
|
||||
}
|
||||
});
|
||||
|
||||
@@ -248,6 +248,7 @@ export default class CustomSectionList extends React.PureComponent {
|
||||
sections={this.state.sections}
|
||||
keyExtractor={this.props.keyExtractor}
|
||||
renderItem={this.renderItem}
|
||||
keyboardShouldPersistTaps='handled'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
Keyboard,
|
||||
View,
|
||||
TouchableOpacity
|
||||
} from 'react-native';
|
||||
@@ -69,6 +70,7 @@ export default class FileAttachmentList extends Component {
|
||||
|
||||
handlePreviewPress = (file) => {
|
||||
this.props.hideOptionsContext();
|
||||
Keyboard.dismiss();
|
||||
preventDoubleTap(this.goToImagePreview, this, this.props.postId, file.id);
|
||||
};
|
||||
|
||||
|
||||
@@ -176,6 +176,7 @@ export default class PostList extends PureComponent {
|
||||
{...refreshControl}
|
||||
renderItem={this.renderItem}
|
||||
theme={theme}
|
||||
keyboardShouldPersistTaps='handled'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -128,6 +128,7 @@ class CreateChannel extends PureComponent {
|
||||
};
|
||||
|
||||
close = (goBack = false) => {
|
||||
EventEmitter.emit('closing-create-channel', false);
|
||||
if (goBack) {
|
||||
this.props.navigator.pop({animated: true});
|
||||
} else {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
import {bindActionCreators} from 'redux';
|
||||
import {connect} from 'react-redux';
|
||||
import {createSelector} from 'reselect';
|
||||
|
||||
import {General} from 'mattermost-redux/constants';
|
||||
import {getChannels, joinChannel, searchChannels} from 'mattermost-redux/actions/channels';
|
||||
@@ -16,16 +17,23 @@ import {getTheme} from 'app/selectors/preferences';
|
||||
|
||||
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) {
|
||||
const {currentUserId} = state.entities.users;
|
||||
const {currentTeamId} = state.entities.teams;
|
||||
const {getChannels: requestStatus} = state.requests.channels;
|
||||
const {config, license} = state.entities.general;
|
||||
const roles = getCurrentUserRoles(state);
|
||||
const myMembers = getMyChannelMemberships(state);
|
||||
const channels = getChannelsInCurrentTeam(state).filter((c) => {
|
||||
return (!myMembers[c.id] && c.type === General.OPEN_CHANNEL);
|
||||
});
|
||||
const channels = joinableChannels(state);
|
||||
|
||||
return {
|
||||
...ownProps,
|
||||
|
||||
@@ -58,6 +58,7 @@ class MoreChannels extends PureComponent {
|
||||
|
||||
this.state = {
|
||||
channels: props.channels.splice(0, General.CHANNELS_CHUNK_SIZE),
|
||||
createScreenVisible: false,
|
||||
page: 0,
|
||||
adding: false,
|
||||
next: true,
|
||||
@@ -80,6 +81,10 @@ class MoreChannels extends PureComponent {
|
||||
props.navigator.setButtons(buttons);
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
EventEmitter.on('closing-create-channel', this.handleCreateScreenVisible);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
// set the timeout to 400 cause is the time that the modal takes to open
|
||||
// Somehow interactionManager doesn't care
|
||||
@@ -101,7 +106,13 @@ class MoreChannels extends PureComponent {
|
||||
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 = () => {
|
||||
@@ -112,6 +123,10 @@ class MoreChannels extends PureComponent {
|
||||
this.headerButtons(this.props.canCreateChannels, enabled);
|
||||
};
|
||||
|
||||
handleCreateScreenVisible = (createScreenVisible) => {
|
||||
this.setState({createScreenVisible});
|
||||
};
|
||||
|
||||
headerButtons = (canCreateChannels, enabled) => {
|
||||
const buttons = {
|
||||
leftButtons: [this.leftButton]
|
||||
@@ -182,7 +197,9 @@ class MoreChannels extends PureComponent {
|
||||
this.close();
|
||||
break;
|
||||
case 'create-pub-channel':
|
||||
this.onCreateChannel();
|
||||
this.setState({
|
||||
createScreenVisible: true
|
||||
}, this.onCreateChannel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,16 @@ skip_docs
|
||||
|
||||
platform :ios do
|
||||
before_all do |lane|
|
||||
if lane == :beta
|
||||
ensure_git_branch(
|
||||
branch: 'master'
|
||||
)
|
||||
sh "git checkout -b ios-#{lane}"
|
||||
if lane == :beta or lane === :release
|
||||
current_branch = (sh 'git rev-parse --abbrev-ref HEAD').chop!
|
||||
|
||||
UI.user_error!("To cut a beta or a release you need to be on master or in a release branch.
|
||||
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
|
||||
|
||||
@@ -211,11 +216,16 @@ end
|
||||
|
||||
platform :android do
|
||||
before_all do |lane|
|
||||
if lane == :alpha
|
||||
ensure_git_branch(
|
||||
branch: 'master'
|
||||
)
|
||||
sh "git checkout -b android-#{lane}"
|
||||
if lane == :alpha or lane === :release
|
||||
current_branch = (sh 'git rev-parse --abbrev-ref HEAD').chop!
|
||||
|
||||
UI.user_error!("To cut a beta or a release you need to be on master or in a release branch.
|
||||
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
|
||||
|
||||
|
||||
@@ -1320,7 +1320,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 44;
|
||||
CURRENT_PROJECT_VERSION = 47;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
@@ -1353,7 +1353,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 44;
|
||||
CURRENT_PROJECT_VERSION = 47;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>44</string>
|
||||
<string>47</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
||||
@@ -19,6 +19,6 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>44</string>
|
||||
<string>47</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -3645,7 +3645,7 @@ makeerror@1.0.x:
|
||||
|
||||
mattermost-redux@mattermost/mattermost-redux#master:
|
||||
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:
|
||||
deep-equal "1.0.1"
|
||||
harmony-reflect "1.5.1"
|
||||
|
||||
Reference in New Issue
Block a user