mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Objective-C
		
	
//
 | 
						|
//  Copyright (c) 2019 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#import "OWSSoundSettingsViewController.h"
 | 
						|
#import <AVFoundation/AVFoundation.h>
 | 
						|
#import <SessionMessagingKit/OWSAudioPlayer.h>
 | 
						|
#import <SessionMessagingKit/OWSSounds.h>
 | 
						|
#import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h>
 | 
						|
#import <SignalUtilitiesKit/UIUtil.h>
 | 
						|
#import "Session-Swift.h"
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_BEGIN
 | 
						|
 | 
						|
@interface OWSSoundSettingsViewController ()
 | 
						|
 | 
						|
@property (nonatomic) BOOL isDirty;
 | 
						|
 | 
						|
@property (nonatomic) OWSSound currentSound;
 | 
						|
 | 
						|
@property (nonatomic, nullable) OWSAudioPlayer *audioPlayer;
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
#pragma mark -
 | 
						|
 | 
						|
@implementation OWSSoundSettingsViewController
 | 
						|
 | 
						|
- (void)viewDidLoad
 | 
						|
{
 | 
						|
    [super viewDidLoad];
 | 
						|
 | 
						|
    [self setTitle:NSLocalizedString(@"SETTINGS_ITEM_NOTIFICATION_SOUND",
 | 
						|
                       @"Label for settings view that allows user to change the notification sound.")];
 | 
						|
    self.currentSound
 | 
						|
        = (self.thread ? [OWSSounds notificationSoundForThread:self.thread] : [OWSSounds globalNotificationSound]);
 | 
						|
 | 
						|
    [self updateTableContents];
 | 
						|
    [self updateNavigationItems];
 | 
						|
    
 | 
						|
    [LKViewControllerUtilities setUpDefaultSessionStyleForVC:self withTitle:NSLocalizedString(@"Sound", @"") customBackButton:NO];
 | 
						|
    self.tableView.backgroundColor = UIColor.clearColor;
 | 
						|
}
 | 
						|
 | 
						|
- (void)viewDidAppear:(BOOL)animated
 | 
						|
{
 | 
						|
    [super viewDidAppear:animated];
 | 
						|
 | 
						|
    [self updateTableContents];
 | 
						|
}
 | 
						|
 | 
						|
- (void)updateNavigationItems
 | 
						|
{
 | 
						|
    UIBarButtonItem *cancelItem =
 | 
						|
        [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
 | 
						|
                                                      target:self
 | 
						|
                                                      action:@selector(cancelWasPressed:)
 | 
						|
                                     accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, @"cancel")];
 | 
						|
    
 | 
						|
    cancelItem.tintColor = LKColors.text;
 | 
						|
    
 | 
						|
    self.navigationItem.leftBarButtonItem = cancelItem;
 | 
						|
 | 
						|
    if (self.isDirty) {
 | 
						|
        UIBarButtonItem *saveItem =
 | 
						|
            [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave
 | 
						|
                                                          target:self
 | 
						|
                                                          action:@selector(saveWasPressed:)
 | 
						|
                                         accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, @"save")];
 | 
						|
        self.navigationItem.rightBarButtonItem = saveItem;
 | 
						|
    } else {
 | 
						|
        self.navigationItem.rightBarButtonItem = nil;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#pragma mark - Table Contents
 | 
						|
 | 
						|
- (void)updateTableContents
 | 
						|
{
 | 
						|
    OWSTableContents *contents = [OWSTableContents new];
 | 
						|
 | 
						|
    __weak OWSSoundSettingsViewController *weakSelf = self;
 | 
						|
 | 
						|
    OWSTableSection *soundsSection = [OWSTableSection new];
 | 
						|
    soundsSection.headerTitle = NSLocalizedString(
 | 
						|
        @"NOTIFICATIONS_SECTION_SOUNDS", @"Label for settings UI that allows user to change the notification sound.");
 | 
						|
 | 
						|
    NSArray<NSNumber *> *allSounds = [OWSSounds allNotificationSounds];
 | 
						|
    for (NSNumber *nsValue in allSounds) {
 | 
						|
        OWSSound sound = (OWSSound)nsValue.intValue;
 | 
						|
        OWSTableItem *item;
 | 
						|
 | 
						|
        NSString *soundLabelText = ^{
 | 
						|
            NSString *baseName = [OWSSounds displayNameForSound:sound];
 | 
						|
            if (sound == OWSSound_Note) {
 | 
						|
                NSString *noteStringFormat = NSLocalizedString(@"SETTINGS_AUDIO_DEFAULT_TONE_LABEL_FORMAT",
 | 
						|
                    @"Format string for the default 'Note' sound. Embeds the system {{sound name}}.");
 | 
						|
                return [NSString stringWithFormat:noteStringFormat, baseName];
 | 
						|
            } else {
 | 
						|
                return [OWSSounds displayNameForSound:sound];
 | 
						|
            }
 | 
						|
        }();
 | 
						|
 | 
						|
        if (sound == self.currentSound) {
 | 
						|
            item = [OWSTableItem
 | 
						|
                  checkmarkItemWithText:soundLabelText
 | 
						|
                accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, [OWSSounds displayNameForSound:sound])
 | 
						|
                            actionBlock:^{
 | 
						|
                                [weakSelf soundWasSelected:sound];
 | 
						|
                            }];
 | 
						|
        } else {
 | 
						|
            item = [OWSTableItem
 | 
						|
                     actionItemWithText:soundLabelText
 | 
						|
                accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, [OWSSounds displayNameForSound:sound])
 | 
						|
                            actionBlock:^{
 | 
						|
                                [weakSelf soundWasSelected:sound];
 | 
						|
                            }];
 | 
						|
        }
 | 
						|
        [soundsSection addItem:item];
 | 
						|
    }
 | 
						|
 | 
						|
    [contents addSection:soundsSection];
 | 
						|
 | 
						|
    self.contents = contents;
 | 
						|
}
 | 
						|
 | 
						|
#pragma mark - Events
 | 
						|
 | 
						|
- (void)soundWasSelected:(OWSSound)sound
 | 
						|
{
 | 
						|
    [self.audioPlayer stop];
 | 
						|
    self.audioPlayer = [OWSSounds audioPlayerForSound:sound audioBehavior:OWSAudioBehavior_Playback];
 | 
						|
    // Suppress looping in this view.
 | 
						|
    self.audioPlayer.isLooping = NO;
 | 
						|
    [self.audioPlayer play];
 | 
						|
 | 
						|
    if (self.currentSound == sound) {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    self.currentSound = sound;
 | 
						|
    self.isDirty = YES;
 | 
						|
    [self updateTableContents];
 | 
						|
    [self updateNavigationItems];
 | 
						|
}
 | 
						|
 | 
						|
- (void)cancelWasPressed:(id)sender
 | 
						|
{
 | 
						|
    // TODO: Add "discard changes?" alert.
 | 
						|
    [self.audioPlayer stop];
 | 
						|
    [self.navigationController popViewControllerAnimated:YES];
 | 
						|
}
 | 
						|
 | 
						|
- (void)saveWasPressed:(id)sender
 | 
						|
{
 | 
						|
    if (self.thread) {
 | 
						|
        [OWSSounds setNotificationSound:self.currentSound forThread:self.thread];
 | 
						|
    } else {
 | 
						|
        [OWSSounds setGlobalNotificationSound:self.currentSound];
 | 
						|
    }
 | 
						|
 | 
						|
    [self.audioPlayer stop];
 | 
						|
    [self.navigationController popViewControllerAnimated:YES];
 | 
						|
}
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_END
 |