b1b7ddd8c1
- Rename controllers to be "SettingsXXX" - Remove unused controllers - Remove old stuff from Storyboard
296 lines
13 KiB
Objective-C
296 lines
13 KiB
Objective-C
//
|
|
// 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 "EQNUtility.h"
|
|
|
|
@interface SettingsRealTimeAlertsViewController () <UITextFieldDelegate>
|
|
|
|
@property (nonatomic, strong) NSArray<SettingItem *> *settings;
|
|
|
|
@property (strong, nonatomic) NSArray<EQNGenericValue *> *dataSourceSismi;
|
|
@property (nonatomic, strong) NSArray<EQNGenericValue *> *dataSourceRaggioSisma;
|
|
|
|
@property (nonatomic, strong) EQNGenericValue *currentSeismicToNotify;
|
|
@property (strong, nonatomic) EQNGenericValue *currentLowSeismicRadius;
|
|
@property (strong, nonatomic) EQNGenericValue *currentStrongSeismicRadius;
|
|
@property (strong, nonatomic) NSDate *currentStartTime;
|
|
@property (nonatomic) BOOL isStartTimeExpanded;
|
|
@property (strong, nonatomic) NSDate *currentEndTime;
|
|
@property (nonatomic) BOOL isEndTimeExpanded;
|
|
|
|
@property (nonatomic, strong) NSDateFormatter *dateFormatter;
|
|
|
|
@property (nonatomic, assign) BOOL notificationEnabled;
|
|
@property (nonatomic, assign) BOOL notificationNoEnergySeismicEnabled;
|
|
@property (nonatomic, assign) BOOL doNotDisturbEnabled;
|
|
@end
|
|
|
|
@implementation SettingsRealTimeAlertsViewController
|
|
|
|
typedef NS_ENUM(NSInteger, RowIdentifier) {
|
|
RowIdentifierAbilitaNotifiche = 0,
|
|
RowIdentifierSismiDaNotificare,
|
|
RowIdentifierAbilitaSismiSenzaIntensita,
|
|
RowIdentifierRaggioSismiLievi,
|
|
RowIndntifierRaggioSismiForti,
|
|
RowIdentifierNonDisturbare,
|
|
RowIdentifierNonDisturbareOraInizio,
|
|
RowIdentifierNonDisturbareOraFine
|
|
};
|
|
|
|
#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(@"Abilitato", @"") subtitle:NSLocalizedString(@"Suona un allarme quando un sisma è rilevato dalla rete smartphone", @"") icon:nil segue:nil],
|
|
[[SettingItem alloc] initWithType:SettingTypeSegmented title:NSLocalizedString(@"Sismi da notificare", @"") subtitle:NSLocalizedString(@"", @"") icon:nil segue:nil],
|
|
[[SettingItem alloc] initWithType:SettingTypeEnable title:NSLocalizedString(@"Sismi senza intensità", @"") subtitle:NSLocalizedString(@"Attiva l'allerta anche su i sismi per i quali non è possibile stimare l'intensità", @"") icon:nil segue:nil],
|
|
[[SettingItem alloc] initWithType:SettingTypeSlider title:NSLocalizedString(@"Raggio sismi lievi", @"") subtitle:nil icon:nil segue:nil],
|
|
[[SettingItem alloc] initWithType:SettingTypeSlider title:NSLocalizedString(@"Raggio sismi forti o intensità non disponibile", @"") subtitle:nil icon:nil segue:nil],
|
|
[[SettingItem alloc] initWithType:SettingTypeEnable title:NSLocalizedString(@"Intervallo allarme", @"") subtitle:NSLocalizedString(@"Non attivare allarmi o notifiche in questo lasso di tempo", @"") icon:nil segue:nil],
|
|
[[SettingItem alloc] initWithType:SettingTypeDate title:NSLocalizedString(@"Ora di inizio", @"") subtitle:nil icon:nil segue:nil],
|
|
[[SettingItem alloc] initWithType:SettingTypeDate title:NSLocalizedString(@"Ora di fine", @"") subtitle:nil icon:nil segue:nil]
|
|
];
|
|
self.dataSourceSismi = [EQNData seismicToNotify];
|
|
self.dataSourceRaggioSisma = [EQNData raggioSismi];
|
|
|
|
|
|
[self setupView];
|
|
}
|
|
|
|
#pragma mark - Private
|
|
|
|
- (void)setupUI
|
|
{
|
|
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)setupView
|
|
{
|
|
self.notificationEnabled = [EQNAllertaSismica center].isAbilitato;
|
|
self.notificationNoEnergySeismicEnabled = [EQNAllertaSismica center].isSimiSenzaIntensita;
|
|
self.doNotDisturbEnabled = [EQNAllertaSismica center].isintervalloAllarme;
|
|
|
|
|
|
// sismi da notificare
|
|
EQNGenericValue *sismiDaNotificare = [EQNData seismicToNotifyFor:[EQNAllertaSismica center].sismiDaNotificare];
|
|
self.currentSeismicToNotify = sismiDaNotificare;
|
|
|
|
// raggio sismi lievi
|
|
EQNGenericValue *raggioSismiLievi = [EQNData raggioSismaFor:[EQNAllertaSismica center].raggioSismiLievi];
|
|
self.currentLowSeismicRadius = raggioSismiLievi;
|
|
|
|
// raggio sismi forti
|
|
EQNGenericValue *raggioSismiForti = [EQNData raggioSismaFor:[EQNAllertaSismica center].raggioSismiForti];
|
|
self.currentStrongSeismicRadius = raggioSismiForti;
|
|
|
|
// non disturbare, orari
|
|
NSDate *startTime = [EQNData doNotDisturbEndDateFrom:[EQNAllertaSismica center].oraioInizio];
|
|
self.currentStartTime = startTime;
|
|
|
|
NSDate *endTime = [EQNData doNotDisturbEndDateFrom:[EQNAllertaSismica center].orarioFine];
|
|
self.currentEndTime = endTime;
|
|
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
|
|
[self.tableView reloadData];
|
|
}
|
|
|
|
|
|
#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(@"Alerta sismica", @"titolo impostazioni notifiche");
|
|
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 center].isAbilitato = self.notificationEnabled;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self.tableView reloadData];
|
|
};
|
|
} else if (indexPath.row == RowIdentifierAbilitaSismiSenzaIntensita) {
|
|
cell.toggleSwitch.on = self.notificationNoEnergySeismicEnabled;
|
|
cell.isDisabled = !self.notificationEnabled;
|
|
cell.valueChanged = ^(BOOL enabled) {
|
|
self.notificationNoEnergySeismicEnabled = enabled;
|
|
[EQNAllertaSismica center].isSimiSenzaIntensita = self.notificationNoEnergySeismicEnabled;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self.tableView reloadData];
|
|
};
|
|
} else if (indexPath.row == RowIdentifierNonDisturbare) {
|
|
cell.toggleSwitch.on = self.doNotDisturbEnabled;
|
|
cell.isDisabled = !self.notificationEnabled;
|
|
cell.valueChanged = ^(BOOL enabled) {
|
|
self.doNotDisturbEnabled = enabled;
|
|
[EQNAllertaSismica center].isintervalloAllarme = self.doNotDisturbEnabled;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self.tableView reloadData];
|
|
};
|
|
}
|
|
|
|
return cell;
|
|
} else if (setting.type == SettingTypeSegmented) {
|
|
SettingSegmentedTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SettingSegmentedTableViewCell.Identifier forIndexPath:indexPath];
|
|
cell.titleLabel.text = setting.displayTitle;
|
|
|
|
if (indexPath.row == RowIdentifierSismiDaNotificare) {
|
|
cell.isDisabled = !self.notificationEnabled;
|
|
[cell configureControlWith:self.dataSourceSismi current:self.currentSeismicToNotify];
|
|
cell.valueChanged = ^(EQNGenericValue *item) {
|
|
[self updateSismicToNotify:item];
|
|
};
|
|
}
|
|
|
|
return cell;
|
|
} else if (setting.type == SettingTypeSlider) {
|
|
SettingSliderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SettingSliderTableViewCell.Identifier forIndexPath:indexPath];
|
|
cell.titleLabel.text = setting.displayTitle;
|
|
|
|
if (indexPath.row == RowIdentifierRaggioSismiLievi) {
|
|
cell.isDisabled = !self.notificationEnabled;
|
|
[cell configureSliderWith:self.dataSourceRaggioSisma current:self.currentLowSeismicRadius];
|
|
cell.valueChanged = ^(EQNGenericValue *item) {
|
|
[self updateLowSeismicRadius:item];
|
|
};
|
|
} else if (indexPath.row == RowIndntifierRaggioSismiForti) {
|
|
cell.isDisabled = !self.notificationEnabled;
|
|
[cell configureSliderWith:self.dataSourceRaggioSisma current:self.currentStrongSeismicRadius];
|
|
cell.valueChanged = ^(EQNGenericValue *item) {
|
|
[self updateStrongSeismicRadius:item];
|
|
};
|
|
}
|
|
|
|
return cell;
|
|
} else if (setting.type == SettingTypeDate) {
|
|
SettingDateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SettingDateTableViewCell.Identifier forIndexPath:indexPath];
|
|
cell.isDisabled = !self.doNotDisturbEnabled || !self.notificationEnabled;
|
|
cell.userInteractionEnabled = self.doNotDisturbEnabled && self.notificationEnabled;
|
|
cell.titleLabel.text = setting.title;
|
|
|
|
if (indexPath.row == RowIdentifierNonDisturbareOraInizio) {
|
|
cell.isPickerVisible = self.isStartTimeExpanded;
|
|
[cell updateDate:self.currentStartTime];
|
|
cell.valuesLabel.text = [self.dateFormatter stringFromDate:self.currentStartTime];
|
|
cell.valueChanged = ^(NSDate *date) {
|
|
[self updateStartTime:date];
|
|
};
|
|
} else if (indexPath.row == RowIdentifierNonDisturbareOraFine) {
|
|
cell.isPickerVisible = self.isEndTimeExpanded;
|
|
[cell updateDate:self.currentEndTime];
|
|
cell.valuesLabel.text = [self.dateFormatter stringFromDate:self.currentEndTime];
|
|
cell.valueChanged = ^(NSDate *date) {
|
|
[self updateEndTime:date];
|
|
};
|
|
}
|
|
|
|
return cell;
|
|
}
|
|
|
|
return nil;
|
|
}
|
|
|
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
if (indexPath.row == RowIdentifierNonDisturbareOraInizio) {
|
|
self.isStartTimeExpanded = !self.isStartTimeExpanded;
|
|
} else if (indexPath.row == RowIdentifierNonDisturbareOraFine) {
|
|
self.isEndTimeExpanded = !self.isEndTimeExpanded;
|
|
}
|
|
|
|
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
|
|
}
|
|
|
|
#pragma mark - Private
|
|
|
|
- (void)updateSismicToNotify:(EQNGenericValue *)seismic
|
|
{
|
|
[EQNAllertaSismica center].sismiDaNotificare = seismic.value;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self setupView];
|
|
}
|
|
|
|
- (void)updateLowSeismicRadius:(EQNGenericValue *)radius
|
|
{
|
|
[EQNAllertaSismica center].raggioSismiLievi = radius.value;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self setupView];
|
|
}
|
|
|
|
- (void)updateStrongSeismicRadius:(EQNGenericValue *)radius
|
|
{
|
|
[EQNAllertaSismica center].raggioSismiForti = radius.value;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self setupView];
|
|
}
|
|
|
|
- (void)updateStartTime:(NSDate *)date
|
|
{
|
|
[EQNAllertaSismica center].oraioInizio = date;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self setupView];
|
|
}
|
|
|
|
- (void)updateEndTime:(NSDate *)date
|
|
{
|
|
[EQNAllertaSismica center].orarioFine = date;
|
|
[[EQNAllertaSismica center] saveUserInfo];
|
|
[self setupView];
|
|
}
|
|
|
|
@end
|