// // AletaSismiTableViewController.m // Earthquake Network // // Refactored by Andrea Busi 25/08/2020. // Copyright © 2020 Earthquake Network. All rights reserved. // #import "SettingsRealTimeAlertsViewController.h" #import "EQNAllertaSismica.h" @import UserNotifications; @interface SettingsRealTimeAlertsViewController () @property (nonatomic, strong) NSArray *settings; @property (nonatomic, strong) NSDateFormatter *dateFormatter; @property (nonatomic, assign) BOOL notificationEnabled; @property (nonatomic, assign) BOOL criticalAlertsEnabled; @end @implementation SettingsRealTimeAlertsViewController typedef NS_ENUM(NSInteger, RowIdentifier) { RowIdentifierAbilitaNotifiche = 0, RowIdentifierAbilitaCriticalAlerts }; #pragma mark - Accessories - (NSDateFormatter *)dateFormatter { if (!_dateFormatter) { _dateFormatter = [[NSDateFormatter alloc] init]; [_dateFormatter setDateFormat:@"HH:mm"]; } return _dateFormatter; } #pragma mark - View Lifecycle - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; self.settings = @[ [[SettingItem alloc] initWithType:SettingTypeEnable title:NSLocalizedString(@"options_notification_enable_alarm", @"")], [[SettingItem alloc] initWithType:SettingTypeEnable title:NSLocalizedString(@"critical_alerts_setting", @"")] ]; [self loadDataSource]; [self.tableView reloadData]; } #pragma mark - Private - (void)setupUI { self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever; self.tableView.estimatedRowHeight = 200.0; self.tableView.rowHeight = UITableViewAutomaticDimension; [self.tableView registerClass:[SettingSectionHeaderView class] forHeaderFooterViewReuseIdentifier:SettingSectionHeaderView.Identifier]; [self.tableView registerClass:[SettingEnableTableViewCell class] forCellReuseIdentifier:SettingEnableTableViewCell.Identifier]; [self.tableView registerClass:[SettingSliderTableViewCell class] forCellReuseIdentifier:SettingSliderTableViewCell.Identifier]; [self.tableView registerClass:[SettingMultivaluesTableViewCell class] forCellReuseIdentifier:SettingMultivaluesTableViewCell.Identifier]; [self.tableView registerClass:[SettingSegmentedTableViewCell class] forCellReuseIdentifier:SettingSegmentedTableViewCell.Identifier]; [self.tableView registerClass:[SettingDateTableViewCell class] forCellReuseIdentifier:SettingDateTableViewCell.Identifier]; } - (void)loadDataSource { self.notificationEnabled = [EQNAllertaSismica sharedInstance].isAbilitato; self.criticalAlertsEnabled = [EQNAllertaSismica sharedInstance].isCriticalAlertsEnabled; [[EQNAllertaSismica sharedInstance] saveUserInfo]; } #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.settings.count; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { SettingSectionHeaderView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:SettingSectionHeaderView.Identifier]; headerView.titleLabel.text = NSLocalizedString(@"options_alarms", @""); return headerView; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return SettingSectionHeaderView.Height; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { SettingItem *setting = self.settings[indexPath.row]; if (setting.type == SettingTypeEnable) { SettingEnableTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SettingEnableTableViewCell.Identifier forIndexPath:indexPath]; cell.titleLabel.text = setting.displayTitle; cell.descriptionLabel.text = setting.subtitle; if (indexPath.row == RowIdentifierAbilitaNotifiche) { cell.toggleSwitch.on = self.notificationEnabled; cell.valueChanged = ^(BOOL enabled) { self.notificationEnabled = enabled; [EQNAllertaSismica sharedInstance].isAbilitato = self.notificationEnabled; [[EQNAllertaSismica sharedInstance] saveUserInfo]; [self.tableView reloadData]; }; } else if (indexPath.row == RowIdentifierAbilitaCriticalAlerts) { cell.toggleSwitch.on = self.criticalAlertsEnabled; cell.valueChanged = ^(BOOL enabled) { if (enabled) { [self askForCriticalAlertsPermission]; } self.criticalAlertsEnabled = enabled; [EQNAllertaSismica sharedInstance].isCriticalAlertsEnabled = self.criticalAlertsEnabled; [[EQNAllertaSismica sharedInstance] saveUserInfo]; [self.tableView reloadData]; }; } return cell; } else if (setting.type == SettingTypeSegmented) { SettingSegmentedTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SettingSegmentedTableViewCell.Identifier forIndexPath:indexPath]; cell.titleLabel.text = setting.displayTitle; return cell; } else if (setting.type == SettingTypeSlider) { SettingSliderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SettingSliderTableViewCell.Identifier forIndexPath:indexPath]; cell.titleLabel.text = setting.displayTitle; return cell; } return nil; } #pragma mark - Private - (void)updateSismicToNotify:(EQNGenericValue *)seismic { [EQNAllertaSismica sharedInstance].sismiDaNotificare = seismic.value; [[EQNAllertaSismica sharedInstance] saveUserInfo]; [self loadDataSource]; } - (void)askForCriticalAlertsPermission { UNAuthorizationOptions authOptions = UNAuthorizationOptionCriticalAlert; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError *error) { // nope }]; } @end