Swiftgram/LegacyComponents/TGLocationCurrentLocationCell.m
2017-08-04 18:11:13 +03:00

161 lines
5.2 KiB
Objective-C

#import "TGLocationCurrentLocationCell.h"
#import "LegacyComponentsInternal.h"
#import "TGColor.h"
#import "TGImageUtils.h"
#import "TGFont.h"
#import "TGLocationUtils.h"
NSString *const TGLocationCurrentLocationCellKind = @"TGLocationCurrentLocationCellKind";
const CGFloat TGLocationCurrentLocationCellHeight = 57;
@interface TGLocationCurrentLocationCell ()
{
UIImageView *_iconView;
UILabel *_titleLabel;
UILabel *_subtitleLabel;
bool _isCurrentLocation;
}
@end
@implementation TGLocationCurrentLocationCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self != nil)
{
self.selectedBackgroundView = [[UIView alloc] init];
self.selectedBackgroundView.backgroundColor = TGSelectionColor();
_iconView = [[UIImageView alloc] initWithFrame:CGRectMake(14 + TGRetinaPixel, 8 + TGRetinaPixel, 40, 40)];
_iconView.image = TGComponentsImageNamed(@"LocationCurrentIcon.png");
[self.contentView addSubview:_iconView];
_titleLabel = [[UILabel alloc] init];
_titleLabel.backgroundColor = [UIColor clearColor];
_titleLabel.font = TGBoldSystemFontOfSize(TGIsRetina() ? 16.5f : 16.0f);
_titleLabel.text = TGLocalized(@"Map.SendMyCurrentLocation");
_titleLabel.textColor = TGAccentColor();
[self.contentView addSubview:_titleLabel];
_subtitleLabel = [[UILabel alloc] init];
_subtitleLabel.backgroundColor = [UIColor clearColor];
_subtitleLabel.font = TGSystemFontOfSize(13);
_subtitleLabel.text = TGLocalized(@"Map.Locating");
_subtitleLabel.textColor = UIColorRGB(0xa6a6a6);
[self.contentView addSubview:_subtitleLabel];
_isCurrentLocation = true;
}
return self;
}
- (void)configureForCurrentLocationWithAccuracy:(CLLocationAccuracy)accuracy
{
if (!_isCurrentLocation)
{
[UIView transitionWithView:self duration:0.2f options:UIViewAnimationOptionTransitionCrossDissolve animations:^
{
_titleLabel.text = TGLocalized(@"Map.SendMyCurrentLocation");
_iconView.image = TGComponentsImageNamed(@"LocationCurrentIcon.png");
if (accuracy > DBL_EPSILON)
{
NSString *accuracyString = [TGLocationUtils stringFromAccuracy:(NSInteger)accuracy];
_subtitleLabel.text = [NSString stringWithFormat:TGLocalized(@"Map.AccurateTo"), accuracyString];
_iconView.alpha = 1.0f;
_titleLabel.alpha = 1.0f;
_subtitleLabel.alpha = 1.0f;
}
else
{
_subtitleLabel.text = TGLocalized(@"Map.Locating");
_iconView.alpha = 0.5f;
_titleLabel.alpha = 0.5f;
_subtitleLabel.alpha = 0.5f;
}
} completion:nil];
_isCurrentLocation = true;
}
else
{
if (accuracy > DBL_EPSILON)
{
NSString *accuracyString = [TGLocationUtils stringFromAccuracy:(NSInteger)accuracy];
_subtitleLabel.text = [NSString stringWithFormat:TGLocalized(@"Map.AccurateTo"), accuracyString];
[UIView animateWithDuration:0.2f animations:^
{
_iconView.alpha = 1.0f;
_titleLabel.alpha = 1.0f;
_subtitleLabel.alpha = 1.0f;
}];
}
else
{
_subtitleLabel.text = TGLocalized(@"Map.Locating");
_iconView.alpha = 0.5f;
_titleLabel.alpha = 0.5f;
_subtitleLabel.alpha = 0.5f;
}
}
}
- (void)configureForCustomLocationWithAddress:(NSString *)address
{
if (_isCurrentLocation)
{
[UIView transitionWithView:self duration:0.2f options:UIViewAnimationOptionTransitionCrossDissolve animations:^
{
_titleLabel.text = TGLocalized(@"Map.SendThisLocation");
_iconView.image = TGComponentsImageNamed(@"LocationPinIcon.png");
_subtitleLabel.text = [self _subtitleForAddress:address];
_iconView.alpha = 1.0f;
_titleLabel.alpha = 1.0f;
_subtitleLabel.alpha = 1.0f;
} completion:nil];
_isCurrentLocation = false;
}
else
{
[UIView transitionWithView:self duration:0.2f options:UIViewAnimationOptionTransitionCrossDissolve animations:^
{
_subtitleLabel.text = [self _subtitleForAddress:address];
} completion:nil];
}
}
- (NSString *)_subtitleForAddress:(NSString *)address
{
if (address != nil && address.length == 0)
{
return TGLocalized(@"Map.Unknown");
}
else if (address == nil)
{
return TGLocalized(@"Map.Locating");
}
return address;
}
- (void)layoutSubviews
{
[super layoutSubviews];
CGFloat padding = 65.0f;
_titleLabel.frame = CGRectMake(padding, 9, self.frame.size.width - padding - 14, 20);
_subtitleLabel.frame = CGRectMake(padding, 29 + TGRetinaPixel, self.frame.size.width - padding - 14, 20);
}
@end