1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-11 17:09:46 +01:00
Telegram/Telegraph/TGAlertSoundController.m
2014-07-10 18:11:09 +04:00

164 lines
5.6 KiB
Objective-C

/*
* This is the source code of Telegram for iOS v. 1.1
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Peter Iakovlev, 2013.
*/
#import "TGAlertSoundController.h"
#import "TGHeaderCollectionItem.h"
#import "TGVariantCollectionItem.h"
#import "TGCheckCollectionItem.h"
#import "TGCommentCollectionItem.h"
#import "TGAppDelegate.h"
@interface TGAlertSoundController ()
{
NSArray *_soundInfoList;
}
@end
@implementation TGAlertSoundController
- (id)initWithTitle:(NSString *)title soundInfoList:(NSArray *)soundInfoList
{
self = [super init];
if (self != nil)
{
[self setTitleText:title];
[self setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:TGLocalized(@"Common.Cancel") style:UIBarButtonItemStylePlain target:self action:@selector(cancelPressed)]];
[self setRightBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:TGLocalized(@"Common.Done") style:UIBarButtonItemStyleDone target:self action:@selector(donePressed)]];
_soundInfoList = soundInfoList;
NSMutableArray *alertTonesSectionItems = [[NSMutableArray alloc] init];
[alertTonesSectionItems addObject:[[TGHeaderCollectionItem alloc] initWithTitle:TGLocalized(@"Notifications.AlertTones")]];
NSMutableArray *classicTonesSectionItems = [[NSMutableArray alloc] init];
[classicTonesSectionItems addObject:[[TGHeaderCollectionItem alloc] initWithTitle:TGLocalized(@"Notifications.ClassicTones")]];
for (int groupId = 0; groupId < 2; groupId++)
{
int index = -1;
for (NSDictionary *desc in _soundInfoList)
{
index++;
if ([desc[@"groupId"] intValue] != groupId)
continue;
TGCheckCollectionItem *checkItem = [[TGCheckCollectionItem alloc] initWithTitle:desc[@"title"] action:@selector(alertTonePressed:)];
if (index == 1)
checkItem.requiresFullSeparator = true;
[checkItem setIsChecked:[desc[@"selected"] boolValue]];
if (groupId == 0)
[alertTonesSectionItems addObject:checkItem];
else
[classicTonesSectionItems addObject:checkItem];
}
}
TGCollectionMenuSection *alertTonesSection = [[TGCollectionMenuSection alloc] initWithItems:alertTonesSectionItems];
UIEdgeInsets topSectionInsets = alertTonesSection.insets;
topSectionInsets.top = 32.0f;
alertTonesSection.insets = topSectionInsets;
[self.menuSections addSection:alertTonesSection];
if (classicTonesSectionItems.count > 1)
{
TGCollectionMenuSection *classicTonesSection = [[TGCollectionMenuSection alloc] initWithItems:classicTonesSectionItems];
[self.menuSections addSection:classicTonesSection];
}
}
return self;
}
- (void)cancelPressed
{
[self.presentingViewController dismissViewControllerAnimated:true completion:nil];
}
- (void)donePressed
{
int soundId = [self _selectedSoundId];
if (soundId != -1)
{
id<TGAlertSoundControllerDelegate> delegate = _delegate;
if ([delegate respondsToSelector:@selector(alertSoundController:didFinishPickingWithSoundInfo:)])
[delegate alertSoundController:self didFinishPickingWithSoundInfo:_soundInfoList[soundId]];
}
[self.presentingViewController dismissViewControllerAnimated:true completion:nil];
}
- (void)alertTonePressed:(TGCheckCollectionItem *)checkCollectionItem
{
NSIndexPath *indexPath = [self indexPathForItem:checkCollectionItem];
if (indexPath != nil)
{
[self _selectItem:checkCollectionItem];
[self _playSoundWithId:[self soundIdFromItemIndexPath:indexPath]];
}
}
- (int)soundIdFromItemIndexPath:(NSIndexPath *)indexPath
{
return indexPath.section == 0 ? (indexPath.row - 1) : (indexPath.row - 1 + ((TGCollectionMenuSection *)self.menuSections.sections[0]).items.count - 1);
}
- (int)_selectedSoundId
{
for (int sectionIndex = 0; sectionIndex < (int)self.menuSections.sections.count; sectionIndex++)
{
int index = -1;
for (id item in ((TGCollectionMenuSection *)self.menuSections.sections[sectionIndex]).items)
{
index++;
if ([item isKindOfClass:[TGCheckCollectionItem class]])
{
if (((TGCheckCollectionItem *)item).isChecked)
return [self soundIdFromItemIndexPath:[NSIndexPath indexPathForItem:index inSection:sectionIndex]];
}
}
}
return -1;
}
- (void)_selectItem:(TGCheckCollectionItem *)checkCollectionItem
{
for (int sectionIndex = 0; sectionIndex < (int)self.menuSections.sections.count; sectionIndex++)
{
for (id item in ((TGCollectionMenuSection *)self.menuSections.sections[sectionIndex]).items)
{
if ([item isKindOfClass:[TGCheckCollectionItem class]])
{
if (item == checkCollectionItem)
[(TGCheckCollectionItem *)item setIsChecked:true];
else
[(TGCheckCollectionItem *)item setIsChecked:false];
}
}
}
}
- (void)_playSoundWithId:(int)soundId
{
if (soundId != 0 && [(NSString *)_soundInfoList[soundId][@"soundName"] length] != 0)
{
[TGAppDelegateInstance playNotificationSound:_soundInfoList[soundId][@"soundName"]];
}
}
@end