Merge branch 'release/2.32.0'

This commit is contained in:
Michael Kirk 2018-12-07 09:55:43 -05:00
commit eb96eec94a
6 changed files with 74 additions and 10 deletions

View File

@ -52,6 +52,7 @@ def main():
'2.29.0.11',
'2.30.0.0',
'2.30.0.1',
'2.30.2.0',
'3.0',
'3.0.1',
'3.0.2',

View File

@ -4142,6 +4142,7 @@ typedef enum : NSUInteger {
[self updateLastVisibleTimestamp];
self.conversationStyle.viewWidth = self.collectionView.width;
[self.collectionView.collectionViewLayout invalidateLayout];
}
#pragma mark - View Items

View File

@ -504,14 +504,16 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations
UIImage *avatarImage = (localProfileAvatarImage
?: [[[OWSContactAvatarBuilder alloc] initForLocalUserWithDiameter:kAvatarSize] buildDefaultImage]);
OWSAssertDebug(avatarImage);
AvatarImageView *avatarView = [[AvatarImageView alloc] initWithImage:avatarImage];
[avatarView autoSetDimension:ALDimensionWidth toSize:kAvatarSize];
[avatarView autoSetDimension:ALDimensionHeight toSize:kAvatarSize];
avatarView.userInteractionEnabled = YES;
[avatarView
addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(settingsButtonPressed:)]];
settingsButton = [[UIBarButtonItem alloc] initWithCustomView:avatarView];
UIButton *avatarButton = [AvatarImageButton buttonWithType:UIButtonTypeCustom];
[avatarButton addTarget:self
action:@selector(settingsButtonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[avatarButton setImage:avatarImage forState:UIControlStateNormal];
[avatarButton autoSetDimension:ALDimensionWidth toSize:kAvatarSize];
[avatarButton autoSetDimension:ALDimensionHeight toSize:kAvatarSize];
settingsButton = [[UIBarButtonItem alloc] initWithCustomView:avatarButton];
} else {
// iOS 9 and 10 have a bug around layout of custom views in UIBarButtonItem,
// so we just use a simple icon.

View File

@ -178,3 +178,59 @@ public class ConversationAvatarImageView: AvatarImageView {
self.image = OWSAvatarBuilder.buildImage(thread: thread, diameter: diameter)
}
}
@objc
public class AvatarImageButton: UIButton {
private let shadowLayer = CAShapeLayer()
// MARK: - Button Overrides
override public func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = frame.size.width / 2
// Inner shadow.
// This should usually not be visible; it is used to distinguish
// profile pics from the background if they are similar.
shadowLayer.frame = bounds
shadowLayer.masksToBounds = true
let shadowBounds = bounds
let shadowPath = UIBezierPath(ovalIn: shadowBounds)
// This can be any value large enough to cast a sufficiently large shadow.
let shadowInset: CGFloat = -3
shadowPath.append(UIBezierPath(rect: shadowBounds.insetBy(dx: shadowInset, dy: shadowInset)))
// This can be any color since the fill should be clipped.
shadowLayer.fillColor = UIColor.black.cgColor
shadowLayer.path = shadowPath.cgPath
shadowLayer.fillRule = kCAFillRuleEvenOdd
shadowLayer.shadowColor = (Theme.isDarkThemeEnabled ? UIColor.white : UIColor.black).cgColor
shadowLayer.shadowRadius = 0.5
shadowLayer.shadowOpacity = 0.15
shadowLayer.shadowOffset = .zero
}
override public func setImage(_ image: UIImage?, for state: UIControlState) {
ensureViewConfigured()
super.setImage(image, for: state)
}
// MARK: Private
var hasBeenConfigured = false
func ensureViewConfigured() {
guard !hasBeenConfigured else {
return
}
hasBeenConfigured = true
autoPinToSquareAspectRatio()
layer.minificationFilter = kCAFilterTrilinear
layer.magnificationFilter = kCAFilterTrilinear
layer.masksToBounds = true
layer.addSublayer(shadowLayer)
contentMode = .scaleToFill
}
}

View File

@ -189,7 +189,7 @@ typedef void (^OWSLoadedThumbnailSuccess)(OWSLoadedThumbnail *loadedThumbnail);
OWSFailDebug(@"Missing path for attachment.");
return NO;
}
OWSLogInfo(@"Writing attachment to file: %@", filePath);
OWSLogDebug(@"Writing attachment to file: %@", filePath);
return [data writeToFile:filePath options:0 error:error];
}
@ -202,7 +202,7 @@ typedef void (^OWSLoadedThumbnailSuccess)(OWSLoadedThumbnail *loadedThumbnail);
OWSFailDebug(@"Missing path for attachment.");
return NO;
}
OWSLogInfo(@"Writing attachment to file: %@", filePath);
OWSLogDebug(@"Writing attachment to file: %@", filePath);
return [dataSource writeToPath:filePath];
}

View File

@ -159,6 +159,10 @@ public class TypingIndicatorsImpl: NSObject, TypingIndicators {
public func typingRecipientId(forThread thread: TSThread) -> String? {
AssertIsOnMainThread()
guard areTypingIndicatorsEnabled() else {
return nil
}
var firstRecipientId: String?
var firstTimestamp: UInt64?